기본개념)

 - 자신을 호출한 곳으로 반드시 하나의 값을 리턴해 줘야되는 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;

+ Recent posts