[ Oracle - Procedure 문법_선언문(Declare) ]
1) 테이블의 열의 type으로 변수선언
%type은 열의 구조만 가져온다.
2) %rowtype : 해당 테이블의 모든 컬럼과 type으로 변수선언
테이블이나 뷰 내부의 컬럼 데이터형, 크기, 속석등을 그대로 사용할수 있습니다.
⊙ %ROWTYPE 앞에 오는 것은 데이터 베이스 테이블 이름입니다.
⊙ 지정된 테이블의 구조와 동일한 구조를 갖는 변수를 선언할수 있습니다.
⊙ 데이터베이스 컬럼들의 수나 DATATYPE을 알지 못할 때 편리 합니다.
⊙ 테이블의 데이터 컬럼의 DATATYPE이 변경될 경우 프로그램을 재수정할 필요가 없습니다
주의) not null 제한은 포함안됨.
예) 변수명 TABLE_NAME%ROWTYPE;
3) 배열선언
형식) TYPE 정의명 IS TABLE OF 타입 INDEX BY BINARY_INTEGER;
배열정 정의명;
예) TYPE t_val IS TABLE OF VARCHAR2(50) INDEX BY BINARY_INTEGER;
arr_val t_val;
사용예) arr_val(0) := '1234';
arr_val(100) := 'asdf';
괄호()를 안에 integer값(변수)를 사용해서 배열에 값을 넣거나 사용할 수 있다.
4) 변수 선언
declare
cnt number(4);
qty number(11,3);
errnum char(6):='-20999'; --> 초기 할당 방법
5) 모든 변수 TYPE 선언
BINARY_INTEGER
NUMBER [(전체자리수, 소수점이하자릿수)]
CHAR : 한문자
CHAR(n)
LONG
LONG RAW
VARCHAR2 (n) : 문자형중에서 가장 많이 사용
DATE
BOOLEAN : TRUE, FALSE
------------------------------------------------------------------------------
1. 테이블 변수의 type으로 변수 선언
문법 : v_f_apply_ymd ODM_SHIFT_WORK_DAILY.apply_ymd%TYPE := '';
설명 : - ODM_SHIFT_WORK_DAILY 은 테이블 명
- apply_ymd 은 ODM_SHIFT_WORK_DAILY 테이블의 컬럼 명
2. 배열 선언
문법 : TYPE arr_holiday_work_hour IS TABLE OF ODM_SHIFT_WORK_LIST.appl_holiday_work_hour%TYPE
INDEX BY BINARY_INTEGER;
holiday_work_hour_arr arr_holiday_work_hour;
설명 : - ODM_SHIFT_WORK_LIST : 테이블명
- appl_holiday_work_hour : ODM_SHIFT_WORK_LIST 테이블의 컬럼명
- arr_holiday_work_hour : 배열변수명
ODM_SHIFT_WORK_LIST.appl_holiday_work_hour 컬럼의 type으로 배열변수 정의
- 이유는 모르겠지만 위에서 생성된 배열변수를 다시 아래에서 재 정의 후 아래
holiday_work_hour_arr 를 source에서 사용 된다.
* 참고: source에서 사용법
문법 : holiday_work_hour_arr(숫자변수) := value;
3. error 처리 변수 선언
문법 : SQL_ERROR_RTN EXCEPTION;
설명 : 모름???
4. 테이블 컬럼 모두를 한번에 변수 정의
문법 : v_py py_payroll%ROWTYPE;
설명 : - 만약 py_payroll 테이블의 컬럼이 pay_ymd, pay_type, p001, p002, p003 이 존재 할 경우
- v_py.pay_ymd, v_py.pay_type, v_py.p001, v_py.p002, v_py.p003 변수를 모두 사용 할 수 있다.
- 보통 package정의 시 많이 사용 되며, package정의 시에 정의 되었을 경우
종속된 procedure에서는 package_name.v_py.컬럼명 과 같이 사용 된다.
'(DB) Oracle > PL.SQL' 카테고리의 다른 글
Oracle - Procedure 문법_IF문 (0) | 2017.01.21 |
---|---|
Oracle - Procedure 문법_FOR_LOOP문 (0) | 2017.01.21 |
Oracle - Procedure 문법_CASE문 (0) | 2017.01.21 |
Oracle - Procedure를 바로 실행하기 (0) | 2017.01.21 |
Oracle - PROCEDURE 개념 (0) | 2017.01.21 |