💡PL/SQL
PL/SQL의 정식 명칭은 Oracle's Procedural Language extension to SQL이다.
PL/SQL은 기존의 ANSI-SQL에 절차 지향 언어 기능을 추가한 것이다.
우리가 쓰는 SQL은 문장 단위의 실행만을 할 수 있었다. 하나의 INSERT와 UPDATE가 위아래에 있다면 우연히 코딩한 위치가 비슷할 뿐, 서로 독립적인 것이었다.
PL/SQL은 ANSI-SQL의 확장팩(변수, 제어 흐름(제어문), 객체(메서드) 정의)으로서, 이러한 SQL의 한계를 해소한다.
프로시저
프로시저(Procedure)는 메서드, 함수 등으로 구성된 순서가 있는 명령어의 집합이다.
모든 PL/SLQ 구문은 프로시저 내에서만 작성/동작이 가능하다. 이때 프로시저가 아닌 영역은 ANSI-SQL 영역이다.
1. 익명 프로시저
익명 프로시저는 일회용 코드를 작성할 때 사용한다.
2. 실명 프로시저
실명 프로시저는 데이터베이스 객체 형태로 저장하여 재호출 하기 위해 사용한다.
💡PL/SQL 프로시저 구조
- DECLARE
- BEGIN
- EXCEPTION
- END
PL/SQL 프로시저는 4개의 블럭(키워드)로 구성되어 있다.
이는 오라클에서 메소드를 만들 때 사용하는 구문이다.
DECLARE
- 선언부
프로시저 내에서 사용할 변수, 객체 등을 선언하는 영역이다.
만들 변수나 객체가 없을 경우 생략이 가능하다.
BEGIN ~ END
- 실행부 (구현부)
BEGIN과 END는 동시에 쓰인다.
구현된 코드를 가지는 영역(메서드의 body 영역)이다.
생략이 불가능하다.
구현된 코드는 주로 ANSI-SQL구문과 PL/SQL 구문(연산, 제어 등)을 섞어서 작성하게 된다.
EXCEPTION
- 예외처리부
예외가 없을 경우 생략이 가능하다.
catch절의 역할만을 하며, BEGIN~END가 try역할을 한다.
제어 흐름이 생기다보니 중간에 작업이 중단되어서 다른 구문에 영향을 줄 수 있기 때문에 try-catch문처럼 예외처리를 하는 기능이 있다.
Oracle 예외 처리에 대해서는 위 글을 참고하도록 한다.
💡PL/SQL 자료형
PL/SQL 자료형은 ANSI-SQL과 동일하다고 할 수 있을 정도로 비슷하다.
NUMBER, VARCHAR2, DATE 등을 사용한다.
ANSI-SQL의 자료형에 대해서는 위 글을 참고하도록 하자.
변수 선언
변수명 자료형 [not null] [default 값];
모든 PL/SQL 구문은 아무 곳에나 적어서 실행할 수 없다.
앞서 프로시저 내에서만 작성할 수 있다고 했다. 변수를 만들기 전에 프로시저를 만들어야 한다.
💡PL/SQL 연산자
PL/SQL 연산자는 ANSI-SQL과 거의 동일하지만, 대입 연산자에 차이가 있다.
대입 연산자
ANSI-SQL 대입 연산자
update table set column = '값';
PL/SQL 대입 연산자
변수 := '값';
PL/SQL 대입 연산자에는 앞에 콜론(:)이 붙는다.