отправка электронной почты от оракула 12c proc - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь отправить электронную почту от oracle 12c из хранимой процедуры, но я получаю некоторые ошибки при компиляции.

create or replace PROCEDURE email_alert as

  l_mail_host  VARCHAR2(50) := 'smtp.companyname.com';
  l_from       VARCHAR2(50) := 'email';
  l_to         VARCHAR2(50) := 'email';
BEGIN
  UTL_MAIL.send(sender     => l_from,
                recipients => l_to,
                subject    => 'AUTOMATED_EMAIL_ALERT_10G (MYSID): Success',
                message    => 'AUTOMATED_EMAIL_ALERT_10G (MYSID) completed
successfully!');
EXCEPTION
  WHEN OTHERS THEN
    UTL_MAIL.send(sender     => l_from,
                  recipients => l_to,
                  subject    => 'AUTOMATED_EMAIL_ALERT_10G (MYSID): Error',
                  message    => 'AUTOMATED_EMAIL_ALERT_10G (MYSID) failed with the
following error:' || SQLERRM);
END email_alert;

когда я выполняю вышеописанную процедуру, выдается ошибка как

: PLS-00201: identifier 'UTL_MAIL.SEND' must be declared. what am i missing here?

1 Ответ

3 голосов
/ 11 апреля 2019

Вы установили пакет UTL_MAIL в вашу базу данных.Выполните следующие шаги.Надеюсь, это вам поможет.

  • Перейдите в каталог Oracle Home и перейдите по пути rdbms > admin.Например, C:\ProgramFiles\OracleXE\app\oracle\product\11.2.0\server\rdbms\admin
  • Подключитесь к SQLPLUS по этому пути и запустите @utlmail.sql и @prvtmail.plb пакетов
  • После создания пакетов предоставьте разрешение на выполнение, как показано ниже, если это требуется для пользователя БДGRANT EXECUTE ON UTL_MAIL TO <DB_USER>;
  • Убедитесь, что ACL создан для хоста, если он не создан, как показано ниже (код создания ACL для 12c или выше), и повторите процедуру еще раз. Укажите имя хоста и имя_состава в приведенном ниже блоке кода.. Нижний и верхний порты, если требуется.Порт по умолчанию для почтового сервера: 25.

    begin dbms_network_acl_admin.append_host_ace( host=>'<example.com>', lower_port=>25, --port if required or NULL upper_port=>25, --port if required or NULL ace=>xs$ace_type(privilege_list =>xs$name_list('connect','resolve'), principal_name=>'<DB_USER>', principal_type =>xs_acl.ptype_db)); END;

...