david's daily developer note

PL/SQL 1. Stored Procedure 기본 선언 및 실행. 본문

Develop (kids)

PL/SQL 1. Stored Procedure 기본 선언 및 실행.

mouse-david 2010. 6. 30. 16:25
728x90
PL/SQL 언어 중에서 가장 대표적인 구조인 Stored Procedure는 개발자가 자주 실행해야 하는 업무 흐름을 이 문법에 의해 미리 작성하여 데이터 베이스 내에 저장해 두었다가 필요할 때마다 호출하여 실행할 수 있다.

1. Insert 하는 Stored Procedure를 queryTimeMeasurement .sql에 작성한다.

SQL> vi queryTimeMeasurement .sql

Create or replace Procedure  queryTimeMeasurement IS
Begin 
  insert into test(id) values('hi');
end queryTimeMeasurement; 

2. SQL plus에서 queryTimeMeasurement .sql를 수행하여 Procedure를 생성한다.

SQL> @queryTimeMeasurement .sql

created procedure.....

SQL> execute queryTimeMeasurement

SQL> SELECT * FROM test;

여기서 커서란 개념을 알아야한다. 커서란  SQL  Plus에서  사용자가  실행한  SQL문의  단위를  의미한다.
오라클에서  수행한  모든  쿼리문은  커서  단위로  처리합니다. 

PL/SQL의  SQL문처럼  하나의  결과를  리턴하는  경우  커서  없이도  SQL문의  실행결과가  
암시적으로  커서에  저장되므로  이를  암시적  커서라고  합니다. 

SQL문을  수행한  후에  결과로  얻어지는  행이  여러  개일  경우에는  암시적인  커서에  정보를  
저장할  수  없기에  에러가  발생합니다.  이럴  경우에는  반드시  명시적인  커서를  사용해야  합니다. 

명시적인  커서는  PL/SQL의  레코드(RECORD)와  PL/SQL의  테이블(TABLE)을  결합한  것으로서 
프로그램  언어의  구조체  배열과  유사합니다. 

insert , update , delete 의 경우, 하나의 결과를 리턴받기 때문에 암시적  커서에 저장되지만 Select의 경우에는
다수의 행을 결과로 받기 때문에, 명시적인 커서를 사용해야 한다.
아래는 그예이다.

Create or replace Procedure  queryTimeMeasurement IS
type rc is ref cursor;
l_rc rc;
Begin 
  open l_rc for
  'SELECT * From test';
  close l_rc;
end queryTimeMeasurement; 

SELECT 결과를 받는 l_rc 라는 커서를 명시하였다.  
728x90