Table of Contents |
---|
대상 버전
6.1.1 이하 버전.
6.3.1 버전에서는 에러코드 및 메시지 변경됨.
...
SELECT문 안에서 함수 사용 시 다음 에러가 발생합니다.
Code Block |
---|
iSQL> select func1() from dual;
[ERR-1105D : Unable to begin a new update statement.
0004 : insert into T1 values(C1);
^ ^
]
|
...
6.3.1 버전에서는 에러코드 및 메시지가 다음과 같이 변경되었습니다.
Code Block |
---|
iSQL> select func1() from dual;
[ERR-31386 : Cannot perform a DML, commit, or rollback inside a query.
In FUNC1
0004 : insert into T1 values(C1);
^ ^
]
|
...
# insert문을 포함하는 함수를 SELECT문 안에서 사용했을 때 에러가 발생하는 예제
Code Block |
---|
iSQL> create or replace function func1() return varchar(10) as c1 varchar(10);
2 begin
3 select c1 into c1 from t1;
4 insert into t1 values(c1);
5 return c1;
6 end;
7 /
Create success.
iSQL> select func1() from dual;
[ERR-1105D : Unable to begin a new update statement.
0004 : insert into T1 values(C1);
^ ^
]
|
...
execute 구문에서는 성공적으로 수행됨.
Code Block |
---|
iSQL> select * from t1;
C1
--------------
abc
1 row selected.
iSQL> var c1 varchar(10);
iSQL> exec :c1 := func1();
Execute success.
iSQL> print var;
[ HOST VARIABLE ]
-------------------------------------------------------
NAME TYPE VALUE
-------------------------------------------------------
C1 VARCHAR(10) abc
iSQL> select * from t1;
C1
--------------
abc
abc
2 rows selected.
|
...
# 위 함수를 SELECT문 안에서 사용하기 위해 insert문을 제거하고 SELECT문 안에서 사용했을 때 성공적으로 수행되는 예제
Code Block |
---|
iSQL> create or replace function func1() return varchar(10) as c1 varchar(10);
2 begin
3 select c1 into c1 from t1;
4 return c1;
5 end;
6 /
Create success.
iSQL> select func1() from dual;
FUNC1
--------------
abc
1 row selected.
|
...