[ Oracle - PROCEDURE 개념 ]
☞ 개요 |
|
1. 정의 : Oracle에서 지원하는 프로그램 언어의 특성을 수용한 SQL의 확장` |
2. 처리 환경
![](https://t1.daumcdn.net/cfile/tistory/2378FF3C5882E85A19)
|
3. 처리절차 PL/SQL로 작성된 Block를 Oracle Server로 보내면 그 안에 있는 PL/SQL Engine이 SQL문과 Non-SQL문을 구별한다. Non-SQL문은 엔진내의 Procedural Statement Executor가 수행하고 SQL문은 SQL Statement Executor이 처리하게 된다. 즉, Non-SQL은 Client환경에서 처리되고 SQL문은 Server에서 수행됩니다. 따라서 PL/SQL을 사용하면 Server쪽으로 보내지는 작업의 양이 줄어들므로 Network Traffic을 감소시켜 Performance를 증가시키는 이점이 있다. |
☞ PL/SQL의 기본 BLOCK |
|
ㅇ 기본적인 PL/SQL 블럭 구조는 세 부분으로 구성됨
![](https://t1.daumcdn.net/cfile/tistory/256FB93C5882E85A20)
- 선언부 : 실행부에서 참조할 모든 변수, 상수 , Cursor, Exception을 선언 - 실행부 : 데이터베이스의 데이터를 처리할 SQL문과 블럭안의 데이터를 처리할 PL/SQL문을 기술
- 에러처리부 : 실행부에서 에러와 비정상적인 조건이 발생했을 때 수행될 문장을 기술
|
ㅇ Function의 구조 : 반드시 하나의 값을 돌려줘야 되는 경우
형식)CREATE [OR REPLACE] FUNCTION function명 [ (parameter1 parameter타입 parameter데이터타입 , parameter2, ...) ] RETURN 데이터타입 IS 변수선언 BEGIN RETURN(값 ); EXCEPTION END ; |
ㅇ Procedure의 구조
형식) CREATE [OR REPLACE] FUNCTION function명 [ (parameter1 parameter타입 parameter데이터타입 , parameter2, ...) ] RETURN 데이터타입 IS 변수선언 BEGIN RETURN(값 ); EXCEPTION END ; |
☞ Paramenter 타입 및 선언 방법 |
|
ㅇ 3가지 타입이 존재
![](https://t1.daumcdn.net/cfile/tistory/2512EA3C5882E85B08)
| |
☞ 2. 변수의 선언
|
|
(1) 변수 선언 방법 형식) Identifier명 [CONSTANT] 데이터타입 [NOT NULL] [:= 상수값이나 표현식] ; |
(2) Scalar 타입
데이터 타입 |
설 명 |
BINARY_INTEGER |
- 2147483647에서 2147483647사이의 정수 |
PLS_INTEGER |
- 2147483647에서 2147483647사이의 부호 표시 정수 - 저장 공간을 적게 사용하고 NUMBER나 BINARY_INTEGER보다 빠름 |
NUMBER[(p,s)] |
- 고정 및 부동 소숫점 수 |
CHAR[(n)] |
- 32767바이트까지의 고정길이 문자, n을 지정하지 않으면 1로 설정 |
LONG |
- 32767바이트까지의 가변길이 문자 |
VARCHAR2(n) |
- 32767바이트까지의 가변길이 문자 |
DATE |
- 날짜와 시각 |
BOOLEAN |
- 논리(TRUE, FALSE, NULL) | |
(3) Reference Type 변수 ㅇ %TYPE Attribute : 변수의 데이터타입을 데이터베이스 컬럼에 맞추어 선언 예제) DECLARE v_name s_emp.name%TYPE; v_salary s_emp.salary%TYPE; v_num NUMBER(5,2) ; v_total_num v_num%TYPE ;
ㅇ %ROWTYPE Attribute : Record를 선언할 때 컬럼명과 데이터 타입을 그대로 가져옴 형식) DECLARE dept_record s_dept%ROWTYPE;
|
(4) Composite Type 변수 ㅇ TABLE Type : C의 배열과 유사, 동적으로 커질 수 있음.
형식) DECLARE TYPE Type이름 IS TABLE OF scalar데이터타입 [NOT NULL] INDEX BY BINARY_INTEGER ; Identifier이름 Type이름;
예제 1) 사원의 이름을 저장하는 변수 선언 DECLARE TYPE name_table_type IS TABLE OF s_emp.name%TYPE INDEX BY BINARY_INTEGER; name_table name_table_type;
예제 2) 사원의 모든 정보를 저장 DECLARE TYPE emp_table_type IS TABLE OF s_emp%ROWTYPE INDEX BY BINARY_INTEGER; emp_table emp_table_type;
ㅇ RECORD Type : 구조체와 유사 예제1) DECLARE TYPE emp_record_type IS RECORD (id NUMBER(7), name VARACHAR2(25), start_date DATE NOT NULL := SYSDATE ); emp_record emp_record_type ; |
(5) 기타 변수 ㅇ LOB : 텍스트, 그래픽, 이미지, 비디오파일 ,사운드 등을 4GB까지 저장 ㅇ BiND 변수 : 호스트 환경에서 선언한 변수로서 Run Time 값을 하나 이상의 PL/SQL 프로그램과 주고 받는데 사용
SQL> VARIABLE a NUMBER SQL> PRINT a ㅇ HOST 변수 : 참조대상에 콜론(:)을 접두어로 붙여서 PL/SQL의 변수와 구분을 하여 사용
예제) VARIABLE b_avg NUMBER ACCEPT b_math PROMPT 'Input math value :' ACCEPT b_eng PROMPT 'Input english value :' DECLARE v_math NUMBER(9,2) := &b_math ; v_eng NUMBER(9,2) := &b_eng ; BEGIN :b_avg := (v_math + v_eng )/2 ; END; / PRINT b_avg |
|