最近,我犯了一个代价高昂且令人尴尬的错误,我很想知道它是否会再次发生。希望您能帮我...这是发生了什么事。
在PROD部署中,步骤之一是确保所有DEV.code_mapping
表行都存在于PROD.code_mapping
表中。
为此,我运行了以下查询(Oracle 11g)。我希望它显示DEV.code_mapping
出PROD.code_mapping中不存在的每一行。
select * FROM code_mapping D
where D.source_system_id = '&LHDNUMBER'
and not exists
(select 1 from
dm.code_mapping@PROD_CHECK P where
D.mapping_definition_id = P.mapping_definition_id and
D.cdm_code = P.cdm_code and
D.source_system_code = P.source_system_code);
查询返回零结果。
我错误地得出结论,其中的每一行都DEV.code_mapping
存在于中PROD.code_mapping
。
事实证明,实际上表中不存在任何行PROD.code_mapping
。查询以某种方式没有解决。我认为可能是因为此查询无法针对PROD中的空值求值,但是NVL([column],'null')
似乎没有任何语句可以使这项工作有效。
我该如何进行这项工作???
也:
除了查询更正本身之外,我也欢迎您为此类工作提供的最佳实践指导。我真的不想再次上演这样的演唱会。
就个人而言,我会使用 MINUS
SELECT *
FROM code_mapping
WHERE soure_system_id = '&LHDNUMBER'
MINUS
SELECT *
FROM dm.code_mapping@prod_check
MINUS
NULL
自动处理比较(NULL
源NULL
上的a自动匹配目标上的a )。
如果要列出两个表之间的所有差异(即列出dev中存在但prod中没有的所有行,而prod但prov中没有的行),则可以添加UNION ALL
(SELECT a.*, 'In dev but not prod' descriptio
FROM dev_table a
MINUS
SELECT a.*, 'In dev but not prod' description
FROM prod_table a)
UNION ALL
(SELECT a.*, 'In prod but not dev' descriptio
FROM prod_table a
MINUS
SELECT a.*, 'In prod but not dev' description
FROM dev_table a)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句