Dynamic SQL 사용하기(SQL문을 동적으로 생성)
런타임중에 쿼리의 검색조건이나
정렬순서, 힌트 등을 지정할 수 있다.
-- 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
-- 아래는 INSERT 예제이다. SQL> DECLARE
stmt_str VARCHAR2(200); v_empno NUMBER := 4790; v_deptno
NUMBER := 30; v_ename VARCHAR2(20) := 'OJC'; v_sal NUMBER(4)
:= 3500; BEGIN stmt_str := 'INSERT INTO emp(empno, ename, sal,
deptno) VALUES (:empno, :ename, :sal, :deptno)';
EXECUTE IMMEDIATE stmt_str USING v_empno, v_ename, v_sal, v_deptno;
END; /
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
|
댓글 없음:
댓글 쓰기