Discussions
Categories
- 196.8K All Categories
- 2.2K Data
- 235 Big Data Appliance
- 1.9K Data Science
- 449.9K Databases
- 221.6K General Database Discussions
- 3.8K Java and JavaScript in the Database
- 31 Multilingual Engine
- 549 MySQL Community Space
- 478 NoSQL Database
- 7.9K Oracle Database Express Edition (XE)
- 3K ORDS, SODA & JSON in the Database
- 532 SQLcl
- 4K SQL Developer Data Modeler
- 186.9K SQL & PL/SQL
- 21.3K SQL Developer
- 295.5K Development
- 17 Developer Projects
- 138 Programming Languages
- 292.2K Development Tools
- 104 DevOps
- 3.1K QA/Testing
- 645.9K Java
- 28 Java Learning Subscription
- 37K Database Connectivity
- 154 Java Community Process
- 105 Java 25
- 22.1K Java APIs
- 138.1K Java Development Tools
- 165.3K Java EE (Java Enterprise Edition)
- 17 Java Essentials
- 158 Java 8 Questions
- 85.9K Java Programming
- 79 Java Puzzle Ball
- 65.1K New To Java
- 1.7K Training / Learning / Certification
- 13.8K Java HotSpot Virtual Machine
- 94.2K Java SE
- 13.8K Java Security
- 203 Java User Groups
- 24 JavaScript - Nashorn
- Programs
- 402 LiveLabs
- 37 Workshops
- 10.2K Software
- 6.7K Berkeley DB Family
- 3.5K JHeadstart
- 5.6K Other Languages
- 2.3K Chinese
- 171 Deutsche Oracle Community
- 1.1K Español
- 1.9K Japanese
- 230 Portuguese
[BUG REPORT] JDBC Driver DatabaseMetaData.getCrossReference contract not respected

AlexandreGarnier
Member Posts: 1
Since JDK 6, DatabaseMetaData.getCrossReference contract is :
Retrieves a description of the foreign key columns in the given foreign key table that reference the primary key or the columns representing a unique constraint of the parent table (could be the same or a different table).
But the Oracle JDBC Driver executed query is :
SELECT NULL AS pktable_cat, p.owner as pktable_schem, p.table_name as pktable_name, pc.column_name as pkcolumn_name, NULL as fktable_cat, f.owner as fktable_schem, f.table_name as fktable_name, fc.column_name as fkcolumn_name, fc.position as key_seq, NULL as update_rule, decode (f.delete_rule, 'CASCADE', 0, 'SET NULL', 2, 1) as delete_rule, f.constraint_name as fk_name, p.constraint_name as pk_name, decode(f.deferrable, 'DEFERRABLE', 5, 'NOT DEFERRABLE', 7, 'DEFERRED', 6) deferrability FROM all_cons_columns pc, all_constraints p, all_cons_columns fc, all_constraints f WHERE 1 = 1 AND p.table_name = :1 AND f.table_name = :2 AND p.owner =AND f.owner = :4 AND f.constraint_type = 'R' AND p.owner = f.r_owner AND p.constraint_name = f.r_constraint_name AND p.constraint_type = 'P' AND pc.owner = p.owner AND pc.constraint_name = p.constraint_name AND pc.table_name = p.table_name AND fc.owner = f.owner AND fc.constraint_name = f.constraint_name AND fc.table_name = f.table_name AND fc.position = pc.position ORDER BY fktable_schem, fktable_name, key_seq ;
The right query to get foreign keys that reference a unique constraint is :
[...] AND p.constraint_type in ('P', 'U') [...]
Am I missing something ? Is there a workaround ?
This discussion has been closed.