프로그램에서 오라클 쿼리문을 실행할 때 얘기치 못한 오류가 발생할 때가 있습니다.
아래 화면처럼 ORA-01789: query block has incorrect number of result columns (ORA-01789: 질의 블록은 부정확한 수의 결과 열을 가지고 있습니다) 오류 역시 가끔 보게 되는 오류 중에 하나 입니다.
이번 글에서는 오라클 ORA-01789: query block has incorrect number of result columns 오류의 발생 원인과 오류를 해결하는 방법에 대해 알아보겠습니다.
오라클의 ORA-01789 오류 발생 원인
아래의 오라클 쿼리문을 실행하면 ORA-01789: query block has incorrect number of result columns 오류가 발생하게 됩니다.
쿼리문을 보면 쉽게 오류 원인을 파악할 수 있습니다.
UNION을 사용했을 경우 서로 비교되는 컬럼의 수는 일치해야 합니다. 컬럼명은 달라도 상관이 없지만 서로 매칭되는 컬럼의 갯수는 일치해야 오류가 발생하지 않습니다.
예제 쿼리문에서 UNION 앞의 SELECT 컬럼이 6개인데 반해 UNION 아래의 SELECT 컬럼은 5개 입니다.
SELECT PayYM, PayGbn, Payment, Holiday, Gita1, 0 as YearMonth
FROM Pay
WHERE PayYM >= ‘202201’ AND PayYM <= ‘202212’ AND PersonCode = ‘123456’
UNION ALL
SELECT PayYM, PayGbn, Payment, Holiday, 0 as YearMonth
FROM PayTmp
WHERE PayYM >= ‘202201’ AND PayYM <= ‘202212’ AND PersonCode = ‘123456’
|
쿼리문이 복잡하고 많은 컬럼을 사용하다보면 가끔 이런식의 매칭 불일치가 생기곤 합니다. 그리고 쉽게 눈에 띄지 않는 경우도 많습니다.
오라클의 ORA-01789 오류 해결 방법
앞의 오류 쿼리문에서 Gita1의 위치에 있는 컬럼이 서로 일치하지 않았습니다.
아래 쿼리문처럼 Gita1의 컬럼을 추가하고 UNION 앞뒤 SELECT의 컬럼수를 일치시켜 주며 오류가 해결됩니다.
SELECT PayYM, PayGbn, Payment, Holiday, Gita1, 0 as YearMonth
FROM Pay
WHERE PayYM >= ‘202201’ AND PayYM <= ‘202212’ AND PersonCode = ‘123456’
UNION ALL
SELECT PayYM, PayGbn, Payment, Holiday, 0 as Gita1, 0 as YearMonth
FROM PayTmp
WHERE PayYM >= ‘202201’ AND PayYM <= ‘202212’ AND PersonCode = ‘123456’
|
※ 함께 읽으면 도움이 될 만한 다른 포스팅 글입니다.
- 오라클 ORA-00904: invalid identifier 오류 발생 원인 및 오류 해결 방법
- 오라클 ORA-01438: value larger than specified precision allowed for this column 오류 발생 원인과 해결 방법
- ‘형식 이니셜라이저에서 예외를 throw했습니다.’ 오류 해결 방법
- 비주얼스튜디오 디버깅 실행시 ContextSwitchDeadlock 예외 발생 해결 방법
- C# ‘제약 조건을 활성화하지 못했습니다.’ 오류 해결 방법
- MS SQL Server에서 테이블 간에 데이터를 복사하는 방법
이 글이 도움이 되었기를 바랍니다. ^-^