컴퓨터 공부/Database

[Oracle] PL/SQL에 대해서 알아봅시다!

나정_ 2013. 8. 6. 11:06

PL/SQL이 무엇인가요??


오랜만에 블로그에 글을 쓰러온 것같네요. 

매번 쓰겠다고 마음은 먹고서는 여름휴가핑계로 이제야 쓰게 되었습니다.:) 











오늘 다룰 주제는 PL/SQL입니다. 


1. PL/SQL 정의



PL/SQL이란 Procedure language extention to Structured Query Language의 약자로 SQL을 확장한 순차적처리언어입니다. 


좀더 풀어서 설명하면 프로그래밍처럼 sql에서도 코딩이 가능하며, 기존엔 데이터를 delete한뒤 insert 한다라고 하면 쿼리를 delete 쿼리문 한번 , insert 쿼리문 한번 이렇게 나누어서 했던 것을 pl/sql로 한번에 처리가능하다는 것이지요  

 


아래 그림을 보시면 이해하기 쉬우실 것 같습니다.






[그림 1-1 SQL과 PL/SQL 차이]




이러한 PL/SQL은 DBMS 역할이 커지면서 SQL을 넘어 프로그래밍 언어가 처리할 수 있는 기능을 필요하게되어 Oracle 6부터 등장하게 되었습니다. 


그 이후 PL/SQL은 여러번 수행해야할 것을 한번에 수행하게 만들어주기 때문에 트렌젝션에 에러를 방지를 위해 쓰인다거나, 한번에 여러 데이터를 넣을 때 유용하게 쓰이고 있습니다. 특히 요즘 핫이슈인 빅데이터를 다룰 경우 유용하게 쓰이고 있어 그 중요성은 더 커지고 있는 듯합니다.  


2. PL/SQL 특징


PL/SQL은 앞서 말한 것과 같이 가장 큰 특징은 다수의 SQL문을 BLOCK으로 묶어 한번에 오라클 서버에 보내 수행속도를 향상시키는 것입니다. 


여기서 BLOCK이란 단어를 유의깊게 보셔합니다. 


모든 PL/SQL은 BLOCK구조로 이루어져 있습니다. 

PL/SQL 종류별로 미세하게 BLOCK 문법이 다르긴 합니다만 (PL/SQL 종류는 뒤에서 설명하도록 하겠습니다.) 이러한 블록들로 모듈화하기도 하고 큰 block 안에 소 block을 위치시킬수도 있습니다. 


또한, PL/SQL은 PL/SQL 내부에 프로그래밍적인 부분을 처리하는 엔진이 따로 존재합니다. 






[그림 1-2 PL/SQL 아키텍쳐]



그림과 같이 프로그램 문장은 PL/SQL엔진이 처리하고 SQL문장은 ORACLE 서버의 SQL Statement Executor이 처리합니다. 



3. PL/SQL 종류


PL/SQL 블록 유형은 Anonymous Block(익명블록), Procedure(프로시저), Function(함수) 이렇게 3가지로 나뉩니다.


먼저 Anonymous Block(익명블록)부터 확인해봅시다.


ㄱ. Anonymous Block(익명블록)




[그림 1-3 익명블록]


Anonymous Block은 말 그대로 이름없는 블록을 의미한다. 그렇기 때문에 블록을 실행 할때마다 매번 컴파일을 수행해야된다는 단점을 가지고 있습니다. 


ㄴ. Procedure (프로시저) 






[그림 1-4 프로시저]


프로시저는 특정한 처리를 수행하는 PL/SQL로 데이터베이스에 저장되어있는 객체입니다. 

이러한 이유로 내장 프로시저 (Stored Procedure) 로 줄여서 SP라고들 많이 부르는데 이러한 프로시저는 파라미터를 받아 특정 처리를 수행한다는 특징을 가지고 있습니다. 



ㄷ. Function(함수)







PL/SQL에서 함수라하면 사용자 정의함수 (User defined Function)을 의미합니다. 사용자 정의함수는 내장함수라고도 하는데 이는 프로시저와 같이 데이터 베이스에 저장된 객체이며 보통은 그냥 함수하고 부릅니다. sql함수 처럼 일정한 연산을 수행한뒤 값을 반환하는 것이 가장 큰 특징입니다. 


4. PL/SQL 내부 구조


PL/SQL 종류를 접하면서 CREATE OR REPLACE 는 뭐지? 선언부는 뭐지? 이러신 분들이 많았을 겁니다. 

이번에는 해당 내부 구조에 사용하는 변수나 문법들 위주로 설명을 하도록 하겠습니다. 


익명블록이든 프로시저든 함수든간에 모두 선언부 실행부, 예외처리부 를 가지고 있기 때문에 저는 프로시저를 기준으로 해당 구조를 설명해드릴까합니다. 


1. CREATE OR REPLACE PROCEDURE : 프로시저 명으로 데이터베이스 객체명을 생성하며 CREATE OR REPLACE 를 사용하여 기존에 작성된 함수를 수정할 경우 별도도 DROP시키지 않아도 되는 명령어 입니다. 


프로시저명을 입력하시고 나면 매개변수를 설정하는 부분이 있습니다. 

-IN : 읽기전용 파라미터입니다. IN은 기본 Default 값으로 앞에 아무것도 표시하지 않으면 IN파라미터라고 인식하시면 됩니다. 앞서 말한바와같이 읽기 전용이기 때문에 프로시저 혹은 함수와 같은 PL/SQL안에서 값 변경이 불가합니다. 

-OUT : 외부에서 값을 변경이 불가하며, 내부에서만 값이 설정가능합니다. 

-IN OUT :  읽고 쓰는 작업을 동시에 할 수 있습니다. 




 

예제 답은 어떻게 될까요 


답은 this is the in param out and THis is the in out return 입니다. 

앞에 말을 잘 이해하셨다면 쉽게 푸실 수 있는 문제입니다.


2. 선언부 : 실행부에서 사용할 변수나 상수 등을 선언하는 부분으로 DECLARE을 통하여 나타는 부분입니다. 

3. 실행부 ㅣ 실제 처리할 로직을 담당하며 BEGIN으로 시작되어 END로 끝나게 됩니다. 

4. 예외처리부 : 실행부에서 처리하던 중 발생할 수 있는 각종 오류에 대하여 처리하는 부분입니다. 


다음 강의에서는 


선언부에서 사용할 변수 선언 및 변수 종류

실행부 실제 프로그래밍 로직 내용 

예외처리 

예제 

백업 및 복구 부분에 대하여 정리하도록 하겠습니다.