대상 버전
6.1.1 이하 버전.
6.3.1 버전에서는 에러코드 및 메시지 변경됨.
증상
SELECT문 안에서 함수 사용 시 다음 에러가 발생합니다.
6.3.1 버전에서는 에러코드 및 메시지가 다음과 같이 변경되었습니다.
원인
다음과 같이 altierr 유틸리티를 이용하여 해당 에러에 대한 설명을 확인할 수 있습니다.
# 6.1.1 이하 버전
$ altierr 0x1105D
0x1105D ( 69725) smERR_ABORT_smiCantBeginUpdateStatement Unable to begin a new update statement.
# *Cause: Either the statement is read-only, or more than one update child statement has been requested.
# *Action: Please make sure that the request to begin a new update statement is valid.
# 6.3.1 버전
$ altierr 0x31386
0x31386 ( 201606) qpERR_ABORT_QSX_PSM_INSIDE_QUERY Cannot perform a DML, commit, or rollback inside a query.
# *Cause :
# - The program attempted to perform a DML, commit, or rollback inside a query.
# *Action :
# - Do not use a DML, commit, or rollback statement inside a query.
SELECT문 안에서 함수 사용 시 해당 함수는 SELECT문만 포함해야 합니다.
해당 함수에 INSERT/UPDATE 등이 포함되면 위 에러가 발생합니다.
해결 방안
SELECT문 안에서 사용하는 함수는 select문만 포함해야 합니다.
# insert문을 포함하는 함수를 SELECT문 안에서 사용했을 때 에러가 발생하는 예제
# 위 함수를 execute 구문을 사용하여 수행하는 예제
execute 구문에서는 성공적으로 수행됨.
# 위 함수를 SELECT문 안에서 사용하기 위해 insert문을 제거하고 SELECT문 안에서 사용했을 때 성공적으로 수행되는 예제
참고 사항