ora-03001 Java で選択を実行すると機能が実装されていません
質問
そのエラーコードが返されたとき、JavaからOracle 11g(シンドライバーを使用)で次の選択クエリを実行しようとしました。私の質問は、なぜこのエラーが発生するのかということです。シンドライバーに問題があるはずだと思いますが、選択クエリをサポートしているため、何が原因なのかわかりません...助けてください!
java.sql.SQLException: ora-03001 unimplemented feature
oraのバージョン:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
"CORE 11.2.0.1.0 Production"
TNS for 64-bit Windows: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
クエリは次のとおりでした。
query = "select e.eq_nr as \"Eqiptmentnummer\", f.file_name as \"Dateiname\" e.adress as \"Adresse\","
+ " e.city as \"Ort\", e.county as \"Bundesland\", e.zip_code as \"PLZ\","
+ " e.manufacturer as \"Hersteller\" f.doc_info as \"DOC INFO\""
+ " from elevators e join files f on(e.eq_nr = (select eq_nr from file_links where file_id = f.file_id))";
プリペアドステートメントと実行クエリを使用します。
PreparedStatement ps = c.getCon().prepareStatement(query);
ResultSet rs = ps.executeQuery();
SQL Developer でこのクエリを実行したところ、次の出力 (すべてのエレベーターとその関連ファイル) が得られました。これは正しいです。
eq_nr | file_name | adress | city |county| zip |manufaturer| note
1000 testname1.pdf somestreet 12 Vienna Vienna 1200 OTIS test insert brown 1
1000 testname2.pdf somestreet 12 Vienna Vienna 1200 OTIS test insert brown 2
1000 testname4.pdf somestreet 12 Vienna Vienna 1200 OTIS test insert brown 4
1001 testname.pdf somestreet 123 Vienna Vienna 1200 KONE test insert brown
1001 testname3.pdf somestreet 123 Vienna Vienna 1200 KONE test insert brown 3
1001 testname5.pdf somestreet 123 Vienna Vienna 1200 KONE test insert brown5
1001 testname6.pdf somestreet 123 Vienna Vienna 1200 KONE test insert brown 6
asd select * エレベーターから:
elevator id| adress | city | county | zip | manufacturer
1000 somestreet 12 Vienna Vienna 1200 OTIS
1001 somestreet 123 Vienna Vienna 1200 KONE
ファイルから * を選択します:
[FILE_ID] [FILE_NAME] [FILE_PATH] [FILE_TYPE] [LAST_CHANGED] [ARCHIVE_FLAG][DOC_INFO]
77 [testname.pdf] [C:\testname.pdf] [pdf] 27.02.14 19:08:39,720000000 0 [test insert brown]
987 [testname1.pdf] [C:\testname1.pdf] [pdf] 27.02.14 19:08:55,195000000 0 [test insert brown 1]
76523 [testname2.pdf] [C:\testname2.pdf] [pdf] 27.02.14 19:09:09,735000000 0 [test insert brown 2]
123323 [testname3.pdf] [C:\testname3.pdf] [pdf] 27.02.14 19:09:35,912000000 0 [test insert brown 3]
1232 [testname4.pdf] [C:\testname4.pdf] [pdf] 27.02.14 19:09:49,219000000 0 [test insert brown 4]
8888212 [testname5.pdf] [C:\testname5.pdf] [pdf] 27.02.14 19:10:08,267000000 0 [test insert brown5 ]
5678 [testname6.pdf] [C:\testname6.pdf] [pdf] 27.02.14 19:10:22,213000000 0 [test insert brown 6]
select * from file_links:
eq_ nr file_id valid
1000 76523 0
1000 1232 0
1000 987 0
1001 5678 0
1001 8888212 0
1001 123323 0
1001 77 0
解決
単なるコピペの問題かもしれません。投稿したすべてのクエリで、間のカンマが欠落しています。
f.file_name as \"Dateiname\" e.adress as \"Adresse\",
しかし、上記の編集ではそうではありません。
f.file_name as \"Dateiname\", e.adress as \"Adresse\",
そんなに単純でいいのでしょうか?;)
他のヒント
結合と副選択の組み合わせは標準ではないと思います。私は次のようなことを提案します
query = "select e.eq_nr as \"Eqiptmentnummer\", f.file_name as \"Dateiname\" e.adress as \"Adresse\","
+ " e.city as \"Ort\", e.county as \"Bundesland\", e.zip_code as \"PLZ\","
+ " e.manufacturer as \"Hersteller\" f.doc_info as \"DOC INFO\""
+ " from elevators e"
+ " join files f on (e.eq_nr = f.eq_nr)"
+ " where e.eq_nr in ("
+ " select f.eq_nr"
+ " from files f"
+ " join file_links fl"
+ " where fl.file_id = f.file_id"
+ ")";
編集
query = "select e.eq_nr as \"Eqiptmentnummer\", f.file_name as \"Dateiname\", e.adress as \"Adresse\", e.city as \"Ort\", e.county as \"Bundesland\", e.zip_code as \"PLZ\", e.manufacturer as \"Hersteller\", f.doc_info as \"DOC INFO\""
+ " from elevators e"
+ " join file_links fl on (e.eq_id = fl.eq_id)"
+ " join files f on (f.file_id = fl.file_id)";
所属していません StackOverflow