본문 바로가기

Oracle PL/SQL 강좌 7.3. 미리 정의되지 않은 예외(Non-Predefined Exception) 미리 정의되지 않은 예외란? 미리정의되지 않은 예외는 사용자가 선언절에서 예외명을 정의하고, Oracle Server에서 제공하는 Error 번호를 사용하여, 정의된 예외와 연결한 후 EXCEPTION절에서 정의된 예외를 사용한다. - STEP 1 : 예외의 이름을 선언 (선언절) - STEP 2 : PRAGMA EXCEPTION_INIT문장으로 예외의 이름과 오라클 서버 오류 번호를 결합 (선언절) - STEP 3 : 예외가 발생할 경우 해당 예외를 참조한다(예외절)미리 정의되지 않은 예외 예제 SQL> CREATE OR REPLACE PROCEDURE NonPreException_Test IS not_null_test EXCEPTION; -- STEP 1 /* not_null_test는 선언된 예외 .. 더보기
Oracle PL/SQL 강좌 7.2. 미리 정의된 예외(Predefined Exceptions) 오라클 PL/SQL은 자주 일어나는 몇가지 예외를 미리 정의해 놓았으며, 이러한 예외는 개발자가 따로 선언할 필요가 없다.미리 정의된 예외의 종류 - NO_DATA_FOUND : SELECT문이 아무런 데이터 행을 반환하지 못할 때 - DUP_VAL_ON_INDEX : UNIQUE 제약을 갖는 컬럼에 중복되는 데이터가 INSERT 될 때 - ZERO_DIVIDE : 0으로 나눌 때 - INVALID_CURSOR : 잘못된 커서 연산 - Predefined PL/SQL Exceptions 더 보기미리 정의된 예외 예제 SQL> CREATE OR REPLACE PROCEDURE PreException_test (v_deptno IN emp.deptno%TYPE) IS v_emp emp%ROWTYPE; BEG.. 더보기
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(' ****** .. 더보기