動的SQL文
EXECUTE IMMEDIATEを利用する場合。
--その1
DECLARE
VAR2_SQL VARCHAR2(32767);
ID_A NUMBER(27);
NUM_A NUMBER(6);
BEGIN
NUM_A := 3200;
VAR2_SQL := 'SELECT ID FROM TBL_A WHERE ID = ' || NUM_A;
EXECUTE IMMEDIATE VAR2_SQL INTO ID_A;
DBMS_OUTPUT.PUT_LINE(ID_A);
END;
--その2
DECLARE
VAR2_SQL VARCHAR2(32767);
ID_A NUMBER(27);
BEGIN
VAR2_SQL := 'SELECT ID FROM TBL_A WHERE ID = :DATA1';
EXECUTE IMMEDIATE VAR2_SQL INTO ID_A USING 3200;
DBMS_OUTPUT.PUT_LINE(ID_A);
END;
OPEN FORを利用する場合。
DECLARE
TYPE EMPCURTYP IS REF CURSOR; -- DEFINE WEAK REF CURSOR TYPE
EMP_CV EMPCURTYP; -- DECLARE CURSOR VARIABLE
MY_ENAME VARCHAR2(15);
MY_SAL NUMBER := 1000;
VAR2_SQL VARCHAR2(32767);
BEGIN
VAR2_SQL := 'SELECT ENAME, SAL FROM EMP'
OPEN EMP_CV FOR VAR2_SQL;
LOOP
FETCH EMP_CV INTO MY_ENAME, MY_SAL; -- FETCH NEXT ROW
EXIT WHEN EMP_CV%NOTFOUND; -- EXIT LOOP WHEN LAST ROW IS FETCHED
-- PROCESS ROW
END LOOP;
END;
DBMS_SQLパッケージを利用する場合。
DECLARE
C_ID INTEGER;
RET INTEGER;
VAR2_SQL VARCHAR2(32767);
BEGIN
VAR2_SQL := 'UPDATE TBL_A SET COL_1 = NEW_VAL WHERE ID = 1'
C_ID := DBMS_SQL.OPEN_CURSOR;--カーソルオープン
DBMS_SQL.PARSE(C_ID,VAR2_SQL,DBMS_SQL.NATIVE);--SQL文の解析
RET := DBMS_SQL.EXECUTE(C_ID);--SQL文の実行
END;
お問い合わせは、こちら
加茂屋株式会社
(C) Kamoya Corporation