2012-05-15 71 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的記錄。

如何避免在下列情況下插入記錄:版本爲空?

分裂合併分開刪除,更新和插入語句的唯一方法來做到這一點?

回答