OracleSQL 핵심정리11 - PL/SQL
PL/SQL
Procedural Language to SQL
- 데이터 조작과 프로그래밍 요소를 결합해 복잡한 데이터베이스 애플리케이션과 프로그램 단위를 생성
- 변수, 조건문, 반복문, 예외 처리 등을 지원해 효율적이고 안전한 데이터베이스 애플리케이션 작성
- 오라클 자체에 내장되어 있는 절차적 언어로서 SQL의 제한적인 단점을 보완
PL/SQL 구조
- 블록 구조의 언어로서
DECLARE SECTION(선언부)
,EXECUTABLE SECTION(실행부)
,EXCEPTION SECTION(예외처리부)로
나뉨 DECLARE(선언부)
: PL/SQL에서 사용하는 모든 변수나 상수를 선언하는 부분으로 DECLARE로 시작BEGIN(실행부)
: 절차적 언어의 요소인 제어문, 반복문, 함수 정의 등 로직을 기술할 수 있는 부분이며 BEGIN으로 시작EXCEPTION(예외처리부)
: PL/SQL문이 실행되는 중에 에러 즉, 예외사항이 발생했을때 이를 해결하기 위한 문장을 기술하는 부분이며 EXCEPTION으로 시작SERVEROUTPUT
: 오라클에서 제공해 주는 프로시저를 사용하여 출력해주는 내용을 화면에 보여주도록 설정하는 환경변수
변수 선언과 대입문
DECLARE - BEGIN - END;
구조로 구성- ex)
DECLARE 변수명 자료형; BEGIN 변수명 := 값; END;
- ex)
- 구성 요소 :
DECLARE identifier [CONSTANT] datatype [NOT NULL] [:= | DEFAULT expression]
identifier
- 데이터를 저장할 공간에 붙이는 이름CONSTANT
- 한 번 설정하면 변경할 수 없는 값datatype
- 변수에 저장될 데이터의 유형NOT NULL
- 값 반드시 포함expression
: Literal, 다른 변수, 연산자나 함수를 포함하는 표현식- 변수의 값을 지정하거나 재지정하기 위해서
:=
를 사용
- 변수의 값을 지정하거나 재지정하기 위해서
- 변수의 종류
스칼라 변수
: 자료형으로 NUMBER, VARCHAR2가 있음- ex)
DECLARE employee_name
VARCHAR2(50)
NOT NULL := '0kim';
- ex)
레퍼런스 변수
: 참조 자료형으로 컬럼명에%TYPE
을 붙여 선언. 행단위 참조는테이블명%ROWTYPE
으로 사용- ex)
DECLARE employee_salary
EMPLOYEES.SALARY%TYPE;
- ex)
- SELECT문
- 데이터베이스에서 값을 가져와 변수에 저장하려면 SELECT INTO문을 사용
1 2 3 4 5 6
DECLARE employee_name VARCHAR2(100); BEGIN SELECT first_name INTO employee_name FROM employees WHERE employee_id = 101; DBMS_OUTPUT.PUT_LINE('Employee Name: ' || employee_name); END;
DBMS_OUTPUT.PUT_LINE
: 화면에 출력하는 프로시저
선택문과 반복문
- 선택문
IF-THEN
: 조건이 참이면 실행IF-THEN-ELSE
: 조건이 참이면 실행, 거짓이면 ELSE문 실행IF-THEN-ELSIF-ELSE
: 여러 조건을 검사하여 참이면 실행, 거짓이면 ELSE문 실행1 2 3 4 5 6 7
IF [condtion] THEN [excution]; ELSIF [condtion] THEN [excution]; ELSE [excution]; END IF;
- 반복문 : BASIC LOOP, FOR LOOP, WHILE LOOP
BASIC LOOP
:LOOP 실행할 문장 EXIT WHEN 조건; END LOOP;
- 루프를 생성하며, EXIT 문을 사용해 루프를 종료
1 2 3 4
LOOP [excution]; EXIT WHEN [condtion]; END LOOP;
FOR LOOP
:FOR 변수 IN [REVERSE] 시작값..끝값 LOOP 실행할 문장 END LOOP;
- 지정된 범위만큼 반복 실행. REVERSE 키워드를 사용하면 역순으로 반복
1 2 3
FOR 변수 IN [REVERSE] [시작값..끝값] LOOP [excution]; END LOOP;
WHILE LOOP
:WHILE 조건 LOOP 실행할 문장 END LOOP;
- 주어진 조건이 참인 동안 문장을 반복 실행
1 2 3
WHILE [condtion] LOOP [excution]; END LOOP;
This post is licensed under CC BY 4.0 by the author.