У меня есть таблица, как следует.Предложение DELETE в заявлении MERGE
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);
У меня возникла проблема при удалении записи. Я хочу удалить записи, когда получаю нулевые значения для имени, имени и зарплаты, а 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. Так получилось SQL-ошибка.
не может обновить (% S) в NULL
Если я прохожу не нулевое значение, которое он работает, как ожидалось.
Может кто-нибудь, пожалуйста, сообщите, как я могу справиться с этим сценарием?