C#,Delphi,Oracle,MSSQL 개발자블로그

[Oracle/PLSQL]4.함수 작성 본문

Programming/Oracle 공부

[Oracle/PLSQL]4.함수 작성

19760323 2017. 6. 7. 14:49

● 내장 함수

 

- 내장 함수는 매개변수를 사용하여 호출할 수 있는 명명된 PL/SQL 블록이며, 일반적으로 값을 계산할 때 사용한다.

- 함수와 프로시저는 호출 환경으로 값을 반환해야 한다는 점을 제외하면 구조가 동일하다. (IN 매개변수모드 사용)

- 함수 헤더에는 RETURN 절이 있어야 하며, 실행 부분에는 RETURN 문이 하나이상 있어야 한다.

 

CREATE [OR REPLACE] FUNCTION function_name

(parameter1 [mode1] datatype1,

 parameter2 [mode2] datatype2,

...)

RETURN datatype

IS/AS

PL/SQL Block;

 

- RETURN 데이터 유형에는 크기 사양이 포함될 수 없다.

- 함수의 PL/SQL 블록에서는 호스트 변수 또는 바인드 변수를 참조할 수 없다.

 

Ex.

 

CREATE OR REPLACE FUNCTION get_sal
    (v_id IN emp.empno%TYPE)
    RETURN NUMBER
IS
    v_salary emp.sal%TYPE := 0;
BEGIN
    SELECT sal
      INTO v_salary
      FROM emp
     WHERE empno = v_id;
     RETURN (v_salary);
END get_sal;

 

● SQL 표현식에서 함수 호출 제한사항

 

- 사용자가 정의한 함수는 내장 함수여야 한다.

- 사용자가 정의한 함수는 GROUP BY 함수가 아닌 SINGLE-ROW 함수여야 한다.

- 사용자가 정의한 함수는 IN 매개변수 모드만 사용할 수 있다.

- 데이터 유형은 유효한 SQL데이터 유형인 CHAR, DATE, NUMBER 여야 한다.

- BOOLEAN, RECORD, TABLE과 ㅏㅌ은 PL/SQL 형식의 데이터 유형은 사용할 수 없다.

- 함수는 테이블에 변경을 가하는 INSERT, UPDATE, DELETE를 사용할 수 없다.

 

● 함수 제거

 

DROP FUNCION function_name

 

Ex.

 

DROP FUNCTION get_sal;

 

● 프로시저와 함수의 차이점

 

- 프로시저 : 값을 반환하지 않거나, 하나 이상의 값을 반환할 수 있다.

- 함수 : 값을 호출환경으로 반드시 반환해야 한다.

           이 때, 값을 하나만 반환해야 하므로 IN 매개변수 모드만 사용 가능하다.  

 

OUT 매개변수 하나만 포함하는 프로시저는 RETURN 문을 포함하는 함수로 재작성 할 수 있다.

 

 

Comments