1. Block

/* Block */
DECLARE
	[실행에 필요한 여러 요소 선언];
BEGIN
	[작업을 위해 실제 실행하는 명령어];
EXCEPTION
	[PL/SQL 수행 도중 발생하는 오류 처리];
END;
구성 키워드 설명
DECLARE - 실행에 사용될 변수, 상수, 커서 등을 선언한다.
- 필수값이 아니다.
BEGIN - 조건문, 반복문, SELECT, DML, 함수 등을 정의한다.
- 필수값이다.
EXCEPTION - PL/SQL 실행 도중 발생하는 오류를 해결하는 문장을 기술한다.
- 필수값이 아니다.

- PL/SQL은 데이터베이스 관련 특정 작업을 수행하는 명령어와 실행에 필요한 여러 요소를 정의하는 명령어 등으로 구성된다. 이러한 명령어를 모아 둔 PL/SQL 프로그램의 기본 단위를 Block이라고 한다.

- 선언부와 예외 처리부는 생략 가능하다.

- 필요에 따라 PL/SQL 블록 안에 다른 블록을 포함시키는 Nested block을 사용할 수도 있다.

- 블록을 구성하는 DECLARE, BEGIN, EXCEPTION 키워드에는 세미콜론(;)을 사용하지 않는다.

- 블록의 각 부분에서 실행해야 하는 문장 끝에는 세미콜론(;)을 사용한다.

- PL/SQL문 작성을 마치고 실행하기 위해 마지막에 슬래시(/)를 사용한다. 응용 프로그램에서는 슬래시를 사용하지 않고도 PL/SQL문을 실행할 수 있다.

 

1.1 출력

- PL/SQL 실행 결과를 화면에 출력하기 위해서는 SERVEROUTPUT 환경 변수 값을 ON으로 변경해야 한다.

- PUT_LINE은 화면 출력을 위해 오라클에서 기본으로 제공하며 DBMS_OUTPUT 패키지에 속해 있다.

/* 출력 예시 */
SET SERVEROUTPUT ON;
BEGIN
	DBMS_OUTPUT.PUT_LINE('Hello, PL/SQL!');
END;
/

 

1.2 주석

종류 사용 기호 설명
한 줄 주석 -- [주석 처리 내용] 현재 줄만 주석 처리된다.
여러 줄 주석 /*
[주석 처리 내용]
*/
/*에서 */까지 여러 줄에 걸쳐 주석 처리된다.

 

2. Variable

/* Variable */
[변수 이름] [자료형] := [값 또는 값이 도출되는 여러 표현식];
구분 설명
변수 이름 데이터를 저장할 변수 이름을 지정한다.
자료형 선언한 변수에 저장할 데이터의 자료형을 지정한다.
:= - 선언한 변수에 값을 할당하기 위해 사용한다.
- 값을 할당하지 않는다면 생략할 수 있다.
값 또는 값이 도출되는 여러 표현식 - 변수에 저장할 첫 데이터 값이나 저장할 수 있는 값이 결과로 반환되는 표현식을 지정한다.
- 변수에 지정한 자료형과 값이 맞아야 한다.
- 값을 할당하지 않는다면 생략할 수 있다.

- 데이터를 일시적으로 저장하는 요소로 이름과 저장할 자료형을 지정하여 선언부에서 작성한다.

- 선언부에서 작성한 변수는 실행부에서 활용한다.

/* Variable 예시 */
DECLARE
	V_EMPNO NUMBER(4) := 7788;
	V_ENAME VARCHAR2(20);
BEGIN
	V_ENAME := 'SCOTT';
	DBMS_OUTPUT.PUT_LINE('V_EMPNO : ' || V_EMPNO);
	DBMS_OUTPUT.PUT_LINE('V_ENAME : ' || V_ENAME);
END;
/

 

2.1 Constant

/* CONSTANT */
[변수 이름] CONSTANT [자료형] := [값 또는 값이 도출되는 여러 표현식];
구분 설명
변수 이름 데이터를 저장할 변수 이름을 지정한다.
CONSTANT 선언한 변수를 상수로 정의한다.
자료형 선언한 변수에 저장할 데이터의 자료형을 지정한다.
:= - 선언한 변수에 값을 할당하기 위해 사용한다.
- 값을 할당하지 않는다면 생략할 수 있다.
값 또는 값이 도출되는 여러 표현식 - 변수에 저장할 첫 데이터 값이나 저장할 수 있는 값이 결과로 반환되는 표현식을 지정한다.
- 변수에 지정한 자료형과 값이 맞아야 한다.
- 값을 할당하지 않는다면 생략할 수 있다.

- 저장한 값이 필요에 따라 변하는 변수와 달리 상수는 한 번 저장한 값이 프로그램이 종료될 때까지 유지되는 저장 요소이다.

/* CONSTANT 예시 */
DECLARE
	V_TAX CONSTANT NUMBER(1) := 3;
BEGIN
	DBMS_OUTPUT.PUT_LINE('V_TAX : ' || V_TAX);
END;
/

 

2.2 DEFAULT

/* DEFAULT */
[변수 이름] [자료형] DEFAULT [값 또는 값이 도출되는 여러 표현식];
구분 설명
변수 이름 데이터를 저장할 변수 이름을 지정한다.
자료형 선언한 변수에 저장할 데이터의 자료형을 지정한다.
DEFAULT 변수의 기본값을 명시한다.
값 또는 값이 도출되는 여러 표현식 - 변수에 저장할 첫 데이터 값이나 저장할 수 있는 값이 결과로 반환되는 표현식을 지정한다.
- 변수에 지정한 자료형과 값이 맞아야 한다.

- 변수에 저장할 기본값을 지정한다.

/* DEFAULT 예시 */
DECLARE
	V_DEPTNO NUMBER(2) DEFAULT 10;
BEGIN
	DBMS_OUTPUT.PUT_LINE('V_DEPTNO : ' || V_DEPTNO);
END;
/

 

2.3 NOT NULL

/* NOT NULL */
[변수 이름] [자료형] NOT NULL [:= 또는 DEFAULT] [값 또는 값이 도출되는 여러 표현식];
구분 설명
변수 이름 데이터를 저장할 변수 이름을 지정한다.
자료형 선언한 변수에 저장할 데이터의 자료형을 지정한다.
NOT NULL 변수에 NULL이 저장되지 못하도록 막는다.
:= 또는 DEFAULT 선언한 변수에 값을 할당하거나 기본값을 명시한다.
값 또는 값이 도출되는 여러 표현식 - 변수에 저장할 첫 데이터 값이나 저장할 수 있는 값이 결과로 반환되는 표현식을 지정한다.
- 변수에 지정한 자료형과 값이 맞아야 한다.
- NULL이 아닌 값을 할당해야 한다.

- PL/SQL에서 선언한 변수는 특정 값을 할당하지 않으면 NULL 값이 기본으로 할당된다.

- 특정 변수에 NULL이 저장되지 않기 위해 NOT NULL 키워드를 사용한다.

- NOT NULL 키워드를 사용한 변수는 반드시 선언과 동시에 특정 값을 지정해 줘야 한다.

/* NOT NULL 예시 : 값 할당 */
DECLARE
	V_DEPTNO NUMBER(2) NOT NULL := 10;
BEGIN
	DBMS_OUTPUT.PUT_LINE('V_DEPTNO : ' || V_DEPTNO);
END;
/

/* NOT NULL 예시 : 기본값 */
DECLARE
	V_DEPTNO NUMBER(2) NOT NULL DEFAULT 10;
BEGIN
	DBMS_OUTPUT.PUT_LINE('V_DEPTNO : ' || V_DEPTNO);
END;
/

 

2.4 변수 이름 규칙

- 변수를 포함한 PL/SQL문에서 지정하는 객체 이름을 식별자(identifier)라고 한다.

- 같은 블록 안에서 식별자는 고유해야 하며 중복될 수 없다.

- 대/소문자를 구별하지 않는다.

- 테이블 이름 붙이는 규칙과 같다.

① 문자로 시작한다.

② 30byte 이하여야 한다.

③ 영문자, 한글, 숫자(0-9), 특수문자($, #, _)를 사용할 수 있다.

④ SQL 키워드를 사용할 수 없다.

 

2.5 변수 자료형

종류 설명 및 예시
Scalar - 숫자, 문자열, 날짜 등과 같이 오라클에서 기본으로 정의해 놓은 자료형으로 내부 구성 요소가 없는 단일 값을 의미한다.
- NUMBER, CHAR, VARCHAR2, DATE, BOOLEAN 등
Reference - 오라클 데이터베이스에 존재하는 특정 테이블 열의 자료형이나 하나의 행 구조를 참조하는 자료형이다.
- 열을 참조할 때 %TYPE, 행 구조 전체를 참조할 때 %ROWTYPE을 사용한다.
Composite - 여러 종류 및 개수의 데이터를 저장하기 위해 사용자가 직접 정의하는 자료형이다.
- Collection, Record
LOB - Large Object를 의미한다.
- 대용량의 텍스트, 이미지, 동영상, 사운드 데이터 등 대용량 데이터를 저장하기 위한 자료형이다.
- BLOB, CLOB 등

 

2.5.1 %TYPE

/* %TYPE */
[변수 이름] 테이블이름.열이름%TYPE;
구분 설명
변수 이름 데이터가 저장될 변수의 이름을 지정한다.
테이블이름.열이름 - 특정 테이블에 속한 열의 이름을 명시한다.
- 명시된 테이블의 열과 같은 크기의 자료형이 지정된다.
%TYPE - 앞에서 지정한 테이블의 열과 같은 자료형 및 크기임을 명시한다.
- 이후 := 또는 DEFAULT 키워드를 사용하여 값을 먼저 지정해 줄 수도 있다.
/* %TYPE 예시 */
DECLARE
	V_DEPTNO DEPT.DEPTNO%TYPE := 50;
BEGIN
	DBMS_OUTPUT.PUT_LINE('V_DEPTNO : ' || V_DEPTNO);
END;
/

 

2.5.2 %ROWRTPE

/* %ROWTYPE */
[변수 이름] 테이블이름%ROWTYPE;
구분 설명
변수 이름 데이터가 저장될 변수의 이름을 지정한다.
테이블이름 - 특정 테이블을 지정한다.
- 명시된 테이블의 열과 같은 종류의 데이터를 가지게 된다.
%ROWTYPE %TYPE과는 달리 저장할 값을 직접 지정할 수 없다.
/* %ROWTYPE 예시 */
DECLARE
	V_DEPT_ROW DEPT%ROWTYPE;
BEGIN
	SELECT DEPTNO, DNAME, LOC INTO V_DEPT_ROW
	FROM DEPT
	WHERE DEPTNO = 40;
	DBMS_OUTPUT.PUT_LINE('DEPTNO : ' || V_DEPT_ROW.DEPTNO);
	DBMS_OUTPUT.PUT_LINE('DNAME : ' || V_DEPT_ROW.DNAME);
	DBMS_OUTPUT.PUT_LINE('LOC : ' || V_DEPT_ROW.LOC);
END;
/

 

참고

- 『오라클로 배우는 데이터베이스 입문』

'Database' 카테고리의 다른 글

Full Table Scan, Index Scan 차이점  (0) 2021.12.06
Privilege  (0) 2021.11.02
User  (0) 2021.11.02
Constraint  (0) 2021.11.01
Synonym  (0) 2021.10.28