简体   繁体   English

REGEXP_REPLACE查询Oracle

[英]REGEXP_REPLACE query oracle

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。* IS NOT NULL和tt。* ...替换tt。*,如下所示。

( 
          ( (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. 请提供REGEXP_REPLACE或任何其他技巧(如果ORACLE中可用)。

NOTE : To me main challenge seems to be replace such a way that query order remains proper (ie opening and closing brackets placing properly) 注意:对我来说,主要的挑战似乎是以使查询顺序保持正确的方式进行替换(即,将右括号和右括号放置正确)

Try this. 尝试这个。

SELECT REGEXP_REPLACE (yourtext, 'tt\.(.+) ', 'tt.\1 IS NOT NULL AND tt.\1 ')
  FROM yourtable;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM