2017-01-10 7 views
0

私は次のような表を持っています。MERGE文のDELETE句

Name   Null   Type   
----------- --------  -------------- 
EMPLOYEEID **NOT NULL** NUMBER   
NAME   **NOT NULL** VARCHAR2(1000) 
AGE   *NOT NULL* NUMBER   
SALARY     NUMBER   
DELETEDFLAG    NUMBER(1) 

以下のようにレコードを挿入、更新、削除するMERGE文を記述しました。

MERGE INTO EMPLOYEE tgt USING (
SELECT(SELECT EMPLOYEE.rowId as rid from EMPLOYEE WHERE employeeid = 70) as rid from dual) src ON (tgt.rowid = src.rid) 
WHEN MATCHED THEN UPDATE SET name = 'PSS', age = 25, salary = 2589 
WHERE employeeid = 70 
DELETE WHERE DELETEDFLAG = 1 
WHEN NOT MATCHED THEN 
INSERT (employeeId, name, age, salary, deletedFlag) VALUES(70, 'TSS', 28, 15000, 0); 

私はレコードを削除中に問題に直面しています。名前、名前、給与のnull値を受け取り、deleteFlagがゼロのときにレコードを削除したいとします。私はemployeeIDだけ知っています。次のようなMERGEクエリ。

MERGE INTO EMPLOYEE tgt USING (
SELECT(SELECT EMPLOYEE.rowId as rid from EMPLOYEE WHERE employeeid = 70) as rid from dual) src ON (tgt.rowid = src.rid) 
WHEN MATCHED THEN UPDATE SET name = null, age = null, salary = null 
WHERE employeeid = 70 
DELETE WHERE DELETEDFLAG = 0 
WHEN NOT MATCHED THEN 
INSERT (employeeId, name, age, salary, deletedFlag) VALUES(70, null, null, null, 0); 

私が直面した問題は、このシナリオではレコードを更新しようとしていることです。名前はNULL可能な列ではありませんが、nullで更新しようとしています。 SQLエラーが発生しました。

は私が期待どおりに動作しないヌル値を渡すと

をNULLに(%s)を更新することはできません。

このシナリオをどのように処理すればよいですか?更新セクションで

答えて

0

変更predicatsこの

WHERE employeeid = 70 and DELETEDFLAG <> 0 

にDELETEDFLAGがNULLとなる可能性があるなら、私はあなたが述語

を変更する方法を知っていると仮定