2022년 4월 24일 일요일

ORA-00984: 열을 사용할 수 없습니다.(column not allowed here)에러 해결방법

프로그램이나 DB 툴로 실행했을때는 아무 문제 없이 문제되는 쿼리가 SAP PO와 연계했을 때 알수 없는 문제로 에러가 발생되는 경우가 있습니다. 이번에 발생되었던 오라클 에러인
'ORA-00984: 열을 사용할 수 없습니다.'는 PO에서 어떠한 원인으로 발생된건지 확인하고 어떻게 해결을 해야할지 담아보려고합니다.

이 에러에 대해 인터넷 검색을 해보면 대략 이런 원인이 나오네요.

  1. Insert 쿼리의 문자열에 싱글쿼테이션(')가 포함되었거나 안된경우
  2. 싱글쿼테이션 대신에 더블쿼데이션을 사용할 경우
  3. 내장 함수 등의 이름에 오타가 있는경우

1번 원인 같은경우 PO프로젝트나 운영을 하다보면 데이터문제로 종종 발생되었던 원인이고 PO에서 한개의 싱글쿼테이션을 ' -> '' 이렇게 변경하게되면 해결이 되었던적은 있습니다. 이부분은 아마 다른 언어로 개발된 프로그램에서도 마찬가지일것 같네요.

하지만 이 에러에 대한 원인은 위 3가지가 아닌 다른 원인으로 발생되었는데

현상은 문자와 숫자가 섞인 데이터였고 타겟DB컬럼 타입은 NVARCHAR2 였습니다.

 


왜 에러가 나는걸까요?

인터넷 검색을 하다가 'JDBC Receiver INSERT fails with Oracle NCHAR Datatype' 의 내용을 보고 해결방법에 대해 알게 되었는데
매핑에서 문제 타겟필드에 hasQuot="yes"를 해주면 된다고 하며 실제로 해보면 정상적으로 타겟DB에 인서트가 된것을 확인이 되었습니다.

만약 이렇게 해도 처리가 안되면 아래 노츠를 참고하시면 될것 같습니다.
1039779-JDBC Adapter issues(Escape character,Transaction handling)
해당 노츠를 보면 Apostrophes처리도 가능해보이는데요.

예전에 PO전문가이신 분이 JDBC Adapter에 대해 소스분석을 해주셨던 내용중에 hasQuot처리에 따라 조건별로 실행이 된다고 했던게 기억이 나는데요. 그중 hasQuot="yes" 조건일때는 checkForApostroph 메서드를 실행을 했던것 같네요. 하지만 이 처리에 대한 공식 SAP문서는 못찾았는데 이전 XI/PI 7.x 버젼때 매핑에서 보았던 히든메뉴처럼 어느순간에 사라질수도 있겠다는 생각도 듭니다.

모 아무튼 해결했으니 된거겠죠? 

댓글 없음:

댓글 쓰기