본문 바로가기

IT/오라클

Oracle PL/SQL 강좌 7.1. 예외(Exception) 예외(Exception)란? 오라클 PL/SQL의 오류를 예외라고 한다. 오류는 PL/SQL을 컴파일 할때 문법적인 오류로 발생하는 컴파일 타임 오류와, 프로그램을 실행 할 때 발생하는실행타임 오류로 구분 할 수 있다.PL/SQL오류의 종류예 외설 명처 리미리 정의된 오라클 서버 오류(Predefined Oracle Server)PL/SQL에서 자주 발생하는 약20개의 오류선언할 필요도 없고, 발생시에 예외 절로 자동 트랩(Trap) 된다.미리 정의되지 않은 오라클 서버 오류 (Non-Predefined Oracle Server)미리 정의된 오라클 서버 오류를 제외한 모든 오류선언부에서 선언해야 하고 발생시 자동 트랩된다.사용자 정의 오류 (User-Defined)개발자가 정한 조건에 만족하지 않을경우 .. 더보기
Oracle PL/SQL 강좌 6.2.5. The WHERE CURRENT OF Clause WHERE CURRENT OF ROWID를 이용하지 않고도 현재 참조하는 행을 갱신하고 삭제할 수 있게 한다. 추가적으로 FETCH문에 의해 가장 최근에 처리된 행을 참조하기 위해서 "WHERE CURRENT OF 커서이름 " 절로DELETE나 UPDATE문 작성이 가능하다. 이 절을 사용할 때 참조하는 커서가 있어야 하며, FOR UPDATE절이 커서 선언 query문장 안에 있어야 한다. 그렇지 않으면 에러가 발생한다.WHERE CURRENT OF 예제 -- DBMS_OUTPUT.PUT_LINE을 출력하기 위해 사용 SQL> SET SERVEROUTPUT ON; SQL> CREATE OR REPLACE PROCEDURE where_current IS CURSOR emp_list IS SELECT em.. 더보기
Oracle PL/SQL 강좌 6.2.4. 파라미터가 있는 커서(Cursors with Parameters) 커서가 OPEN되고 질의가 실행되면 매개 변수 값을 커서에 전달할 수 있다. 다른 active set을 원할때 마다 explicit 커서를 따로 선언해야 한다.파라미터가 있는 커서 문법파라미터가 있는 커서 예제 SQL> CREATE OR REPLACE PROCEDURE ParamCursor_Test (param_deptno emp.deptno%TYPE) IS v_ename emp.ename%TYPE; -- Parameter가 있는 커서의 선언 CURSOR emp_list(v_deptno emp.deptno%TYPE) IS SELECT ename FROM emp WHERE deptno = v_deptno; BEGIN DBMS_OUTPUT.ENABLE; DBMS_OUTPUT.PUT_LINE(' ****** .. 더보기
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.. 더보기