ora-03001 fonctionnalité non implémentée lors de l'exécution de select en java
Question
J'ai essayé d'exécuter la requête de sélection suivante sur un oracle 11g à partir de Java (en utilisant un pilote léger) lorsque j'ai récupéré ce code d'erreur.ma question est pourquoi j'obtiens cette erreur ?je suppose que cela doit être un problème avec le pilote léger, mais je n'arrive pas à comprendre ce que cela pourrait être car il prend en charge les requêtes sélectionnées...s'il vous plaît, aidez-moi !
java.sql.SQLException: ora-03001 unimplemented feature
ou une version :
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
la requête était :
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))";
en utilisant PrepareStatement et ExecuteQuery :
PreparedStatement ps = c.getCon().prepareStatement(query);
ResultSet rs = ps.executeQuery();
J'ai exécuté cette requête dans SQL Developer et cela m'a donné ce résultat (tous les ascenseurs et leurs fichiers associés), qui est correct :
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 sélectionnez * dans les ascenseurs :
elevator id| adress | city | county | zip | manufacturer
1000 somestreet 12 Vienna Vienna 1200 OTIS
1001 somestreet 123 Vienna Vienna 1200 KONE
sélectionnez * dans les fichiers :
[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]
sélectionnez * dans 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
La solution
Il s'agit peut-être simplement d'un problème de copier-coller.Dans chaque requête que vous avez postée, il vous manque une virgule entre
f.file_name as \"Dateiname\" e.adress as \"Adresse\",
mais la modification ci-dessus ne le fait pas.
f.file_name as \"Dateiname\", e.adress as \"Adresse\",
Est-ce que ça peut être aussi simple ?;)
Autres conseils
Je suppose que la combinaison jointure/sous-sélection n'est pas standard.Je suggérerais quelque chose comme
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"
+ ")";
MODIFIER
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)";