PL/SQL은 선언부, 실행부, 예외 처리부 3개의 블록으로 나뉩니다.
PL/SQL에서는 스칼라 변수와 레퍼런스 변수를 사용합니다.
선택문으로는 IF ~ THEN ~ END IF, IF ~ THEN ~ ELSE ~ END IF, IF ~ THEN ~ ELSIF ~
ELSE-END IF 3가지를 제공합니다.
반복 처리를 위해서 BASIC ~ LOOP, FOR ~ LOOP, WHILE LOOP 문을 제공합니다.
PL/SQL에서 SQL 문의 결과로 얻어지는 로우가 여러 개일 경우 이를 처리하기 위해 커서를 사용합니다.
PL/SQL(Oracle's Procedural Language extension to SQL)은 오라클에서 지원하는 프로그래밍 언어의 특성을 수용하여 SQL에서는 사용할 수 없는 절차적 프로그래밍 기능을 가지고 있어 SQL의 단점을 보완합니다.
PL/SQL에서 지원되는 절차적 프로그래밍 기능은 다음과 같습니다.
1) 스칼라
2) 레퍼런스
레퍼런스 타입은 변수의 데이터 타입을 데이터베이스 기존 칼럼에 맞추어 선언하기 위해서 %TYPE Attribute를 이용합니다. 변수를 선언할 때 필요한 데이터 타입을 명시적으로 언급하는 대신 ‘TABLE이름.COLUMN이름%TYPE’으로 지정합니다.
%TYPE은 칼럼 단위로 데이터 타입을 참조합니다.
기본적으로 모든 문장들은 나열된 순서대로 순차적으로 수행됩니다.
하지만 경우에 따라서는 문장의 흐름을 변경할 필요가 있습니다. 이때 사용하는 것이 IF 문입니다.
IF 문은 조건을 제시해서 만족하느냐 하지 않느냐에 따라 문장을 선택적으로 수행하기 때문에 선택문이라고 합니다.
오라클에서는 3가지 형태의 선택문이 제공됩니다.
반복문은 SQL 문을 반복적으로 여러 번 실행하고자 할 때 사용합니다.
PL/SQL 에서는 다음과 같이 다양한 반복
실행 상의 흐름이 END LOOP에 도달할 때마다 그와 짝을 이루는 LOOP 문으로 제어가 되돌아갑니다.
이러한 루프를 무한 루프라 하며, 여기서 빠져나가려면 EXIT문을 사용합니다.
기본 LOOP는 LOOP에 들어갈 때 조건이 이미 일치했다 할지라도 적어도 한번은 문장이 실행됩니다.
FOR LOOP는 반복되는 횟수가 정해진 반목문을 처리하기에 용이합니다.
FOR LOOP 문에서 사용되는 인덱스는 정수로 자동 선언되므로 따로 선언할 필요가 없다.
FOR LOOP 문은 LOOP을 반복할 때마다 자동적으로 1씩 증가 또는 감소합니다. REVERSE는 1씩 감소함을 의미합니다.
제어 조건이 TRUE인 동안만 일련의 문장을 반복하기 위해 WHILE LOOP 문장을 사용합니다. 조건은 반복이 시작될 때 체크하게 되어 LOOP내의 문장이 한 번도 수행되지 않을 경우도 있습니다. LOOP을 시작할 때 조건이 FALSE이면 반복 문장을 탈출하게 됩니다.
커서가 끝에 위치하게 되면 반복문을 탈출해야 합니다.
단순 LOOP는 내부에 EXIT WHEN 문장을 포함하고 있다가 EXIT WHEN 다음에 기술한 조건에 만족하면 단순 LOO을 탈출하게 됩니다.
반복문을 탈출할 조건으로 “C1%NOTFOUND“를 기술하였습니다.
NOTFOUND는 커서의 상태를 알려주는 속성 중에 하나인데 커서 영역의 자료가 모두 FETCH됐다면 TRUE를 되돌립니다.
커서 C1영역의 자료가 모두 FETCH 되면 반복문을 탈출하게 됩니다.
CLOSE문장은 CURSOR를 사용할 수 없게 하고 결과 셋의 정의를 해제합니다.
SELECT 문장이 다 처리된 완성 후에는 CURSOR를 닫는다. 필요하다면 CURSOR를 다시 열수도 있습니다.