【发布时间】:2019-08-12 19:19:00
【问题描述】:
我想对 oracle 数据库进行快速验证,以确保所有外键表列在大小和类型上与主键表同步。
SELECT
a.table_name,
a.column_name,
b.data_type,
b.data_length,
a.constraint_name
FROM ALL_CONS_COLUMNS A JOIN ALL_CONSTRAINTS C
ON A.CONSTRAINT_NAME = C.CONSTRAINT_NAME
JOIN all_tab_columns b ON a.owner = b.owner and a.table_name=b.table_name
and a.column_name=b.column_name
我想检索以下格式的所有列以进行验证...不确定如何使用外键表加入 all_constraint 表
更新:
我构建了以下查询,它适用于大多数情况
SELECT DISTINCT *
FROM
(SELECT a.table_name,
a.column_name,
b.data_type,
b.data_length,
c.r_constraint_name,
b.owner
FROM ALL_CONS_COLUMNS A
JOIN ALL_CONSTRAINTS C
ON A.CONSTRAINT_NAME = C.CONSTRAINT_NAME
JOIN all_tab_columns b
ON a.owner = b.owner
AND a.table_name =b.table_name
AND a.column_name =b.column_name
WHERE A.OWNER ='SCHEMA_NAME'
AND CONSTRAINT_TYPE = 'R'
) a
LEFT JOIN
(SELECT a.table_name AS fk_table_name,
a.column_name AS fk_column_name,
b.data_type AS fk_data_type,
b.data_length AS fk_data_length,
a.constraint_name AS fk_constraint_name,
b.owner AS fk_owner
FROM ALL_CONS_COLUMNS A
JOIN ALL_CONSTRAINTS C
ON A.CONSTRAINT_NAME = C.CONSTRAINT_NAME
JOIN all_tab_columns b
ON a.owner = b.owner
AND a.table_name =b.table_name
AND a.column_name =b.column_name
WHERE A.OWNER ='SCHEMA_NAME'
) b ON a.r_constraint_name=b.fk_constraint_name
WHERE b.fk_owner LIKE '%SCHEMA_NAME%'
AND b.fk_column_name IS NOT NULL
AND (a.data_type! =b.fk_data_type
OR a.data_length! =b.fk_data_length)
ORDER BY a.table_name,
a.column_name DESC;
【问题讨论】:
标签: sql oracle validation multiple-columns