Function 사용도중 아래와 같은 에러를 만나게 되는경우가 있다.
ORA-14551: 질의 안에 DML 작업을 수행할 수 없습니다.
이메세지는 Function 문에서 DML(Insert, Update, Delete)문을 사용하지 못하는 경우에 발생하는 오류인데
이 오류를 제거하려면
DML을 처리하는 문법은 Procedure에서 값을 리턴하는 문법은 Function에서 각각 처리하도록 변경해준다.
Procedure
CREATE OR REPLACE PROCEDURE P_GET_FILEINFO(I_FILE_NAME IN VARCHAR2, O_MSG OUT VARCHAR2) BEGIN |
Function
CREATE OR REPLACE FUNCTION F_GET_FILEINFO( I_FILE_NAME in VARCHAR2) RETURN VARCHAR2 IS END F_GET_FILEINFO ; |
이렇게 처리해도 마찬가지로
ORA-14551: 질의 안에 DML 작업을 수행할 수 없습니다.
에러가 발생하는데, 이럴경우에는 트랜잭션을 Procedure / Function을 분리해 준다.
Procedure에 아래 문법을 추가해준다.
CREATE OR REPLACE PROCEDURE P_GET_FILEINFO(I_FILE_NAME IN VARCHAR2, O_MSG OUT VARCHAR2) /************************************************** BEGIN |
이상은 Oracle 10g에서 테스트 되었습니다.
참고
http://blog.naver.com/yooysj?Redirect=Log&logNo=120065898810
http://blog.naver.com/supernam?Redirect=Log&logNo=24012181
http://blog.naver.com/jjaemani?Redirect=Log&logNo=50001741324
[출처] 승제만세 By Chostar : http://manseya.blog.me/50081264080
[출처] AUTONOMOUS_TRANSACTION 처리|작성자 승제만세