에러메시지
오라클 에러 "ORA-30926: 원본 테이블의 고정 행 집합을 가져올 수 없습니다. |
처음에는 오 이게 무슨말이지? 했지만,
찾고 나서는 바로 알아 차렸다! 한번 살펴보자.
원인
처음보는 에러라 당황스러워서 구글링 해보니 MERGE 문이 문제였다.
즉, MERGE 문에서 조인할 때 2건 이상이 있을 경우에 이런 에러가 발생한다.
생각해보니 USING 구문이 서브쿼리랑 비슷한다고 생각했다.
수정해야할 테이블의 데이터도 1건이여야 하고,
USING 문에서는 1건의 데이터만 나와야 한다. ( 그래서 보통 KEY값으로 ON에서 조회 )
MERGE INTO XXXXXXXXXX IVAL -- 작업스케줄기준 USING (SELECT :P01_COIL_NO AS COIL_NO ,:P02_COIL_T AS COIL_T ,:P03_TEST_SEQNO AS TEST_SEQNO ,:P04_SURFACE AS SURFACE FROM DUAL) GVAL ON (IVAL.COIL_NO = GVAL.COIL_NO AND IVAL.COIL_T = GVAL.COIL_T AND IVAL.TEST_SEQNO = GVAL.TEST_SEQNO ) |
이렇게 되면서 오류가 발생하였다. 데이터가 두개이다보니 MERGE문이 무엇을 수정해야 할 지 모르는 것.
COIL_NO | COIL_T | TEST_SEQNO | SURFACE |
A123456 | 20 | 1 | DATA1 |
A123456 | 30 | 2 | DATA2 |
< DUAL 조회 데이터 내역 >
해결방법
USING 에서 조회된 데이터를 1건이 검색되도록 변경해주면된다.
ON절에서 SURFACE 조건을 추가하여 해결하였다.
중점은 "KEY가 되는 것을 잘 선택하여 조회를 하자." 이다.
MERGE INTO XXXXXXXXXX IVAL -- 작업스케줄기준 USING (SELECT :P01_COIL_NO AS COIL_NO ,:P02_COIL_T AS COIL_T ,:P03_TEST_SEQNO AS TEST_SEQNO ,:P04_SURFACE AS SURFACE FROM DUAL) GVAL ON (IVAL.COIL_NO = GVAL.COIL_NO AND IVAL.COIL_T = GVAL.COIL_T AND IVAL.TEST_SEQNO = GVAL.TEST_SEQNO AND IVAL.SURFACE = GVAL.SURFACE) |
아래 표처럼 하나의 데이터가 나와야 됩니다.
COIL_NO | COIL_T | TEST_SEQNO | SURFACE |
A123456 | 20 | 1 | DATA1 |
'Good tips' 카테고리의 다른 글
인터넷으로 간단하게 가족관계증명서 출력하는 방법!!!! (0) | 2018.07.04 |
---|---|
[ORACLE] column ambiguously defined 원인은 무엇일까? (0) | 2018.04.27 |
[Excel] Unknown error 0x800A03EC 에러의 원인은 무엇일까? (0) | 2018.04.19 |
[ORACLE] ORA-38104: ON 절에서 참조되는 열은 갱신할 수 없음. 원인은 무엇일까? (2) | 2018.04.17 |
예비군 동원훈련연기 하는 방법(주요업무) - 주요업무수행확인서 양식포함 (0) | 2018.04.16 |