「Oracle」バインド変数で動的SQLを実行するサンプル
書式
EXECUTE IMMEDIATE SQL構文 USING 変数;
使用例
CREATE OR REPLACE PROCEDURE INSERTUSERPRO
IS
CFT VARCHAR2(720);
CFTTBL VARCHAR2(20);
CFTDEP VARCHAR2(15);
CFTNAME VARCHAR2(40);
BEGIN
--CFT変数でSQL文を作成
CFT := '';
--CFTTBL変数でテーブル
CFTTBL := 'USER_TBL';
CFTDEP := '1002';
CFTNAME := '開発部';
--挿入SQL文を変数CFTで作成
CFT := 'INSERT INTO '
CFT := CFT || CFTTBL;
CFT := CFT || ' (DEPID,DEPNAME)';
--バインド変数CID DPNAME
CFT := CFT || ' VALUES (:CID, :DPNAME)';
--動的SQL構文を実行
EXECUTE IMMEDIATE CFT USING CFTDEP, CFTNAME;
COMMIT;
END;
CREATE OR REPLACE PROCEDURE INSERTUSERPRO
IS
CFT VARCHAR2(720);
CFTTBL VARCHAR2(20);
CFTDEP VARCHAR2(15);
CFTNAME VARCHAR2(40);
BEGIN
--CFT変数でSQL文を作成
CFT := '';
--CFTTBL変数でテーブル
CFTTBL := 'USER_TBL';
CFTDEP := '1002';
CFTNAME := '開発部';
--挿入SQL文を変数CFTで作成
CFT := 'INSERT INTO '
CFT := CFT || CFTTBL;
CFT := CFT || ' (DEPID,DEPNAME)';
--バインド変数CID DPNAME
CFT := CFT || ' VALUES (:CID, :DPNAME)';
--動的SQL構文を実行
EXECUTE IMMEDIATE CFT USING CFTDEP, CFTNAME;
COMMIT;
END;
CREATE OR REPLACE PROCEDURE INSERTUSERPRO IS CFT VARCHAR2(720); CFTTBL VARCHAR2(20); CFTDEP VARCHAR2(15); CFTNAME VARCHAR2(40); BEGIN --CFT変数でSQL文を作成 CFT := ''; --CFTTBL変数でテーブル CFTTBL := 'USER_TBL'; CFTDEP := '1002'; CFTNAME := '開発部'; --挿入SQL文を変数CFTで作成 CFT := 'INSERT INTO ' CFT := CFT || CFTTBL; CFT := CFT || ' (DEPID,DEPNAME)'; --バインド変数CID DPNAME CFT := CFT || ' VALUES (:CID, :DPNAME)'; --動的SQL構文を実行 EXECUTE IMMEDIATE CFT USING CFTDEP, CFTNAME; COMMIT; END;