프로그램이나 DB 툴로 실행했을때는 아무 문제 없이 문제되는 쿼리가 SAP PO와 연계했을 때 알수 없는 문제로 에러가 발생되는 경우가 있습니다. 이번에 발생되었던 오라클 에러인
'ORA-00984: 열을 사용할 수 없습니다.'는 PO에서 어떠한 원인으로 발생된건지 확인하고 어떻게 해결을 해야할지 담아보려고합니다.
이 에러에 대해 인터넷 검색을 해보면 대략 이런 원인이 나오네요.
- Insert 쿼리의 문자열에 싱글쿼테이션(')가 포함되었거나 안된경우
- 싱글쿼테이션 대신에 더블쿼데이션을 사용할 경우
- 내장 함수 등의 이름에 오타가 있는경우
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 버젼때 매핑에서 보았던 히든메뉴처럼 어느순간에 사라질수도 있겠다는 생각도 듭니다.
모 아무튼 해결했으니 된거겠죠?
댓글 없음:
댓글 쓰기