Это будет работать, нет проблем. Простой способ -
- создать текстовый элемент (
P6_SUPERVISOR
)
- создать кнопку для отправки страницы; вам нужно, чтобы значение
P6_SUPERVISOR
было установлено в состояние сеанса
создать процесс, который вызывает UTL_MAIL
; Содержимое элемента P6_SUPERVISOR
используется в качестве источника для параметра RECIPIENTS
. Например:
UTL_MAIL.send (sender => 'test@test.com',
recipients => :P6_SUPERVISOR,
subject => 'Test message - subject',
MESSAGE => 'Test message - message body');
[РЕДАКТИРОВАТЬ: как отправлять письма в цикле?]
Я не уверен, что вы имели в виду, создавая функцию; он возвращает только один адрес электронной почты, который, вероятно, принадлежит имени, переданному через параметр NAME_IN (но вы использовали имя 'test' в запросе курсора).
Однако вы указали, что функция возвращает NUMBER, а переменная, в которую вы выбираете результат, является VARCHAR2. Итак, какой из них является правдой?
Если вы настаиваете на функции, не заключайте ее имя в двойные кавычки, так как вам всегда придется ссылаться на нее таким образом (двойные кавычки, правильный верхний / нижний / смешанный регистр).
Кроме того, каков тип данных столбца contract_start_period? Если это DATE, не TO_DATE. То же самое касается SYSDATE - это функция, которая в любом случае возвращает тип данных DATE, поэтому неправильно , чтобы преобразовать его в дату еще раз.
Вот пример, в котором используется курсорный цикл FOR (поскольку его легче поддерживать), и он отправляет почту на все адреса супервизорной почты, возвращаемые этим оператором SELECT.
begin
for cur_r in (select supervisoremail
from employee e join supervisors s on s.supervisorname = e.supervisorname1
or s.supervisorname = e.supervisorname2
where contract_start_period < sysdate - 275
and e.employee_name = 'test'
)
loop
utl_mail.send(sender => 'test@test.com',
recipients => cur_r.supervisoremail,
subject => 'Test message - subject',
message => 'Test message - message body');
end loop;
end;