PL SQL

PL/SQL 함수(Function) - 2 (표현식의 일부로 사용되는 함수, SQL문장 함수 사용 제한 사항)

n.han 2016. 7. 7. 12:45

- 표현식의 일부로 사용되는 함수

 

함수는 위에서 보았듯이 표현식의 일부로 사용된다. , 프로시저와 같이 직접 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) 테이블 TUPDATE 또는 DELETE문에서 호출된 함수는 같은 테이블 T DML query하거나 포함할 수 없다. (SELECT SELECT는 가능하지만, 데이터 일관성이 보장되지 않는다(query query 빼고 다 에러)

6) SQL 문에서 호출된 함수는 트랜잭션을 종료할 수 없다. , COMMIT 또는 ROLLBACK 작업을 실행할 수 없게 된다.

  cf) 같은 테이블에 대한 접근을 SELECT 안에 다시 함수