簡體   English   中英

使用JDBC從Oracle獲取所有唯一索引的外鍵

[英]Get All Foreign Keys to Unique indexes from Oracle using JDBC

我有一個表,該表的外鍵指向另一個表中的“唯一”列。 我可以看到外鍵已正確定義,但是當我嘗試使用下面提到的使用JDBC的代碼來獲取它時,我看不到它。 我已驗證,當外鍵引用另一個表的主鍵時,此方法有效。

所以我的問題是“如何使用JDBC獲取Oracle中唯一索引列的外鍵?”

ResultSet rset = databaseMetaData.getImportedKeys(null, dbName, tableName);

while(rset.next()){
  String column_name = rset.getString("FKCOLUMN_NAME");
  String pk_table = rset.getString("PKTABLE_NAME");
  String pk_column = rset.getString("PKCOLUMN_NAME");
  String constraint_name = rset.getString("FK_NAME");

  System.out.println(column_name + " ==> " + pk_column + "(TBL:" + pk_table + ")(CN:" + constraint_name + ")");
}
rset.close();

其他信息 :有人建議使用getCrossReference但是這樣做的問題是,我需要事先知道引用約束的源表和目標表,而我不知道。 另外,我正在尋找一種不使用任何特殊Oracle模式或查詢的純jdbc api解決方案。 我的應用程序處理多個數據庫,但我嘗試將其隱藏在通用jdbc api層后面。

我建議您使用目錄視圖。 在Oracle目錄視圖中,您將找到描述Oracle數據庫的所有元數據:

http://www.oracle.com/pls/db92/db92.catalog_views

例如,要從某個表中獲取所有外鍵:

select * from all_constraints constraints where constraints.table_name = 'MY_TABLE' and constraints.constraint_type = 'R'

這里有一個更深,更好的答案:

甲骨文獲得外鍵

getCrossReference從JDBC DatabaseMetaData使用getCrossReference 使用null"%"作為parentTable參數將列出指定的foreignTable所有外鍵。

但是,在查看了getCrossReferenceOracle JDBC驅動程序API之后,似乎Oracle驅動程序並未指定將列出引用唯一鍵的外鍵。 我嘗試了一下,可悲的是,似乎沒有辦法僅使用純JDBC API來獲取所有外鍵的列表。 您只能獲取引用主鍵的外鍵列表

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM