Oracle PLSQL - user000422/0 GitHub Wiki
拡張SQL。
DECLARE … 宣言部 変数などを定義 BEGIN~END … 処理部
SELECT INTO … SELECT結果を変数に代入(主にMAXやCOUNTで使う) 結果が0件、複数件の場合はエラー
-- SELECT INTO 基本型
DECLARE
c_userId sample_table.userId%TYPE; -- 変数宣言(SELECT結果を代入)
BEGIN
SELECT userId
INTO c_userId --
FROM sample_table;
END
CASE … 分岐 WHEN … 条件式、THEN … 処理文 単純CASE式では複雑な条件が指定できない IFより簡潔に記述できる ORDER BYに対しても使える
-- 単純CASE式 基本型
SELECT
userId,
CASE color -- 対象カラム
WHEN 'red' THEN 'apple' -- 条件
ELSE 'no fruits' -- 条件に一致しなかった場合
END AS result -- 出力カラム(自身で定義)
FROM sample_table;
-- 検索CASE式 基本型
SELECT
userId,
CASE
WHEN age < 19 THEN 'young' -- 条件
ELSE 'old' -- 条件に一致しなかった場合
END
FROM sample_table;
WHILE LOOP(応用)
DECLARE
i NUMBER := 0;
WHILE i < 10
LOOP
SELECT * INTO sample FROM sample_table; -- INTO句 必須
i := i + 1;
END LOOP
END
SQLをループ実行
実行後かならずジョブを削除すること。
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'SAMPLE_JOB',
job_type => 'PLSQL_BLOCK',
job_action => q'[
BEGIN
EXECUTE IMMEDIATE 'UPDATE sample_table SET sample_col = 100 WHERE test_col = 10';
END;
]',
start_date => SYSTIMESTAMP,
repeat_interval => 'FREQ=SECONDLY;INTERVAL=10', -- 10秒ごとに
enabled => TRUE
);
END;
/
JOB 運用
-- JOB 無効化
BEGIN
DBMS_SCHEDULER.DISABLE('SAMPLE_JOB');
END;
/
-- JOB 削除
BEGIN
DBMS_SCHEDULER.DROP_JOB('SAMPLE_JOB');
END;
/
-- JOB 確認
SELECT job_name, enabled, state FROM user_scheduler_jobs WHERE job_name = 'SAMPLE_JOB';