首页 > 解决方案 > 从 oracle 12c proc 发送电子邮件

问题描述

我正在尝试通过存储过程从 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?

标签: sqloracleoracle12c

解决方案


您已经在数据库中安装了 UTL_MAIL 包。请按照以下步骤操作。希望这对您有所帮助。

  • 转到您的 Oracle 主目录并导航到路径 rdbms > admin。例如C:\ProgramFiles\OracleXE\app\oracle\product\11.2.0\server\rdbms\admin
  • 从该路径连接到 SQLPLUS 并运行@utlmail.sql@prvtmail.plb打包
  • 创建包后,如果需要,请授予 DB 用户执行权限,如下所示 GRANT EXECUTE ON UTL_MAIL TO <DB_USER>;
  • 如果未按如下所示创建 ACL,请确保为主机创建 ACL(12c 或更高版本的 ACL 创建代码)并再次重试您的过程。在下面的代码块中提供主机和 principal_name。如果需要,请提供下端口和上端口。邮件服务器的默认端口是 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;


推荐阅读