- 표현식의 일부로 사용되는 함수
함수는 위에서 보았듯이 표현식의 일부로 사용된다. 즉, 프로시저와 같이 직접 EXECUTE할 수 없는 것이다. 이 이유는 함수는 값을 반환하기 때문이다. 반대로, 프로시저는 표현식의 일부(SELECT 프로시저와 같이)로 사용할 수 없다.
CREATE OR REPLACE FUNCTION get_sal( p_id employees.employee_id%TYPE) RETURN NUMBER IS v_sal employees.salary%TYPE := 0; BEGIN SELECT salary INTO v_sal FROM employees WHERE employee_id = p_id; RETURN v_sal; END get_sal; / -- Error : 'PLS-00221: 'GET_SAL' is not a procedure or is undefined' EXECUTE get_sal(100);
-- PL/SQL 프로시저가 성공적으로 완료되었습니다. -- 24000 EXECUTE dbms_output.put_line(get_sal(100)); |
- SQL 문장에서 함수 호출 시 제한 사항
1) 유저 정의 함수의 경우 데이터베이스에 저장해야 한다.
2) PL/SQL 고유 유형이 아닌 적합한 SQL 데이터 유형을 가진 IN 파라미터, RETURN 타입으로 사용해야 한다. (예를 들어 BOOLEAN은 불가능하다)
3) 함수를 소유하거나 EXECUTE 권한을 가지고 있어야 한다.
4) SELECT문에서 호출된 함수는 DML문을 포함할 수 없다.
5) 테이블 T의 UPDATE 또는 DELETE문에서 호출된 함수는 같은 테이블 T의 DML을 query하거나 포함할 수 없다. (SELECT와 SELECT는 가능하지만, 데이터 일관성이 보장되지 않는다(query와 query 빼고 다 에러)
6) SQL 문에서 호출된 함수는 트랜잭션을 종료할 수 없다. 즉, COMMIT 또는 ROLLBACK 작업을 실행할 수 없게 된다.
cf) 같은 테이블에 대한 접근을 SELECT 안에 다시 함수
'PL SQL' 카테고리의 다른 글
PL/SQL 패키지 (Package) - 2 (Spec, Body 생성 방법) (0) | 2016.07.07 |
---|---|
PL/SQL 패키지 (Package) - 1 (정의, 이점) (0) | 2016.07.07 |
PL/SQL 함수(Function) - 1 (함수 생성, 프로시서 함수의 차이, Syntax) (0) | 2016.07.07 |
PL/SQL 프로시저 사용 시 주의 사항 (0) | 2016.07.07 |
PL/SQL 예외 처리 실습 - 사용자 정의 예외, RAISE_APPLICATION_ERROR (0) | 2016.07.07 |