본문 바로가기

Oracle PL/SQL 강좌 6.2.3. 명시적 커서의 속성(Explicit Cursor Attributes) Explicit Cursor 속성%ISOPEN- 커서가 OPEN되어 있으면 TRUE- %ISOPEN속성을 이용하여 커서가 열려있는지 알 수 있다.%NOTFOUND- 패치한 데이터가 행을 반환하지 않으면 TRUE- %NOTFOUND속성을 이용하여 루프를 종료 할 시점을 찾는다.%FOUND- 패치한 데이터가 행을 반환하면 TRUE%ROWCOUNT- 현재까지 반환 된 모든 데이터 행의 수- %ROWCOUNT속성을 이용하여 정확한 숫자만큼의 행을 추출한다.Explicit Cursor 속성 예제 SQL> CREATE OR REPLACE PROCEDURE AttrCursor_Test IS v_empno emp.empno%TYPE; v_ename emp.ename%TYPE; v_sal emp.sal%TYPE; CUR.. 더보기
Oracle PL/SQL 강좌 6.2.2. FOR문에서 커서 사용(Cursor FOR Loops) FOR문을 사용하면 커서의 OPEN, FETCH, CLOSE가 자동 발생하므로 따로 기술할 필요가 없고, 레코드 이름도 자동 선언되므로 따로 선언할 필요가 없다.FOR문에서 커서 사용 문법FOR문에서 커서 사용 예제 SQL> CREATE OR REPLACE PROCEDURE ForCursor_Test IS -- Cursor 선언 CURSOR dept_sum IS SELECT b.dname, COUNT(a.empno) cnt, SUM(a.sal) salary FROM emp a, dept b WHERE a.deptno = b.deptno GROUP BY b.dname; BEGIN -- Cursor를 FOR문에서 실행시킨다 FOR emp_list IN dept_sum LOOP DBMS_OUTPUT.PUT_L.. 더보기
Oracle PL/SQL 강좌 6.2.1. 명시적 커서(EXPLICIT CURSOR) 커서란 무엇인가?- 커서는 Private SQL의 작업 영역이다.- 오라클 서버에 의해 실행되는 모든 SQL문은 연관된 각각의 커서를 소유하고 있다.- 커서의 종류암시적 커서 : 모든 DML과 PL/SQL SELECT문에 대해 선언된다.명시적 커서 : 프로그래머에 의해 선언되며 이름이 있는 커서이다.Explicit Cursor의 흐름도?문법(Syntax)커서 열기(OPEN)- 커서의 열기는 OPEN문을 사용한다.- 커서안의 검색이 실행되며 아무런 데이터행을 추출하지 못해도 에러가 발생하지 않는다.- 문법 : OPEN cursor_name;커서 패치(FETCH)- 커서의 FETCH는 현재 데이터 행을 OUTPUT변수에 반환 한다.- 커서의 SELECT문의 컬럼의 수와 OUTPUT변수의 수가 동일해야 한다... 더보기
Oracle PL/SQL 강좌 6.1. 암시적 커서(Implicit Cursor) 암시적 커서(Implicit Cursor)란? 암시적인 커서는 오라클이나 PL/SQL실행 메커니즘에 의해 처리되는 SQL문장이 처리되는 곳에 대한 익명의 주소이다. 오라클 데이터베이스에서 실행되는 모든 SQL문장은 암시적인 커서가 생성되며, 커서 속성을 사용 할 수 있다. 암시적 커서는 SQL 문이 실행되는 순간 자동으로 OPEN과 CLOSE를 실행 한다.암시적 커서의 속성- SQL%ROWCOUNT : 해당 SQL 문에 영향을 받는 행의 수- SQL%FOUND : 해당 SQL 영향을 받는 행의 수가 한 개 이상일 경우 TRUE- SQL%NOTFOUND : 해당 SQL 문에 영향을 받는 행의 수가 없을 경우 TRUE- SQL%ISOPEN : 항상 FALSE, 암시적 커서가 열려 있는지의 여부 검색암시적 커.. 더보기
Oracle PL/SQL 강좌 5.2. 조건제어(IF) IF문 문법IF문 예제 SQL> CREATE OR REPLACE PROCEDURE Dept_Search (p_empno IN emp.empno%TYPE ) IS v_deptno emp.deptno%type ; BEGIN DBMS_OUTPUT.ENABLE; SELECT deptno INTO v_deptno FROM emp WHERE empno = p_empno; IF v_deptno = 10 THEN DBMS_OUTPUT.PUT_LINE( ' ACCOUNTING 부서 사원입니다. ' ); ELSIF v_deptno = 20 THEN DBMS_OUTPUT.PUT_LINE( ' RESEARCH 부서 사원입니다. ' ); ELSIF v_deptno = 20 THEN DBMS_OUTPUT.PUT_LINE( ' S.. 더보기