오늘 일하는 중 단순 조회에서 막혀버렸다.
'ORA-00913: 값의 수가 너무 많습니다'
원래 내가 알고있는게 맞다면 위의 오류는 INSERT 할때 입력값의 개수랑 입력받는 컬럼 개수가 다를 때 나는 쿼리인데
SELECT 할 때 나타나서 벙찌고 있었다.
사용한 쿼리는 아래와 같다.
SELECT B.CITY, APT, EQIP_NM, MEMO FROM APT_CD A, ( SELECT CITY, APT_CD, EQIP_CD, MEMO FROM EQIP WHERE CITY IN ('23','24','25','26') AND EQIP_CD NOT IN ( SELECT CITY, EQIP_CD FROM DSCHQTY WHERE CITY IN ('23','24','25','26') AND DTTM >= TO_DATE(20140205,'YYYYMMDD') GROUP BY CITY, EQIP_CD ) AND DEL='N' ) B WHERE A.CITY = B.CITY AND A.APT_CD(+) = B.APT_CD ORDER BY CITY, EQIP_CD;
▲ 이 쿼리는 실제 사용한 쿼리와 조금 다릅니다. 컬럼명이라던가 컬럼명이라던가 컬럼명이...
10분정도 뒤져봐도 뭐가 잘못됬는지 확인이 안되다가
차 한잔 마시고 진정하고 다시 확인해보니 어머! 서브쿼리가 문제네!?
해결한 쿼리는 아래와 같다.
SELECT
B.CITY,
APT,
EQIP_NM,
MEMO
FROM
APT_CD A,
(
SELECT
CITY,
APT_CD,
EQIP_CD,
MEMO
FROM
EQIP
WHERE CITY IN ('23','24','25','26')
AND EQIP_CD NOT IN
(
SELECT
EQIP_CD
FROM DSCHQTY
WHERE CITY IN ('23','24','25','26')
AND DTTM >= TO_DATE(20140205,'YYYYMMDD')
GROUP BY CITY, EQIP_CD
)
AND DEL='N'
) B
WHERE A.CITY = B.CITY
AND A.APT_CD(+) = B.APT_CD
ORDER BY CITY, EQIP_CD;
수정한 부분은 조건절의
AND EQIP_CD NOT IN ( SELECT CITY_ARCD, EQIP_CD FROM DSCHQTY WHERE CITY IN ('23','24','25','26') AND DTTM >= TO_DATE(20140205,'YYYYMMDD') GROUP BY CITY, EQIP_CD )
바로 이 부분.
조건을 비교하는건 EQIP_CD 하나인데, 서브쿼리에서 두개를 불러와서 생긴 오류였다.
진짜 간단한건데... 이런에데서 실수하니 그저 벙찔뿐....
이런 실수는 또 찾기도 어렵다 찐발...
'Oracle(오라클)' 카테고리의 다른 글
SQL Developer, ORA-01460: 요구된 변환은 실행될 수 없습니다 (0) | 2016.04.27 |
---|---|
정렬 순서가 자꾸 달라진다. ORDER BY, JOIN 문제로 추정... (0) | 2015.08.07 |
Too many open files 오류... 그리고 근본 원인은? (0) | 2015.07.29 |
예측 실행계획, 실제 실행계획 및 Trace 확인법 (0) | 2015.07.29 |
FK 비활성화 후 활성화 시 오류 발생 (0) | 2015.07.20 |