「Oracle」EXECUTEで動的SQL構文を実行するサンプル
書式
CREATE OR REPLACE PROCEDURE xxx
EXECUTE IMMEDIATE {SQL構文};
変数の構成
変数1:SQL文の文字列
変数2:テーブル名の変数
変数3:テーブルのカラム
使用例
CREATE OR REPLACE PROCEDURE INSERTUSERPRO
IS
CFT VARCHAR2(720);
CFTTBL VARCHAR2(20);
CFTDEP VARCHAR2(10);
CFTNAME VARCHAR2(80);
BEGIN
CFT := '';
CFTTBL := 'USER_TBL';
CFTDEP := '1002';
CFTNAME := '開発部';
--挿入SQL文を変数CFTで作成
CFT := 'INSERT INTO '
CFT := CFT || CFTTBL;
CFT := CFT || ' (DEPID,DEPNAME)';
CFT := CFT || ' VALUES ('
CFT := CFT || CFTDEP
CFT := CFT || CFTNAME
CFT := CFT || ')';
--動的SQL構文を実行
EXECUTE IMMEDIATE CFT;
COMMIT;
END;
CREATE OR REPLACE PROCEDURE INSERTUSERPRO
IS
CFT VARCHAR2(720);
CFTTBL VARCHAR2(20);
CFTDEP VARCHAR2(10);
CFTNAME VARCHAR2(80);
BEGIN
CFT := '';
CFTTBL := 'USER_TBL';
CFTDEP := '1002';
CFTNAME := '開発部';
--挿入SQL文を変数CFTで作成
CFT := 'INSERT INTO '
CFT := CFT || CFTTBL;
CFT := CFT || ' (DEPID,DEPNAME)';
CFT := CFT || ' VALUES ('
CFT := CFT || CFTDEP
CFT := CFT || CFTNAME
CFT := CFT || ')';
--動的SQL構文を実行
EXECUTE IMMEDIATE CFT;
COMMIT;
END;
CREATE OR REPLACE PROCEDURE INSERTUSERPRO IS CFT VARCHAR2(720); CFTTBL VARCHAR2(20); CFTDEP VARCHAR2(10); CFTNAME VARCHAR2(80); BEGIN CFT := ''; CFTTBL := 'USER_TBL'; CFTDEP := '1002'; CFTNAME := '開発部'; --挿入SQL文を変数CFTで作成 CFT := 'INSERT INTO ' CFT := CFT || CFTTBL; CFT := CFT || ' (DEPID,DEPNAME)'; CFT := CFT || ' VALUES (' CFT := CFT || CFTDEP CFT := CFT || CFTNAME CFT := CFT || ')'; --動的SQL構文を実行 EXECUTE IMMEDIATE CFT; COMMIT; END;