기본개념)
- 자신을 호출한 곳으로 반드시 하나의 값을 리턴해 줘야되는 PL/SQL Stored Program이다.
- 프로시저와 함수의 가장 큰 차이는 값을 리턴하느냐 마느냐
- 자신의 스키마 계정에 함수를 작성하려면 CREATE PROCEDURE 시스템 권한이 필요
- 다른 사용자 계정에 함수를 작성하려면 CREATE ANY PROCEDURE 시스템 권한이 필요
- 함수 Header에 리턴되는 데이터 타입을 기술해야 하며, Header의 끝에는 IS[AS]가 와야하고, IS[AS]와 BEGIN사이에 Begin~End에서 사용할 변수를 선언
기본 형식)
CREATE [OR REPLACE] FUNCTION function_name[parameters]
RETURN 리턴되는 데이터 타입
IS[AS]
선언부
BEGIN
실행부
EXCEPTION
예외처리
END;
예제)
CREATE OR REPLACE FUNCTION ojc2(p_empno IN NUMBER) // 외부에서 ojc2라는 함수를 호출하면서 파라메터를 넣어줘야 한다.
RETURN VARCHAR2 // 리턴되는 타입 가변길이 문자열 형태
IS
v_ename emp.ename%TYPE; // emp테이블의 ename컬럼과 타입을 같게해라. 동적타입
BEGIN
SELECT ename
INTO v_ename // 반드시 INTO절이 있어야 한다.
FROM emp
WHERE empno = p_empno;
RETURN v_ename;
END ojc2;
실행예시)
SELECT ojc2(7000) FROM DUAL; // SELECT문에는 반드시 테이블 명이 필요함 임시 테이블 사용
CREATE TABLE EMP_TEMP AS SELECT EMPNO, SAL, ENAME FROM EMP WHERE 1=2;
INSERT INTO EMP_TEMP VALUES(7788, 9999, ojc2(7788));
결과값)
EMPNO SAL ENAME
7788 9999 (7788의 문자열)
==================================================================================================
CREATE OR REPALCE FUNCTION "함수명"(
"파라미터" 데이터타입, ( EX : FUNC_V_NAME (IN) VARCHAR2 )
"파라미터" 데이터타입
)
RETURN 데이터타입( VARCHAR2 )INTO
"변수이름"( V_TEST_NAME ) 데이터타입( VARCHAR2(300) ) ;
BEGIN
V_TEST_NAME := 'HELLOWORLD'; ( =앞에 ':'가 들어간다. )
SELECT testName
INTO V_TEST_NAME
FROM TEST_TABLE
WHERE funcVname = FUNC_V_NAME;
RETURN V_TEST_NAME;
END;
사용예)
SELECT "함수명" FROM DUAL;