通常、トリガーでメールを送信しようとするのはお勧めできません。
<オール>INSERT
のすべてまたは一部をロールバックして再実行することを選択するため、電子メールを複数回送信することになります。 書き込みの一貫性を維持するためのステートメント。
通常、電子メールを送信する必要がある行を定期的に検索し、電子メールを送信してから、テーブルを更新するデータベース ジョブを使用すると、はるかに優れたサービスが提供されます。古い DBMS_JOB
のいずれかを使用できます パッケージまたはより新しく洗練された DBMS_SCHEDULER
パッケージ。
CREATE OR REPLACE PROCEDURE process_issues
AS
BEGIN
FOR i IN (SELECT *
FROM your_table_name
WHERE issue_added = 1
AND email_sent = 0)
LOOP
send_email( i.issue_id );
UPDATE your_table_name
SET email_sent = 1
WHERE issue_id = i.issue_id;
END LOOP;
END;
これは、たとえば 5 分ごとに実行されるようにスケジュールされます (DBMS_SCHEDULER
を使用することもできます)。 パッケージ)
DECLARE
l_jobno PLS_INTEGER:
BEGIN
dbms_job.submit( l_jobno,
'BEGIN process_issues; END;',
sysdate + interval '5' minute,
'sysdate + interval ''5'' minute' );
commit;
END;
UTL_MAIL パッケージ
を使用できます send_email
を実装する 手順。おそらく、UTL_MAIL.SEND
を呼び出す必要があるだけです。 適切なパラメーターを使用して (SMTP_OUT_SERVER
を構成したと仮定します) パラメータと、ユーザーは UTL_MAIL
への適切なアクセスを許可されています パッケージと、その SMTP サーバーとの通信を可能にする ACL に追加します)。