PL SQL 24

PL/SQL 프로시저 사용 시 주의 사항

- 주의 사항 1) DEFAULT 파라미터 사용 시 인수 전달에 주의해야 한다. CREATE OR REPLACE PROCEDURE INST_SALE (P_PRODID NUMBER, P_CUSTID NUMBER, P_TIMEID VARCHAR2 := TO_CHAR(SYSDATE,'YYYYMMDD'), P_CHNNID NUMBER := 3 , P_QTY NUMBER := 1 , P_AMT NUMBER) -- ERROR; , , 자체가 ERROR EXECUTE INST_SALE(100, 100, , , , 100); -- ERROR; 위치 지정 방식이라 P_AMT에 값이 들어가지 않음 EXECUTE INST_SALE(100, 100, 100); -- ERROR; EXECUTE INST_SALE(100, 100..

PL SQL 2016.07.07

PL/SQL 예외 처리 실습 - 사용자 정의 예외, RAISE_APPLICATION_ERROR

사용자 정의 예외 DECLARE e_invalid_department EXCEPTION; BEGIN RAISE e_invalid_department; EXCEPTION WHEN e_invalid_department THEN DBMS_OUTPUT.PUT_LINE('Born To Be Blue'); END; / RAISE_APPLICATION_ERROR 1) BEGIN RAISE_APPLICATION_ERROR(-20001, 'Born To Be Blue'); END; / 2) DECLARE e_invalid_born EXCEPTION; PRAGMA EXCEPTION_INIT (e_invalid_born, -20001); BEGIN RAISE_APPLICATION_ERROR(-20001, 'Born To B..

PL SQL 2016.07.07

PL/SQL 프로시저(Procedure) - 4 (파라미터 작성 방법, DEFAULT 옵션)

파라미터 작성 방법 (위치 지정, 이름 지정, 혼합)과 DEFAULT 옵션 위치 지정 방식은 실제 파라미터와 형식 파라미터와 동일한 순서로 나열하 는 방식이다. -- Passing parameters using the positional notation. EXECUTE add_dept ('TRAINING', 2500) 이름 지정 방식은 연관 연산자(=>)를 사용하여 이름 지정 형식 파라미터를 실제 파라미터와 연관 시키는 방법이다. -- Passing parameters using the named notation. EXECUTE add_dept (p_loc=>2400, p_name=>'EDUCATION') 혼합 지정 방식은 일부는 위치, 일부는 이름 지정 방식을 사용하는 것이다. 또한 프로시저의 DEFA..

PL SQL 2016.07.06

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