2012-05-15 42 views
2

我用下面的语句插入或更新当前文档版本客户签署:甲骨文合并声明有条件插入

 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的记录。

如何避免在下列情况下插入记录:版本为空?

分裂合并分开删除,更新和插入语句的唯一方法来做到这一点?

回答