2015년 3월 5일 목요일

#109. PL/SQL강좌, 동적SQL(Dynamic SQL)이란?,SQL문을 동적으로 생성,PLSQL교육



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 처리가 정상적으로 완료되었습니다.




댓글 없음:

댓글 쓰기