C#,Delphi,Oracle,MSSQL 개발자블로그
[Oracle/PLSQL]4.함수 작성 본문
● 내장 함수
- 내장 함수는 매개변수를 사용하여 호출할 수 있는 명명된 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 문을 포함하는 함수로 재작성 할 수 있다.
'Programming > Oracle 공부' 카테고리의 다른 글
[Oracle/PLSQL]6.패키지 개념 추가 정보 (0) | 2017.06.23 |
---|---|
[Oracle/PLSQL]5.패키지 작성 (0) | 2017.06.07 |
[Oracle/PLSQL]3.프로시저 작성 (0) | 2017.06.07 |
[Oracle/PLSQL]1.PL/SQL 개요 (0) | 2017.06.07 |
[Oracle/기본]23. 예외 처리 (0) | 2017.05.31 |