sql - 从 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?
解决方案
您已经在数据库中安装了 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;
推荐阅读
- wordpress - 使用 slug 从 product_categories 短代码中排除类别
- ios - 尽管 index.html 和 manifest.json 发生变化,iOS 15.1 safari PWA 状态栏颜色仍保持绿色
- mongodb - 带有查找的外部集合的MongoDB条件
- python - 如何找到给定数据的分布?
- c# - 从 VB.NET 转换为 C# 时出错。不可调用成员“DataSet.Tables”
- html - 如何更改地图大小?
- docker - 使用 Dockerfile 构建映像时如何在主机上指定要映射到的端口
- .net - 如何更改 Microsoft Visual Studio 安装程序项目本地化
- quasar-framework - 如何从 quasar 默认应用模板中删除路由器?
- ios - react-native:如何扫描同一应用程序中 webview/网页内的 QR 码?