带有条件插入的Oracle Merge语句

时间:2012-05-15 11:51:57

标签: oracle

我使用以下语句来插入或更新客户签署的当前文档版本:

        MERGE INTO schema.table ccv
          USING (select :customer_id as customer_id, :doc_type as doc_type, :version as Version FROM DUAL) n
          ON (ccv.customer_id = n.customer_id and ccv.doc_type = n.doc_type)
        WHEN MATCHED 
        THEN UPDATE 
            set ccv.version = n.version
            DELETE WHERE ccv.version is null            
        WHEN NOT MATCHED 
        THEN INSERT 
            ( customer_id, doc_type, version)
        VALUES
            (:customer_id,:doc_type,:version)       

基本上我想避免在使用DELETE WHERE语句删除时插入相同的条件。

问题是,有三种不同的文档类型(doc_type),但只有一两个可以同时签名。

如果客户签署了文档,那么我想存储它的版本,如果没有,那么我不希望在数据库中记录该文档。

因此,当new:version为null时,我删除现有行。这很好用。 问题是,当没有该客户的文档存储时,oracle实际上插入了一个version = NULL的记录。

如何在以下情况下避免插入记录:version为null?

将合并拆分为单独的delete,update和insert语句是唯一的方法吗?

1 个答案:

答案 0 :(得分:2)

如果您使用10g,您也可以使用插入条件:

http://www.oracle-developer.net/display.php?id=310

RGDS。