7.1.2 Dynamic SQL
사용하기(SQL문을
동적으로 생성)
<!--[if !supportLists]-->n
<!--[endif]-->런타임중에 쿼리의 검색조건이나 정렬순서,
힌트등을 지정 할 수 있다.
-- EMP 테이블에서 10번 부서원들의 이름, 급여 출력
SQL> SET
SERVEROUTPUT ON
SQL> DECLARE
2 TYPE EmpCurTyp IS REF CURSOR;
3 myCur EmpCurTyp;
4 stmt_str VARCHAR2(2000);
5 v_ename emp.ename%TYPE;
6 v_sal emp.sal%TYPE;
7 BEGIN
8 stmt_str := 'SELECT ename, sal
FROM emp WHERE deptno = :1';
9 OPEN myCur FOR stmt_str USING 10;
10
11 LOOP
12 FETCH myCur INTO v_ename, v_sal;
13 EXIT WHEN myCur%NOTFOUND;
14 DBMS_OUTPUT.PUT_LINE(v_ename || ',' ||
v_sal);
15 END LOOP;
16 CLOSE myCur;
17 END;
18 /
CLARK,3404.4
KING,6946.8
MILLER,2257.5
PL/SQL 처리가 정상적으로 완료되었습니다.
-- 아래는 INSERT 예제이다.
SQL> DECLARE
2 stmt_str VARCHAR2(200);
3 v_empno NUMBER := 4790;
4 v_deptno NUMBER := 30;
5 v_ename VARCHAR2(20) := 'OJC';
6 v_sal NUMBER(4) := 3500;
7 location VARCHAR2(10);
8 BEGIN
9 stmt_str := 'INSERT INTO emp(empno, ename, sal, deptno)
VALUES
10 (:empno, :ename, :sal,
:deptno)';
11 EXECUTE IMMEDIATE
stmt_str
12 USING v_empno, v_ename, v_sal,
v_deptno;
13 END;
14 /
PL/SQL 처리가 정상적으로 완료되었습니다.
SQL> select
empno, ename ,sal, deptno from emp where empno =
4790;
EMPNO ENAME SAL
DEPTNO
---------- ---------- ----------
----------
4790 OJC 3500
30
--
RETURNING구 사용예제이다.
SQL> DECLARE
2 stmt_str VARCHAR2(200);
3 v_loc dept.loc%TYPE :=
'GURODIGITAL';
4 v_deptno NUMBER := 10;
5 deptname VARCHAR2(20);
6 BEGIN
7 stmt_str := 'UPDATE dept2
8 SET loc = :newloc
9 WHERE deptno = :deptno
10 RETURNING dname INTO
:dname';
11 EXECUTE IMMEDIATE stmt_str
12 USING v_loc, v_deptno,OUT
deptname;
13
14 DBMS_OUTPUT.PUT_LINE(deptname);
15 END;
16 /
ACCOUNTING
PL/SQL 처리가 정상적으로 완료되었습니다.
댓글 없음:
댓글 쓰기