Oracle,根据表名生成Where子句

时间:2016-10-03 07:55:11

标签: oracle plsql dynamic-sql

方案: 我将2个表名(例如员工和部门)传递给pl / sql程序。 我希望这个过程生成像displayNextImage()这样的WHERE子句,所以基本上这个过程必须找到关键关系。

我尝试使用all_constraints表来查找constraint_type =' P'或者' F'然后找到关联列,但在此表中没有关于约束中使用哪个列的信息。 有没有人知道我怎么能这样做(mayby以不同的方式)?

2 个答案:

答案 0 :(得分:1)

试试这段代码:

SELECT UC.OWNER
,      UC.CONSTRAINT_NAME
,      UCC1.TABLE_NAME||'.'||UCC1.COLUMN_NAME "CONSTRAINT_SOURCE"
,      'REFERENCES'
,      UCC2.TABLE_NAME||'.'||UCC2.COLUMN_NAME "REFERENCES_COLUMN"
FROM USER_CONSTRAINTS uc
,    USER_CONS_COLUMNS ucc1
,    USER_CONS_COLUMNS ucc2
WHERE UC.CONSTRAINT_NAME = UCC1.CONSTRAINT_NAME
  AND UC.R_CONSTRAINT_NAME = UCC2.CONSTRAINT_NAME
  AND UCC1.POSITION = UCC2.POSITION -- Correction for multiple column primary keys.
  AND UC.CONSTRAINT_TYPE = 'R'
ORDER BY UCC1.TABLE_NAME
,        UC.CONSTRAINT_NAME;

答案 1 :(得分:0)

使用自然加入怎么样?

如果两个表的列名一致,则Natural Join子句将连接每个公共列名称上的表。

例如,来自文档:

https://docs.oracle.com/javadb/10.8.3.0/ref/rrefsqljnaturaljoin.html

  

如果表COUNTRIES和CITIES有两个名为
的公共列   COUNTRY和COUNTRY_ISO_CODE,以下两个SELECT语句   当量:

SELECT * FROM COUNTRIES NATURAL JOIN CITIES

SELECT * FROM COUNTRIES JOIN CITIES
USING (COUNTRY, COUNTRY_ISO_CODE)