- 함수보다 진보된 함수( return이 없고 out parameter로 여러개의 값을 procedure밖으로 내보낼 수 있다 )
- 함수는 쿼리를 사용하지 않는 간단한 연산을 주로 하는 반면에, procedure는 연산과 함께 쿼리문 실행을 주로 수행한다.
- 쿼리문에 입력하여 간접실행을 할 수 없고, 실행기(execute)를 사용하여 직접 실행을 하거나, 프로그램 언어에서 호출하여 사용한다
- 작성된 procedure는 user_procedures에서 확인가능
작성법)
- 작성) create or replace procedure 프로시저명( 변수명 변수의종류(in, out) 데이터형..)
is — 변수선언
begin — 코드 작성
end;
/
2. 저장
파일명.sql
3. compile)
@파일명.sql
4. error확인) — 에러가 있을 때에만
show error
5. bind 변수를 선언 ( out parameter로 할당된다)
var 변수명 데이터형(크기)
6. procedure를 호출할때 out parameter에 bind 변수를 할당한다
(out parameter명과 bind 변수명은 아무런 관련이 없다 — out parameter명과 bind 변수명을 맞출 필요는 없다)
직접실행: 실행기 ( execute 또는 exec )
execute 프로시저명 ( 값… :변수명 )
7. 프로시저가 실행된 후 bind 변수에 저장된 값을 출력
print bind 변수명
Procedure에서 sys_refcursor의 사용
- 커서를 저장할 수 있는 데이터 형(refcursor)을 사용하여 bind 변수를 선언
var 커서명 refcursor
2. procedure에서 커서의 제어권을 반환할 수 있는 sys_refcursor를 out parameter에 선언
create or replace procedure 프로시저명( 변수명 out sys_refcursor )
is
begin
— system_refcursor 열기
open 커서명 for select 쿼리문….;
— 외부에서 출력하기 때문에 인출, 닫기를 하지 않는다
end;
3. 실행
exec 프로시저명( :커서명 );
4. 출력 : 커서가 실행되어 조회 결과가 출력된다
print 커서명
/
Package
- PL/SQL의 함수나 프로시저를 묶어서 저장, 관리, 사용하기 위한 객체
- user_procedure 패키지에서 생성된 패키지를 조회할 수 있다.
- package header와 package body 두개의 파일로 구분하여 만든다.
package header — 패키지에 들어갈 함수나 프로시저의 header만 정의하는 부분
package body — 패키지에 들어갈 함수나 프로시저의 코드를 구현하는 부분 패키지 header에 정의된 함수나 프로시저만 정의할 수 있다
- 컴파일하여 사용하고, 에러는 show error를 사용하여 확인한다
- 패키지로 묶여진 함수나 프로시저는 “패키지명.함수명()” 또는 “패키지명.프로시저명()”으로 실행한다
패키지 작성법
header : 패키지에 들어갈 함수, 프로시저의 목록을 정의하는 파일
작성법) create or replace package 패키지명 as
function 함수명(매개변수..) return 반환형;
.
.
procedure 프로시저명(매개변수,,);
.
.
end;
/
package body : package header에 선언된 함수와 프로시저를 그대로 구현해야한다
작성법)
create or replace package body 패키지명
is
function 함수명(매개변수…) return 반환형
is
begin
end 함수명;
;
.
.
procedure 프로시저명(매개변수…)
is
begin
end 프로시저명;
end;
/