[DAO-124] OracleRownumPagingSqlRewriterで同じカラム(エイリアス)をSELECTしている場合にSQLExceptionが発生する Created: 2007-10-29  Updated: 2007-11-14  Resolved: 2007-11-14

Status: Closed
Project: S2Dao
Component/s: s2dao
Affects Version/s: 1.0.46, 1.0.47-RC1
Fix Version/s: None

Type: Bug Priority: Minor
Reporter: azusa Assignee: manhole
Resolution: Won't Fix Votes: 0
Labels: None

Attachments: File ng.sql     File ok.sql     Text File standard.sql    

 Description   

OracleRownumPagingSqlRewriterを使用した場合、
SELECT * FROM~形式のSQLは
SELECT * FROM (SELECT ROWNUM AS S2DAO_ROWNUMBER, S2DAO_ORIGINAL_DATA.* FROM(SELECT * ~(オリジナルなSQL)) S2DAO_ORIGINAL_DATA) WHERE S2DAO_ROWNUMBER BETWEEN 1 AND 50 AND ROWNUM <= 50 ORDER BY S2DAO_ROWNUMBER

になりますが、これがSQLException(ORA-00918: column ambiguously defined )になるみたいです。

回避しようがないので制限項目でいいと思うのですが、ドキュメントのどこかに書く必要があるかも。



 Comments   
Comment by azusa [ 2007-10-30 ]

FAQに記述しました。
http://www.seasar.org/wiki/index.php?FAQ%2FS2DAO#s8b646b9

Comment by jundu [ 2007-10-29 ]

Oracle 10g XEで試しましたが、標準SQLの結合構文だとエラーが出ないようです。

ただし別の問題があって、サブクエリ内に同一カラム名がある場合に、メタデータ内のカラム名が自動的に変換されているようです。具体的には、QCSJ_C000000000500000, QCSJ_C000000000500001といった感じのカラム名になっていました。この影響で、どちらのカラムの値もBeanに反映されません。

以上のことを考えると、サブクエリ内に*を使うのは、よろしくないようです。ドキュメントでは、そのあたりも含めて必ずカラム指定をするべきであることを明記した方がよい様に思いました。あと、サンプルも直さないとですね。

Comment by jflute [ 2007-10-29 ]

自分は、同じカラムというより、
同じ名前の自テーブルの列と親テーブルの列でエイリアスを付け忘れてた
とかで、結構ありえるんじゃないかなと思います。
FAQかドキュメントに書いておくのに賛成です。

Comment by taedium [ 2007-10-29 ]

オリジナルのSQLで同じカラム(エイリアス)をSELECTしている場合ですよね。
あまりないケースだと思いますが、FAQかドキュメントに一言書いておけばいいと思います。

Generated at Mon Dec 15 11:21:27 JST 2025 using Jira 10.6.1#10060001-sha1:a6461e220f274b29ced7ac9295492f2465fe5ef5.