전체 글 194

PL/SQL 프로시저(Procedure) - 3 ( 프로시저 호출 방법 (EXECUTE, ), user_objects와 user_source )

4) EXECUTE, SQL 내부에서 프로시저 호출 일반적으로 프로시저를 호출하기 위해서는 EXECUTE를 사용한다. 다만 SQL 내부에서 프로시저를 호출하기 위해서는 단순하게 프로시저를 호출하면 된다. 다음은 EXECUTE를 활용하여 생성된 프로시저를 호출하는 내용이다. SET SERVEROUTPUT ON EXECUTE delete_emp (7788) PL/SQL procedure successfully completed. 5) user_objects, user_source user_objects 테이블에는 사용자 객체에 대한 정보가 저장되어 있다. 다음은 프로시저 객체만을 필터링하여 사용자가 만든 프로시저 객체를 출력하는 예제이다. SELECT object_name, status FROM user_o..

PL SQL 2016.07.06

PL/SQL 프로시저(Procedure) - 2 (파라미터 모드)

2) 파라미터 및 파라미터 모드 서브 프로그램 뒤에 선언되어, 호출 환경과 서브 프로그램 간에 데이터를 전달하는 것에 사용된다. 로컬 변수처럼 사용되지만, 파라미터 전달 모드에 따라서 달라진다. 파라미터 모드 설명 IN 서브 프로그램에 제공 (기본값) OUT 호출자에게 제공 IN OUT 입력 값을 제공, 수정되어 리턴될 수 3) 프로시저 생성과 파라미터 모드에 따른 비교 다음은 IN과 OUT 파라미터를 모두 사용한 예제이다. query_emp 프로시저 안에 두 번째, 세 번째 argument에는 OUT 값을 Return 받을 변수명이 들어가야 한다. 만약 상수가 들어가면 에러가 발생한다. CREATE OR REPLACE PROCEDURE query_emp( p_id IN employees.employee..

PL SQL 2016.07.06

PL/SQL 프로시저(Procedure) - 1 (정의와 Syntax)

- 프로시저 특정 작업을 수행하는 서브 프로그램의 한 종류이다. 데이터베이스에 스키마 객체로 저장할 수 있다. 따라서 재사용성과 유지 관리 용이성이 증대된다. 1) 프로시저 Syntax 다음은 프로시저의 Syntax이다. CREATE절을 사용하여 프로시저를 생성할 수 있고, OR REPLACE 옵션을 사용하여 기존 프로시저를 겹쳐쓸 수 있다. DB에 어떻게 프로시저를 저장할 것인지, 그리고 어떤 파라미터를 활용할 지 정해주면 된다. 그리고 IS|AS 하에 기존 PL/SQL Block을 작성해주면 된다. CREATE [OR REPLACE] PROCEDURE procedure_name [ (parameter1 [mode] datatype1, parameter2 [mode] datatype2, …)] IS|A..

PL SQL 2016.07.06

PL/SQL 예외 처리 (Exception Handling) - 5 (RAISE_APPLICATION_ERROR)

[RAISE_APPLICATION_ERROR 프로시저] 20000~20999까지의 에러 숫자는 비워져 있다. 이 에러 숫자에 사용자 정의 오류 메시지를 실행 시킬 수 있다. RAISE_APPLICATION_ERROR 프로시저는 다음과 같은 Syntax로 사용된다. RAISE_APPLICATION_ERROR (error_number, message [, {TRUE | FALSE}]; error_number는 사용자 정의 에러 숫자로, 20000 ~ 20999까지의 범위를 갖는다. message는 사용자 정의 오류 메시지이다. TRUE, FALSE는 이미 정의된 에러 메시지를 출력할 것인지 여부를 표현한다. 다음은 사용자가 만든 에러를 통해서 프로그램이 비정상 종료되는 예제이다. 따라서 이는 특정 상황에서 ..

PL SQL 2016.07.06

PL/SQL 예외 처리 (Exception Handling) - 4 (사용자 정의 에러)

3) 사용자 정의 예외 (명시적 발생) 특정 상황에 대해서 사용자가 의도적으로 예외를 발생 시킬 수 있다. 이는 RAISE 키워드를 통해서 예외를 발생 시킴으로서 구현된다. 다음은 SQL%NOTFOUND가 TRUE일 때 사용자 정의 예외를 RAISE하는 예제이다. DECLARE v_deptno NUMBER := 50 ; v_name VARCHAR2(20) := 'Testing' ; e_invalid_department EXCEPTION; BEGIN UPDATE dept SET dname = v_name WHERE deptno = v_deptno ; IF SQL%NOTFOUND THEN RAISE e_invalid_department ; END IF; COMMIT; EXCEPTION WHEN e_inval..

PL SQL 2016.07.06

PL/SQL 예외 처리 (Exception Handling) - 3 (미리 정의되지 않은 에러)

2) 미리 정의되지 않은 Oracle 에러 (암시적 발생) EXCEPTION이 너무 많기 때문에, 모든 예외를 미리 정의할 수 없다. 따라서 미리 정의되지 않은 오류를 트랩할 수 있는 방법이 필요하다. 다음은 미리 정의 되지 않은 오류를 트랩하는 예제이다. Oracle 서버 오류 02290을 트랩하는 것이다. DECLARE emp_rec emp%ROWTYPE ; e_ck EXCEPTION ; PRAGMA EXCEPTION_INIT (e_ck , -2290) ; BEGIN SELECT * INTO emp_rec FROM emp WHERE ename = UPPER('&name') ; IF emp_rec.sal < 2000 THEN UPDATE emp SET sal = &salary WHERE empno = ..

PL SQL 2016.07.06

PL/SQL 예외 처리 (Exception Handling) - 2 (미리 정의된 에러)

- 예외 유형 1) 미리 정의된 Oracle 에러 (암시적 발생) 미리 정의된 예외를 트래핑하기 위해서는 EXCEPTION 구문을 사용하고, ‘WH EN 예외 이름’을 활용하여 처리할 수 있다. 또한 다른 예외를 OR를 통해 묶어서 처리할 수 있다. 다음은 미리 정의된 예외 이름과 그 설명이다. 예외 이름 설명 CASE_NOT_FOUND CASE 문의 WHEN 절에서 어떤 것도 선택할 수 없으며 ELSE 절이 없습니다. COLLECTION_IS_NULL 초기화되지 않은 중첩 테이블 또는 VARRAY에 EXISTS가 아닌 컬렉션 메소드를 적용하려고 했습니다. CURSOR_ALREADY_OPEN 이미 열려 있는 커서를 열려고 했습니다. DUP_VAL_ON_INDEX 중복된 값을 삽입하려고 했습니다. INVA..

PL SQL 2016.07.06

PL/SQL 예외 처리 (Exception Handling) - 1 (예외 처리의 정의와 발생 상황, 유형)

[예외 처리 (Exception Handling)] - 예외 일반적으로 실행 도중에 발생하는 에러를 말한다. SQL에서는 에러가 발생했을 때 처리할 수 있는 방법이 없지만, PL/SQL에서는 예외 발생 시 이를 처리(Handling)할 수 있는 예외 처리(Exception Handling)를 지원한다. - 예외 발생 상황 예외는 다음과 같은 상황에서 발생할 수 있다. 1) Oracle 서버에서 암시적으로 발생 2) 프로그램에 의해 명시적으로 발생 - 예외 유형 1) 미리 정의된 Oracle 서버 (암시적 발생) 미리 정의된 예외를 트래핑하기 위해서는 EXCEPTION 구문을 사용하고, ‘WHEN 예외 이름’을 활용하여 처리할 수 있다. 또한 다른 예외를 OR를 통해 묶어서 처리할 수 있다. 2) 미리 정..

PL SQL 2016.07.06

PL/SQL 명시적 커서, 암시적 커서 (Implicit Cursor, Explicit Cursor) - 2

3) 명시적 커서 FOR LOOP 명시적 커서 FOR LOOP를 사용하면 FOR LOOP가 자동적으로 커서를 OPEN해주며, 행이 없을 때까지 FETCH해주고, CLOSE해준다. 또한 ROWTYPE에 해당하는 변수를 따로 DECLARE할 필요가 없다. 이는 암시적으로 선언되기 때문이다. 물론, 이 암시적 카운터는 FOR LOOP안에서만 사용할 수 있다. 그리고 이 커서의 데이터 타입(컬럼 데이터 타입의 집합)도 %ROWTYPE 앞으로 이용할 수 있다. 다음 예제는 명시적 커서를 FOR LOOP를 이용하여 구현한 예제이다. DECLARE CURSOR emp_cur IS SELECT * FROM emp WHERE deptno = 10 ; BEGIN FOR emp_rec IN emp_cur LOOP DBMS_..

PL SQL 2016.07.06

PL/SQL 명시적 커서, 암시적 커서 (Implicit Cursor, Explicit Cursor) - 1

[CURSOR] - 정의 SQL 커서는 Oracle 서버에서 할당한 전용 메모리 영역에 대한 포인터이다. 커서는 SELECT 문의 결과 집합을 처리하는데 사용된다. - 종류 1) 암시적 커서 Oracle 서버에서 SQL문을 처리하기 위해 내부적으로 생성하고 관리한다. SQL 커서 속성을 사용하면 SQL문의 결과를 테스트할 수 있다. 다음 표는 SQL 커서 속성을 나타낸 표이다. SQL 속성 설명 SQL%FOUND 가장 최근의 SQL문이 한 행 이상에 영향을 미친 경우 TRUE로 평가되는 부울 속성 SQL%NOTFOUND 가장 최근의 SQL문이 한 행에도 영향을 미치지 않은 경우 TRUE로 평가되는 부울 속성 SQL%ROWCOUNT 가장 최근의 SQL문에 의해 영향을 받은 행 수를 나타내는 정수 값 2) ..

PL SQL 2016.07.06