0

我有一个程序可以计算 SMS_OUTBOX 表中的行数,如果它的行数超过 1000 则发送电子邮件。我的程序如下:

CREATE OR REPLACE PROCEDURE SEND_EMAIL_ABOUT_PENDING_SMS IS
  CHECK_SMS_COUNT NUMBER := 1000;
  CURRENT_SMS_COUNT NUMBER;
BEGIN
  SELECT COUNT(1) INTO CURRENT_SMS_COUNT FROM SMS_SCHEMA.SMS_OUTBOX;

  IF CURRENT_SMS_COUNT >= CHECK_SMS_COUNT THEN
    UTL_MAIL.SEND(
        sender=>'<SENDER_EMAIL>',
        recipients=>'<RECIPIENT_EMAIL>',
        subject=>'Pending SMS',
        Message=>'Pending SMS count exceeded.'
    );
  END IF;
END SEND_EMAIL_ABOUT_PENDING_SMS;
/

当我编译上面我得到这个错误。

在此处输入图像描述

然后我尝试在没有过程的情况下执行这行代码:

EXEC UTL_MAIL.SEND(
    sender=>'<SENDER_EMAIL>',
    recipients=>'<RECIPIENT_EMAIL>',
    subject=>'Pending SMS',
    Message=>'Pending SMS count exceeded.'
);

然后我得到了这个错误:

PLS-00302:必须声明组件“发送”

我对 Oracle(和 PL/SQL)非常陌生。谁能帮我在 Oracle 中发送电子邮件,需要哪些配置?

4

2 回答 2

1

请检查 UTL_MAIL 是否安装正确。

按照链接UTL_MAIL获取所需的信息和配置

Setup
The package is loaded by running the following scripts.

CONN sys/password AS SYSDBA
@$ORACLE_HOME/rdbms/admin/utlmail.sql
@$ORACLE_HOME/rdbms/admin/prvtmail.plb

In addition the SMTP_OUT_SERVER parameter must be set to identify the SMTP server.

CONN sys/password AS SYSDBA
ALTER SYSTEM SET smtp_out_server='smtp.domain.com' SCOPE=SPFILE;

-- Instance restart only necessary in 10gR1.
SHUTDOWN IMMEDIATE
STARTUP
于 2019-03-03T12:30:41.527 回答
0

或者,您可以使用utl_http.request方法作为

  v_url := 'http://<yourWebSite>/notification.asp?sender=<SENDER_EMAIL>
                                                 &recipients=<RECIPIENT_EMAIL>
                                                 &subject=Pending SMS
                                                 &message=Pending SMS count exceeded.';

  v_rep := utl_http.request(utl_url.escape(v_url, false, 'UTF-8'));

在哪里

  v_url varchar2(4000);
  v_rep varchar2(4000);

需要在begin关键字之前声明。

于 2019-03-03T21:46:52.340 回答