こんにちは!システムサポートの寺田です!
Snowflakeを用いてメールを送信できることをご存じでしょうか?
実は、1つの関数を呼び出すだけで簡単にメールを送信できてしまうんです。
本記事では、Snowflakeを用いたメール送信の方法について紹介します。
例として、「残業時間が40時間以上の社員がいることを担当者に通知する」
ストアドプロシージャを作成しました。
参考にしていただければ幸いです。
本記事でわかること
・Snowflakeを用いたメールの送信方法
オブジェクト作成
作成するオブジェクトは以下になります。
・データベース
・スキーマ
・テーブル
・メール通知統合
・ストアドプロシージャ
データべース作成
SYSADMINを使用して、データベース(management)を作成します。
--データベース作成
CREATE DATABASE management;
スキーマ作成
スキーマ(attendance)を作成します。
--スキーマ作成
CREATE SCHEMA management.attendance;
テーブル作成
テーブル(work_hours)を作成します。
--テーブル作成
CREATE TABLE management.attendance.work_hours(
emp_id NUMBER,
emp_name VARCHAR,
work_time NUMBER,
over_time NUMBER
);
--データ挿入
INSERT INTO management.attendance.work_hours VALUES(1,'林 大士',210,50);
INSERT INTO management.attendance.work_hours VALUES(2,'牧 ひろし',160,0);
INSERT INTO management.attendance.work_hours VALUES(3,'寺畑 裕志',200,40);
以下が、作成したテーブル(work_hours)の構造です。
| 物理名 | 論理名 |
|---|---|
| emp_id | 社員番号 |
| emp_name | 社員名 |
| work_time | 労働時間 |
| over_time | 残業時間 |
以下が、テーブル(work_hours)に挿入したデータです。
| emp_id | emp_name | work_time | over_time |
|---|---|---|---|
| 1 | 林 大士 | 210 | 50 |
| 2 | 牧 ひろし | 160 | 0 |
| 3 | 寺畑 裕志 | 200 | 40 |
メール通知統合作成
メール送信に必要なメール通知統合を作成していきます。
メール通知統合は、デフォルトではACCOUNTADMINのみ作成できます。
メールアドレスはアカウント内の検証されたメールアドレスのみ使用できます。
--メール通知統合作成
create notification integration mail_rule
type = email
enabled = true
allowed_recipients = ('xxxxx@xxx.xx.xx') --許可するメールアドレス
default_recipients = ('xxxxx@xxx.xx.xx') --デフォルトのメールアドレス
;
allowed_recipientsには、許可するメールアドレスを指定(複数指定可能)
default_recipientsには、メール送信の関数内でメールアドレスが指定されない場合の
の送信先を指定します。
※default_recipientsに指定したメールアドレスは、allowed_recipientsに指定されている
必要があります。
プロシージャ作成
次にメール送信を行うストアドプロシージャを作成していきます。
メール送信は、SYSTEM$SEND_EMAIL関数を用いて行います。
この関数を使うことで、メール通知統合を経由して、
指定した宛先へメールを送信できます。
メール通知統合で、allowed_recipientsに指定したメールアドレスのみ
メール送信可能なことに注意が必要です。
CREATE OR REPLACE PROCEDURE management.attendance.send_mail()
RETURNS VARCHAR
LANGUAGE SQL
AS
--変数定義
DECLARE
num1 NUMBER;
num2 NUMBER;
var1 VARCHAR;
mail_body VARCHAR;
BEGIN
--最も大きい社員番号を変数num1に格納
SELECT MAX(emp_id)
INTO :num1
FROM management.attendance.work_hours;
--社員番号1から社員番号num1までループ処理
FOR i IN 1 TO :num1 DO
--残業時間取得
SELECT over_time
INTO :num2
FROM management.attendance.work_hours
WHERE emp_id = :i;
--社員名取得
SELECT emp_name
INTO :var1
FROM management.attendance.work_hours
WHERE emp_id = :i;
--メール本文作成
mail_body := :var1 || 'さんの残業時間が40時間以上になりました。';
--残業時間 >= 40の時、メール送信
IF(:num2 >= 40) THEN
--メール送信
CALL SYSTEM$SEND_EMAIL(
'mail_rule', --メール通知統合
'xxxxx@xxx.xx.xx', --送信先
'残業通知', --件名
:mail_body --メール本文
);
END IF;
END FOR;
RETURN '完了';
END;
実行結果確認
実行
先ほど作成したストアドプロシージャを実行することで、
残業時間が40時間以上の社員がいることを担当者に通知されます。
テーブルのデータを見ると、残業時間が40時間以上なのは林さん、寺畑さんです。
正しくプロシージャが機能すれば、2名分のメールが担当者の元へ届くはずです。
| emp_id | emp_name | work_time | over_time |
|---|---|---|---|
| 1 | 林 大士 | 210 | 50 |
| 2 | 牧 ひろし | 160 | 0 |
| 3 | 寺畑 裕志 | 200 | 40 |
それでは、プロシージャを実行していきます。
--実行
call management.attendance.send_mail();
結果


無事、2人分の残業通知メールを送信することができました!
まとめ
今回は、Snowflakeを用いたメールの送信方法について紹介しました。
記載したコードをご自身のSnowflake環境で実行すれば、
気軽にメール送信を試すことができます。
ぜひ、試してみてください!
以上



コメント