Reputation: 302
Following is my query:
UPDATE DSOPI_PERSON_ADDR_RULE ADDR
SET ADDR.DEPT_NAME =
CASE
WHEN regexp_like (UPPER(addr.src_address_line1), 'DEP|DPT$|ABT|DIP.|DIPART|AFDEL|AVDEL|AVD.|DIV|PGRD|PGP|PPG')
AND ADDR.ORG_NAME IS NOT NULL
THEN ADDR.SRC_ADDRESS_LINE1
WHEN regexp_like (UPPER(addr.src_address_line2), 'DEP|DPT$|ABT|DIP.|DIPART|AFDEL|AVDEL|AVD.|DIV|PGRD|PGP|PPG')
AND ADDR.ORG_NAME IS NOT NULL
THEN ADDR.SRC_ADDRESS_LINE2
WHEN regexp_like (UPPER(addr.src_address_line3), 'DEP|DPT$|ABT|DIP.|DIPART|AFDEL|AVDEL|AVD.|DIV|PGRD|PGP|PPG')
AND ADDR.ORG_NAME IS NOT NULL
THEN ADDR.SRC_ADDRESS_LINE3
WHEN regexp_like (UPPER(addr.src_address_line4), 'DEP|DPT$|ABT|DIP.|DIPART|AFDEL|AVDEL|AVD.|DIV|PGRD|PGP|PPG')
AND ADDR.ORG_NAME IS NOT NULL
THEN ADDR.SRC_ADDRESS_LINE4
ELSE NULL
END;
What I would like to do is, when the case condition is true I would like to make the respective address lines NULL. Is there any way to achieve it with this code?
Upvotes: 2
Views: 471
Reputation: 17550
One option you have is to add additional CASE
statements for each address field:
The code is duplicated, but this allows you to set the address lines to null when the condition is met.
UPDATE DSOPI_PERSON_ADDR_RULE ADDR
SET ADDR.DEPT_NAME =
CASE
WHEN regexp_like (UPPER(addr.src_address_line1),
'DEP|DPT$|ABT|DIP.|DIPART|AFDEL|AVDEL|AVD.|DIV|PGRD|PGP|PPG')
AND ADDR.ORG_NAME IS NOT NULL
THEN ADDR.SRC_ADDRESS_LINE1
WHEN regexp_like (UPPER(addr.src_address_line2),
'DEP|DPT$|ABT|DIP.|DIPART|AFDEL|AVDEL|AVD.|DIV|PGRD|PGP|PPG')
AND ADDR.ORG_NAME IS NOT NULL
THEN ADDR.SRC_ADDRESS_LINE2
WHEN regexp_like (UPPER(addr.src_address_line3),
'DEP|DPT$|ABT|DIP.|DIPART|AFDEL|AVDEL|AVD.|DIV|PGRD|PGP|PPG')
AND ADDR.ORG_NAME IS NOT NULL
THEN ADDR.SRC_ADDRESS_LINE3
WHEN regexp_like (UPPER(addr.src_address_line4),
'DEP|DPT$|ABT|DIP.|DIPART|AFDEL|AVDEL|AVD.|DIV|PGRD|PGP|PPG')
AND ADDR.ORG_NAME IS NOT NULL
THEN ADDR.SRC_ADDRESS_LINE4
ELSE NULL
END
, ADDR.SRC_Address_Line1 =
CASE
WHEN regexp_like (UPPER(addr.src_address_line1),
'DEP|DPT$|ABT|DIP.|DIPART|AFDEL|AVDEL|AVD.|DIV|PGRD|PGP|PPG')
AND ADDR.ORG_NAME IS NOT NULL
THEN NULL
ELSE ADDR.SRC_Address_Line1
END
, ADDR.SRC_Address_Line2 =
CASE
WHEN regexp_like (UPPER(addr.src_address_line2),
'DEP|DPT$|ABT|DIP.|DIPART|AFDEL|AVDEL|AVD.|DIV|PGRD|PGP|PPG')
AND ADDR.ORG_NAME IS NOT NULL
THEN NULL
ELSE ADDR.SRC_Address_Line2
END
, ADDR.SRC_Address_Line3 =
CASE
WHEN regexp_like (UPPER(addr.src_address_line3),
'DEP|DPT$|ABT|DIP.|DIPART|AFDEL|AVDEL|AVD.|DIV|PGRD|PGP|PPG')
AND ADDR.ORG_NAME IS NOT NULL
THEN NULL
ELSE ADDR.SRC_Address_Line3
END
, ADDR.SRC_Address_Line4 =
CASE
WHEN regexp_like (UPPER(addr.src_address_line4),
'DEP|DPT$|ABT|DIP.|DIPART|AFDEL|AVDEL|AVD.|DIV|PGRD|PGP|PPG')
AND ADDR.ORG_NAME IS NOT NULL
THEN NULL
ELSE ADDR.SRC_Address_Line4
END;
Upvotes: 1
Reputation: 3402
So you would like to set src_address_line1 NULL if the first WHEN condition is true, and so on? In this case I'd do this:
UPDATE DSOPI_PERSON_ADDR_RULE ADDR
SET
addr.src_address_line1 =
CASE WHEN regexp_like (UPPER(addr.src_address_line1), 'DEP|DPT$|ABT|DIP.|DIPART|AFDEL|AVDEL|AVD.|DIV|PGRD|PGP|PPG')
AND ADDR.ORG_NAME IS NOT NULL
THEN NULL ELSE addr.src_address_line1 END,
addr.src_address_line2 =
CASE WHEN regexp_like (UPPER(addr.src_address_line2), 'DEP|DPT$|ABT|DIP.|DIPART|AFDEL|AVDEL|AVD.|DIV|PGRD|PGP|PPG')
AND ADDR.ORG_NAME IS NOT NULL
THEN NULL ELSE addr.src_address_line2 END,
addr.src_address_line3 =
CASE WHEN regexp_like (UPPER(addr.src_address_line3), 'DEP|DPT$|ABT|DIP.|DIPART|AFDEL|AVDEL|AVD.|DIV|PGRD|PGP|PPG')
AND ADDR.ORG_NAME IS NOT NULL
THEN NULL ELSE addr.src_address_line3 END,
addr.src_address_line4 =
CASE WHEN regexp_like (UPPER(addr.src_address_line4), 'DEP|DPT$|ABT|DIP.|DIPART|AFDEL|AVDEL|AVD.|DIV|PGRD|PGP|PPG')
AND ADDR.ORG_NAME IS NOT NULL
THEN NULL ELSE addr.src_address_line4 END;
Upvotes: 1