이 문서의 내용은 출처가 분명하지 않습니다. 이 문서를 편집하여, 신뢰할 수 있는 출처를 표기해 주세요. 검증되지 않은 내용은 삭제될 수도 있습니다. 내용에 대한 의견은 토론 문서에서 나누어 주세요.(2010년 4월)
PL/SQL(피엘에스큐엘)은 상용 관계형 데이터베이스 시스템인 오라클 DBMS에서 SQL 언어를 확장하기 위해 사용하는 컴퓨터 프로그래밍 언어 중 하나이다. PL/SQL은 오라클 데이터베이스의 경우 버전 7부터, 타임스텐 인메모리 데이터베이스의 경우 버전 11.2.1부터, IBM DB2의 경우 버전 9.7부터 사용할 수 있다.[1]
특징
주로 자료 내부에서 SQL 명령문만으로 처리하기에는 복잡한 자료의 저장이나 프로시저와 트리거 등을 작성하는 데 쓰인다. PL/SQL의 구조는 에이다 프로그래밍 언어를 본떠 만들어졌다고 알려졌다. 따라서 두 언어는 그 구조가 범용 언어인 파스칼의 구문과 비슷하다. 범용 언어인 C와 C++ 그리고 파스칼 및 포트란 등의 프로그래밍 언어와는 다른 점으로 범용 언어들이 컴퓨터 시스템에서 특정한 작업을 처리하기 위해 만들어진 언어라고 볼 때 PL/SQL은 단지 오라클의 관계형 데이터베이스 (RDBMS)에서만 사용된다는 점이다.
PL/SQL 외에도 각 관계형 데이터베이스마다 확장 언어들이 있다. 이러한 확장 언어의 대표적인 예로 마이크로소프트의 마이크로소프트 SQL 서버와 SybaseASE에는 트랜잭트 SQL(Transact SQ; TSQL)이 있고 PostgreSQL에는 PL/pgSQL 마지막으로 IBM DB2는 ISO SQL의 SQL/PSM 표준을 따르는 SQL Procedural를 포함한다.
PL/SQL 프로그램 단위
PL/SQL 프로그램 단위는 다음 중 하나이다:
PL/SQL 익명 블록
함수
프로시저
패키지
패키지 사양
패키지 바디
트리거
자료형
PL/SQL의 주요 자료형은 NUMBER, CHAR, VARCHAR2, DATE, TIMESTAMP가 있다.
PL/SQL은 배열을 "컬렉션"(collection)으로 부른다. 이 언어는 세 가지 종류의 컬렉션을 제공한다:
연관 배열
내재된 테이블(nested table)
배열 (변수 크기의 배열)
커서
커서는 DML 문(INSERT, UPDATE, DELETE 또는 MERGE)이나 SELECT 문으로부터의 정보가 저장된 사유(private) SQL 영역의 포인터이자 매커니즘이다.
루프
LOOP 문
<<parent_loop>>LOOPstatements<<child_loop>>loopstatementsexitparent_loopwhen<condition>;-- Terminates both loopsexitwhen<condition>;-- Returns control to parent_loopendloopchild_loop;if<condition>thencontinue;-- continue to next iterationendif;exitwhen<condition>;ENDLOOPparent_loop;
declarevarnumber;begin/*N.B. for loop variables in pl/sql are new declarations, with scope only inside the loop */forvarin0..10loopdbms_output.put_line(var);endloop;if(varisnull)thendbms_output.put_line('var is null');elsedbms_output.put_line('var is not null');endif;end;