다음의 작업을 하는데 오류가 떠서 글을 올립니다.
1. 테이블 생성
create table id_tables (id varchar2(10) ,
value varchar2(9) )
2. function 생성
create or replace function fc_pk_val(i_id in varchar2 )
return varchar2 is
r_val varchar2(9) := '000000001';
begin
MERGE INTO id_tables A
USING DUAL
ON ( A.id = i_id )
WHEN MATCHED THEN
UPDATE SET
A.value = lpad(A.value+1 ,'9','0')
WHEN NOT MATCHED THEN
INSERT ( A.id,A.value) VALUES ( i_id,r_val ) ;
commit;
select value into r_val from id_tables where id = i_id;
return r_val;
end;
------- 컴파일상 이상없음
3.function 실행
select fc_pk_val('KWON') from dual;
--- 5번과 같은 결과가 나옴
4. 원하는 결과
id_tables 테이블 내용
id value
KOWN 000000001
5. 에러발생
ORA-14551: 질의 안에 DML 작업을 수행할 수 없습니다
ORA-06512: "FC_PK_VAL", 5행
6. 질문
- merge 부분에서 에러가 발생하는데.. 어떻게 고쳐야 할지 모르겠네요..ㅜㅜ
여러 고수님의 손길 부탁드립니다.
[질의 안에 DML 작업을 수행할 수 없습니다.]
라고 에러메시지가 아주 친절하게 설명해 주고 있네요.
함수 호출을 질의(Select) 하지 마시고 실행(Execute)하세요.
http://www.gurubee.net/lecture/1042
제 개인적인 생각으로는 함수와 프로시져를 다음과 같이 구별합니다.
함수는 조회용, 프로시져는 갱신용.
함수보다는 프로시져를 사용하는 것이 어떨까? 생각합니다.