Reputation: 27
I'm trying to update multiple rows using CASE. The code below
UPDATE GRIDCOLUMNS
SET TYPE= CASE
WHEN (Fieldname = 'AccountNum' AND ID = 19337) THEN 6
WHEN (Fieldname = 'AccountNum' AND ID = 19339) THEN 6
WHEN (Fieldname = 'AccountNum' AND ID = 19380) THEN 6
WHEN (Fieldname = 'AccountNum' AND ID = 19419) THEN 6
END;
When I run it, I get the following error:
Error starting at line 1 in command:
UPDATE GRIDCOLUMNS
SET TYPE= CASE
WHEN (Fieldname = 'AccountNum' AND ID = 19337) THEN 6
WHEN (Fieldname = 'AccountNum' AND ID = 19339) THEN 6
WHEN (Fieldname = 'AccountNum' AND ID = 19380) THEN 6
WHEN (Fieldname = 'AccountNum' AND ID = 19419) THEN 6
END
Error report:
SQL Error: ORA-01407: cannot update ("WEB"."GRIDCOLUMNS"."TYPE") to NULL
01407. 00000 - "cannot update (%s) to NULL"
*Cause:
*Action:
What could be the problem?
Upvotes: 0
Views: 916
Reputation: 1269873
Don't use case
. Instead:
UPDATE GRIDCOLUMNS
SET TYPE = 6
WHERE Fieldname = 'AccountNum' AND ID IN (19337, 19339, 19380, 19419);
This is much more efficient. If you really need to use CASE
, then you need an ELSE
:
UPDATE GRIDCOLUMNS
SET TYPE = (CASE WHEN Fieldname = 'AccountNum' AND ID IN (19337, 19339, 19380, 19419) THEN 6
ELSE TYPE
END);
Otherwise, the non-matching rows get set to NULL
. But really, use the WHERE
.
Upvotes: 2