티스토리 뷰

데이터베이스/PLSQL

DML inside function

쌀맛나는세상 2008. 7. 15. 14:04
http://kr.forums.oracle.com/forums/thread.jspa?threadID=598160

스토어드 펑션(Stored Function)에서 DML 즉 트랜잭션 발생시 주의해야 할 부분이 있다.

스토어드 펑션의 특징상

SELECT s_fnc('') FROM DUAL;

와 같이 사용할수 있다.

하지만 다음과 같은 스토어드 펑션이 있다면


create or replace function ( p_param in varchar2 )
IS
begin
insert into aaa ( aaa ) values ( p_param);
return '';
end;
/


위의 SELECT 문의 경우 에러를 발생하게 된다.

SELECT -List 절에 스토어드 펑션을 사용할때는 DML작업이 들어가지 않게 해주어야 한다. 특히나 SELECT -List 절에 사용할 경우에는..

다만 다음과 같은 경우에는 사용 가능하나 DML작업이 들어가지 않을경우 이역시도 에러를 내뱉게 된다.

  1  create or replace function add_n(a NUMBER,b NUMBER) RETURN NUMBER IS
  2  PRAGMA AUTONOMOUS_TRANSACTION;
  3  BEGIn
  4  INSERT INTO ty values(a + b);
  5  COMMIT;
  6  RETURN (a+b);
  7* END;
SQL> /
 
Function created.
 
SQL> select add_n(10,20) from dual;
 
ADD_N(10,20)
------------
          30
 
SQL> select * from ty;
 
        A
---------
       30
 
SQL>

'데이터베이스 > PLSQL' 카테고리의 다른 글

IUD 패키지 샘플  (0) 2008.02.23
SINGLE ROW RETURN  (0) 2008.02.23