加茂屋株式会社 - ソフトウェアー - Tips


動的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;

Tipsへ


お問い合わせは、こちら

加茂屋株式会社 (C) Kamoya Corporation