I have a text like following.
( ( tt.TRAN_TYPE IN
( SELECT RULE_VALUE FROM GP_RULE_VALUE WHERE RULE_ID=1332 )
AND tt.CONTRACT IN
( SELECT RULE_VALUE FROM GP_RULE_VALUE WHERE RULE_ID=1333 )
AND tt.CUSTOMER_STATE NOT IN
( SELECT RULE_VALUE FROM GP_RULE_VALUE WHERE RULE_ID=1334)
AND tt.COT_IND IN
( SELECT RULE_VALUE FROM GP_RULE_VALUE WHERE RULE_ID=1335 ))
OR ( tt.TRAN_TYPE IN
( SELECT RULE_VALUE FROM GP_RULE_VALUE WHERE RULE_ID=1336 )
AND tt.WHLSE_COT NOT IN
( SELECT RULE_VALUE FROM GP_RULE_VALUE WHERE RULE_ID=1337 )
AND tt.COT_IND IN
( SELECT RULE_VALUE FROM GP_RULE_VALUE WHERE RULE_ID=1338 )) )
I need to replace tt.* with condition tt.* IS NOT NULL and tt.*... as below.
(
( (tt.TRAN_TYPE IS NOT NULL AND tt.TRAN_TYPE IN ( SELECT RULE_VALUE FROM GP_RULE_VALUE WHERE RULE_ID=1332 ))
AND (tt.CONTRACT IS NOT NULL AND tt.CONTRACT IN ( SELECT RULE_VALUE FROM GP_RULE_VALUE WHERE RULE_ID=1333))
AND (tt.CUSTOMER_STATE IS NOT NULL AND tt.CUSTOMER_STATE NOT IN ( SELECT RULE_VALUE FROM GP_RULE_VALUE WHERE RULE_ID=1334))
AND (tt.COT_IND IS NOT NULL AND tt.COT_IND IN ( SELECT RULE_VALUE FROM GP_RULE_VALUE WHERE RULE_ID=1335)))
OR ( (tt.TRAN_TYPE IS NOT NULL AND tt.TRAN_TYPE IN ( SELECT RULE_VALUE FROM GP_RULE_VALUE WHERE RULE_ID=1336))
AND (tt.WHLSE_COT IS NOT NULL AND tt.WHLSE_COT NOT IN ( SELECT RULE_VALUE FROM GP_RULE_VALUE WHERE RULE_ID=1337))
AND (tt.COT_IND IS NOT NULL AND tt.COT_IND IN ( SELECT RULE_VALUE FROM GP_RULE_VALUE WHERE RULE_ID=1338)))
)
Please provide REGEXP_REPLACE or Any other trick if available in ORACLE.
NOTE : To me main challenge seems to be replace such a way that query order remains proper (i.e. opening and closing brackets placing properly)