ORACLE SQL

저장 프로시저 & 함수

마이구미2 2021. 3. 4. 11:24

저장 프로시저(stored procedure)

특정 처리 작업을 수행하는 데 사용하는 저장 서브프로그램

 


파라미터를 사용하지 않는 프로시저

작업 수행에 별다른 입력 데이터가 필요하지 않은 경우 사용

-- 프로시저 생성
CREATE (OR REPLACE) PROCEDURE 프로시저명
[IS|AS]
    변수선언문;
BEGIN
	프로그램실행문;
EXCEPTION
    예외처리문;
END 프로시저명;
/


-- 결과 출력
SET SERVEROUTPUT ON;


-- 프로시저 실행
EXECUTE 프로시저명;


-- 프로시저 삭제
DROP PROCEDURE 프로시저명;

 


파라미터를 사용하는 프로시저

-- 파라미터 선언문
파라미터명 [IN|OUT|IN OUT(기본값: IN)] 데이터타입;

 

IN 모드 파라미터

프로시저 실행에 필요한 값을 직접 입력받는 형식의 파라미터 지정

-- 프로시저 생성
CREATE (OR REPLACE) PROCEDURE 프로시저명 (
    파라미터명1 IN 데이터타입,
    파라미터명2 IN 데이터타입)
[IS|AS]
    변수선언문;
BEGIN
	프로그램실행문;
EXCEPTION
    예외처리문;
END 프로시저명;
/


-- 프로시저 실행
-- 위치 지정
EXECUTE 프로시저명(파라미터_입력값1, 파라미터_입력값2);

-- 이름 지정
EXECUTE 프로시저명(파라미터명1 => 파라미터_입력값1, 파라미터명2 => 파라미터_입력값2);

 

OUT 모드 파라미터

프로시저 실행 후 호출한 프로그램으로 값 반환

-- 프로시저 생성
CREATE (OR REPLACE) PROCEDURE 프로시저명 (
    파라미터명1 OUT 데이터타입,
    파라미터명2 OUT 데이터타입)
[IS|AS]
    변수선언문;
BEGIN
	프로그램실행문;
EXCEPTION
    예외처리문;
END 프로시저명;
/

-- 반환값을 담을 변수 선언
VARIABLE 반환변수명1 데이터타입;
VARIABLE 반환변수명2 데이터타입;

-- 프로시저 실행
EXECUTE 프로시저명(:반환변수명1, :반환변수명2);

 


프로시저 오류 정보 확인

경고 : 컴파일 오류와 함께 프로시저가 생성되었습니다.

SHOW ERRORS;

SHOW ERR 프로그램종류 프로그램명;

 


함수(function)

-- 함수 생성
CREATE (OR REPLACE) PROCEDURE 프로시저명 (
    파라미터명1 IN 데이터타입,
    파라미터명2 IN 데이터타입)
RETURN 데이터타입
[IS|AS]
    변수선언문;
BEGIN
	프로그램실행문;
    RETURN (반환값);
EXCEPTION
    예외처리문;
END 함수명;
/

-- 반환값을 담을 변수 선언
VARIABLE 반환변수명 데이터타입;


-- 함수 실행
EXECUTE :반환변수명 := 함수명(파라미터명1, 파라미터명2);


-- SQL에서 함수 실행
SELECT 함수명(파라미터명, 파라미터명2)
FROM DUAL;


-- 함수 삭제
DROP FUNCTION 함수명;

 


프로시저와 함수 비교

특징 프로시저 함수
실행 EXECUTE 명령어 또는 다른 PL/SQL 서브프로그램 내에서 호출하여 실행 변수를 사용한 EXECUTE 명령어 또는
다른 PL/SQL 서브프로그램에서 호출하여 실행
혹은 SQL문에서 직접 실행
파라미터 지정 필요에 따라 지정하지 않을 수 있음
여러 개 지정 가능
IN, OUT, IN OUT 세 가지 모드 사용 가능
프로시저와 같게 지정하지 않을 수 있음
여러 개 지정 가능
IN 모드(또는 생략)만 사용
값의 반환 실행 후 값의 반환이 없을 수 있음
OUT, IN OUT 모드의 파라미터 수에 따라
여러 개 값 반환 가능
반드시 하나의 값을 반환해야함
프로시저와 달리 OUT, IN OUT 모드의 파라미터를 사용하는 것이 아니라 RETURN절과 RETURN문을 통해 값 반환

 

'ORACLE SQL' 카테고리의 다른 글

조건문 & 반복문  (0) 2021.03.04
PL/SQL & 변수  (0) 2021.03.04
객체  (0) 2021.03.03
제약조건  (0) 2021.03.03
ORACLE 사용자 관리  (0) 2021.03.02