Chapter 6 PL SQL(Procedural Language/SQL)
PL/SQL(Procedural Language/SQL)은 최근의 프로그래밍 언어의 특성을 수용한, SQL의 확장이라 할 수 있다. SQL의 데이터 조작(DML)과 질의문(QUERY)을 블록 구조에 절차적 단위(IF, LOOP, FOR등)로 된 코드를 포함할 수 있으며 절차적 프로그래밍을 가능하게 한 강력한 TRANSACTION 처리 언어이다.
PL/SQL은 별개의 Oracle 제품이 아니라 Oracle 서버와 다른 Oracle TOOL에 이용되고 있는 프로그래밍 언어이다. PL/SQL 의 블록은 Oracle 서버나 툴에 내장되는 PL/SQL 엔진에 전달되어 처리된다. 사용하는 엔진은 PL/SQL 이 수행되는 곳에 따라 다르다.
Pro*프로그램, USER-EXIT, SQL*Plus, 또는 Server Manager에서 PL/SQL 블록을 사용하면 Oracle 서버의 PL/SQL 엔진이 처리한다. 그리고 블록에 있는 SQL을 별도의 문장으로 분리하여 SQL 문 실행기로 보낸다. 이는 응용 프로그램의 블록을 한 번에 Oracle 서버에게 보낸다는 뜻이며 따라서 client/server 환경하에서 많은 성능 향상을 기대할 수 있다.
PL/SQL의 장점
PL/SQL은 SQL로는 얻을 수 없는 절차적 언어의 기능을 가지고 있고 다음과 같은 장점을 가진다.
l 프로그램 개발의 모듈화 : 블록 내에서 논리적으로 관련된 문장들의 그룹화할 수 있다. 강력한 프로그램을 작성하기 위해 서브 블록들을 큰 블록에 포함할 수 있다. 복잡한 문제에 대한 프로그래밍이 적절히 나뉘어진 모듈들의 집합으로 구성된다.
l 식별자 선언 : 변수, 상수 등을 선언하고 SQL과 절차적인 프로그램에서 사용한다. 데이터베이스의 테이블과 Record를 기반으로 하는 dynamic한 변수 선언이 가능하다. 단일형 데이터 타입과 복합형 데이터 타입을 선언할 수 있다.
l 절차적 언어 구조로 된 프로그램 작성 : IF문은 조건에 따라 일련의 문장을 실행한다. LOOP문을 사용하여 일련의 문장을 반복적으로 실행한다. Explicit Cursor를 이용한 Multi-row 질의 처리한다.
l ERROR 처리 : Exception 처리 루틴을 이용하여 Oracle Server 에러를 처리한다. 사용자 정의 에러를 선언하고 Exception 처리 루틴으로 처리 가능하다.
l 성능 향상 : PL/SQL은 응용 프로그램의 성능을 향상 시킬 수 있다. PL/SQL은 여러 SQL문장을 BLOCK으로 묶고 한번에 BLOCK전부를 서버로 전송하기 때문에 통신량을 줄일 수 있다.
l PL/SQL의 처리 : PL/SQL로 작성된 Block을 Oracle Server로 보내면 그 안에 있는 PL/SQL Engine이 SQL문과 Non SQL문을 구분하여 Non SQL문은 PL/SQL Engine내의 Procedural statement executor가 수행하고 SQL문은 SQL statement executor가 처리하게 된다. 즉 Non SQL문은 Client환경에서 처리되고 SQL문은 서버에서 실행하게 된다. 따라서 PL/SQL을 사용하게 되면 서버 쪽으로 작업의 양을 줄이게 되므로 Network traffic를 감소시켜 Performance를 증가시키는 이점이 있다.
PL/SQL Block 구조
PL/SQL은 프로그램을 논리적인 블록으로 나누게 하는 구조화된 블록 언어이다. PL/SQL 블록은 선언부(선택적), 실행부(필수적), 예외 처리부(선택적)로 구성되고 BEGIN과 END는 키워드로 반드시 기술하여야 한다. PL/SQL 블록에서 사용하는 변수는 블록에 대해 논리적으로 선언할 수 있고 사용할 수 있다. 변수들과 그 외의 식별자를 참조하고 선언함으로써 PL/SQL 블록 내에서 값을 저장하고 변경할 수 있다.
● DECLARE (선언부) - 실행부에서 참조할 모든 변수,상수,CURSOR,EXCEPTION을 선언(선택) ● BEGIN(실행부) - 데이터베이스의 데이터를 처리할 SQL문과 PL/SQL 블록을 기술(필수) ● EXCEPTION(예외 처리부) - 실행부에서 에러가 발생했을 때 수행될 문장을 기술(선택) ● END; |
ü PL/SQL Block내에서는 한 문장이 종료할 때마다 세미콜론(;)을 기술한다.
ü END뒤에 세미콜론(;)을 사용하여 하나의 Block이 끝났다는 것을 명시한다.
ü PL/SQL Block의 작성은 편집기를 통해 파일로 작성할 수 있고 SQL*Plus에서 바로 작성할 수 있다.
ü SQL Buffer에서 PL/SQL을 실행하기 위해 “/”을 사용하며 성공적으로 실행 된다면 PL/SQL procedure successfully completed라는 Message가 출력된다.
PL/SQL 블록의 유형
PL/SQL의 모든 단위는 하나 또는 그 이상의 블록을 포함합니다. 이 블록은 다른 것으로부터 하나로 완전히 분리되어 중첩될 수 있습니다. 기본 단위(프로시저, 함수, 서브 프로그램, 익명의 블록)는 임의의 수의 중첩된 서브 블록을 포함할 수 있는 논리적인 블록으로 구성된다. 그러므로 하나의 블록은 다른 블록의 작은 부분이 되기도 하고 또는 코드 단위의 전체 중 일부가 될 수도 있습니다.
Anonymous Block(익명 블록)
이름이 없는 블록을 의미한다. 그것은 실행하기 위해 프로그램 안에서 선언되고 실행 시에 실행을 위해 PL/SQL 엔진으로 전달됩니다. 선행 컴파일러 프로그램과 SQL*Plus 또는 서버 관리자에서 익명의 블록을 내장할 수 있습니다.
Subprogram(procedure, function)
Subprogram은 매개변수를 사용할 수 있고 호출할 수 있는 PL/SQL BOLCK이다. Procedure 또는 Function로 선언될 수 있습니다. 일반적으로 어떤 작업을 수행하기 위해 Procedure을 사용하고 값을 계산하기 위해 Function을 사용합니다. 서버 또는 Application 수준에서 Subprogram을 저장할 수 있습니다.
Package
관련된 Procedure or Function을 묶어 이름을 붙인 PL/SQL모듈입니다.
Database Trigger
Database Table와 관련된 DML명령문에 의해 Trigger될 때 자동적으로 실행됩니다.
Application Trigger
PL/SQL 블록은 Application Event와 관련되고 자동적으로 실행됩니다.
'DataBase > Oracle' 카테고리의 다른 글
Chapter 6 PL SQL(Procedural Language/SQL) - 3 (0) | 2008.04.17 |
---|---|
Chapter 6 PL SQL(Procedural Language/SQL) - 2 (0) | 2008.04.17 |
PLT 5.8 SUBQUERY (0) | 2008.04.17 |
PLT 5.7 Join (0) | 2008.04.17 |
PLT 5.6 그룹 함수 (0) | 2008.04.17 |