개요
질의문 수행 시 발생하는 ERR-1105D, ERR-31386 의 발생 원인과 조치 방법에 관해 설명한다.
버전
6.1.1 이하 버전에는 ERR-1105D 에러코드 및 메시지만 출력됩니다.
6.3.1, 6.5.1 버전과 7.1.0 이상 버전에서는 ERR-31386 에러코드 및 메시지(포멧라인)가 변경되었습니다.
현상
SELECT문 안에서 함수 사용 시 다음 에러가 발생합니다.
6.1.1 이하 버전
6.3.1, 6.5.1 버전
7.1.0 이상 버전
원인
다음과 같이 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문 안에서 사용했을 때 성공적으로 수행되는 예제