【发布时间】:2019-09-24 15:34:47
【问题描述】:
我正在尝试从 Oracle 元数据表中获取表列表、列信息,包括数据类型。您可以看到下面的列列表。不知何故,我正在提取的主键和外键约束数据似乎正在为该表的所有列复制,而我预计约束表中未标记为主键或外键的列为 null。 我使用了左外连接,但由于连接条件,它似乎没有按预期工作。任何帮助将不胜感激。
SELECT AO.OWNER,
AO.OBJECT_NAME,
ATC.COLUMN_NAME,
ATC.DATA_TYPE,
ATC.NULLABLE,
AC.CONSTRAINT_NAME
FROM ALL_OBJECTS AO
JOIN
ALL_TAB_COLUMNS ATC
ON AO.OBJECT_NAME=ATC.TABLE_NAME
LEFT JOIN
ALL_CONS_COLUMNS ACC
ON
--ACC.column_name=ATC.column_name and
ACC.TABLE_NAME=ATC.TABLE_NAME
inner JOIN
ALL_CONSTRAINTS AC
ON
AC.TABLE_NAME=ACC.TABLE_NAME
AND
AC.CONSTRAINT_NAME=ACC.CONSTRAINT_NAME
--and atc.table_name=ac.table_name
WHERE AO.OBJECT_TYPE = 'TABLE'
AND AO.OWNER = 'XYZ'
AND AO.OBJECT_NAME='ABC'
AND CONSTRAINT_TYPE IN ('P','R')
ORDER BY AO.OBJECT_NAME, ATC.COLUMN_NAME
【问题讨论】:
-
您能否编辑您的问题,并包含您的查询产生的至少一些行的输出,足以让我们看到正在复制的内容。
-
您的联接在其条件中不包含
owner;您在多个模式中是否有相同的表/约束?还有为什么要注释掉列名条件? -
Alex,所有者 我觉得不重要,因为我在多个模式中没有相同的表/约束。此外,column_name 条件似乎只针对主键和外键返回列/表数据,几乎就像它是一个内连接(而它是一个左外连接),所以我尝试删除该条件以进一步检查
标签: oracle