2

私は最近、高くつく恥ずかしい過ちを犯してしまいました。あなたが私を助けてくれることを願っています...ここで何が起こったのですか。

PROD への展開では、手順の 1 つは、すべてのDEV.code_mappingテーブル行がテーブルに存在することを確認することPROD.code_mappingです。

これを行うために、次のクエリを実行しました (Oracle 11g)。PROD.code_mapping に存在しDEV.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 の null に対して評価できないためと思われますが、NVL([column],'null')これを機能させるステートメントの量はないようです。

どうすればこれを機能させることができますか???

また:

クエリの修正自体に加えて、このような取り組みのためにあなたが私に与えることができるベストプラクティスの指針を歓迎します. 私は本当に二度とそのようなライブをしたくありません。

4

2 に答える 2

3

個人的には、私はMINUS

SELECT *
  FROM code_mapping
 WHERE soure_system_id = '&LHDNUMBER'
MINUS
SELECT *
  FROM dm.code_mapping@prod_check

MINUSNULLは比較を自動的に処理します (NULLソースの a は、ターゲットの a と自動的に一致しますNULL)。

2 つのテーブル間のすべての相違点を一覧表示する場合(つまり、dev に存在するが prod と prod ではなく dev に存在しないすべての行を一覧表示する)、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)
于 2013-10-31T23:27:32.650 に答える