2017-03-08 1 views
0

오라클 전문가가 아닙니다. 나는 매우 이상한 문제에 직면했으나 이것이 왜 발생하는지 알지 못한다. 나는 다음과 같은 오류오라클 쿼리의 이상한 동작

ORA-00918: column ambiguously defined 
00918. 00000 - "column ambiguously defined" 

을 받고 그러나 내가 제거하면 0 행 만이 완벽하게 작동 내 쿼리에서 다음 50 개 행을 페 OFFSET있어이 쿼리를 실행 해요 때 내 쿼리는

SELECT hc.id, hc.owner_name, hc.national_id, hc.phone_no, hc.location, hc.status, hc.expiry_status, od.office_title AS issuer, hc.create_date, hc.email, hc.LATTITUDE, hc.LONGITUDE, hc.HASAD_NO, hc.NUMBERATION, hc.BREEDING_TYPE, hc.PROGENY, hc.office_id, hc.issuer_id, hc.expiry_status, hc.status FROM health_cards hc 
        LEFT JOIN office_details od ON od.office_id = hc.issuer_id AND od.lang = :lang 
        WHERE hc.id = :search_data_num OR hc.national_id = :search_data_num or hc.phone_no = :search_data_num OR hc.owner_name LIKE :search_data ORDER BY hc.create_date DESC, hc.id desc OFFSET 0 ROWS FETCH NEXT 50 ROWS ONLY 

입니다.

이 쿼리가 offset 문과 함께 작동하지 않는 이유를 알고 싶습니다.

+0

오라클 버전은 무엇입니까? – Aleksej

+0

테이블 구조를 추가 할 수 있습니까? –

답변

1

당신은 오라클 아마 비슷한 무언가를 열 hc.status.

`select 1 as "A" as "A" from dual` - execute OK; 

`select * from (select 1 as "A" 
        , 2 as "A" 
       from dual);` - ORA-00918: column ambiguously defined 

당신과 오프셋 경우

을 반복했다.

0

선택 목록에 hc.expiry_status 두 번 열이 있습니다.

문제는 선택 목록에서는 허용되지만 인라인보기에서는 허용되지 않는다는 것입니다. 행 제한 절을 추가하면 Oracle은 쿼리를 변환하고 변환은 인라인보기를 사용합니다. 고정 된 것으로 표시된 버그 13687511이 있습니다. 해결 방법은 두 번 선택하거나 별칭을 지정하지 않는 것입니다.