2017-03-08 5 views
0

私はオラクルの専門家ではありません。私は非常に奇妙な問題に直面しましたが、なぜこれが起こるのか分かりません。私は次のエラーOracleクエリーの奇妙な振る舞い

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

を得るが、私は削除する場合0 ROWS ONLYが、それは完璧に動作し、私のクエリから次の50行をフェッチOFFSET mは、このクエリを実行しているmをするとき 私のクエリは

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

どのOracleのバージョンですか? – Aleksej

+0

テーブル構造を追加できますか? –

答えて

1

あなたとオフセットは、Oracleは、おそらく似た何かをした場合あなたは、列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という列が2つあります。

問題は選択リストでは許可されていますが、インラインビューでは許可されないということです。行制限句を追加すると、Oracleは問合せを変換し、変換ではインライン・ビューが使用されます。 13687511というバグがあり、修正済みとマークされています。 一方、回避策は、2回選択しないか、列を別名にすることです。