Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何在Pl/SQL中编写正则表达式匹配模式?_Regex_Oracle_Plsql - Fatal编程技术网

Regex 如何在Pl/SQL中编写正则表达式匹配模式?

Regex 如何在Pl/SQL中编写正则表达式匹配模式?,regex,oracle,plsql,Regex,Oracle,Plsql,我已经在Oracle中编写了一个子字符串正则表达式。我对正确的模式匹配有问题。子字符串查询首先将触发器的ddl提取为字符串,然后尝试将表的列与之分离 触发DDL CREATE OR REPLACE TRIGGER "SHIVAMG"."DVJ_CI_CURRENCY_CD_L_IU" BEFORE INSERT OR UPDATE ON CI_CURRENCY_CD_L FOR EACH ROW BEGIN IF INSERTING THEN IF (UPPER(:NEW.C

我已经在Oracle中编写了一个子字符串正则表达式。我对正确的模式匹配有问题。子字符串查询首先将触发器的ddl提取为字符串,然后尝试将表的列与之分离

触发DDL

CREATE OR REPLACE TRIGGER "SHIVAMG"."DVJ_CI_CURRENCY_CD_L_IU"
  BEFORE INSERT OR UPDATE ON CI_CURRENCY_CD_L
  FOR EACH ROW
BEGIN
  IF INSERTING THEN
    IF (UPPER(:NEW.CURRENCY_CD) NOT LIKE 'ZZ%') THEN
      INSERT INTO JUNITUSR.CI_CURRENCY_CD_L
        (CURRENCY_CD,
         LANGUAGE_CD,
         DESCR,
         VERSION)
      SELECT :NEW.CURRENCY_CD,
             :NEW.LANGUAGE_CD,
             :NEW.DESCR,
             :NEW.VERSION
       FROM DUAL
       WHERE NOT EXISTS
         (SELECT 1
            FROM JUNITUSR.CI_CURRENCY_CD_L B
            WHERE B.CURRENCY_CD =:NEW.CURRENCY_CD AND
                  B.LANGUAGE_CD = :NEW.LANGUAGE_CD);
    END IF;
  END IF;

  IF UPDATING THEN
    IF (UPPER(:NEW.CURRENCY_CD) NOT LIKE 'ZZ%') THEN
      UPDATE JUNITUSR.CI_CURRENCY_CD_L A
        SET CURRENCY_CD     =:NEW.CURRENCY_CD,
            LANGUAGE_CD       =:NEW.LANGUAGE_CD,
            DESCR             =:NEW.DESCR ,
            VERSION           =:NEW.VERSION
        WHERE A.CURRENCY_CD = :OLD.CURRENCY_CD AND
              A.LANGUAGE_CD =:OLD.LANGUAGE_CD;
    END IF;
  END IF;
EXCEPTION
  WHEN OTHERS THEN
    RAISE_APPLICATION_ERROR(-20001,'ERROR: <DVJ_CI_CURRENCY_CD_L_IU> ' || SQLERRM);
END;

ALTER TRIGGER "SHIVAMG"."DVJ_CI_CURRENCY_CD_L_IU" ENABLE"   

我找到了正确的子字符串查询,以从触发器代码中收集各个列名。详情如下:

SELECT REGEXP_SUBSTR((SELECT REGEXP_SUBSTR((SELECT REGEXP_SUBSTR (( SELECT dbms_metadata.get_ddl( 'TRIGGER',trig_name,'CISADM') FROM dual),
'INSERT(\s|\n)+INTO[^\)]+\)',1,1,'n') FROM dual),'[\(](\s|\n|.)+[\)]')
 FROM DUAL),'(\w)+',1,counter)INTO temp_col_name FROM dual;

请编辑您的问题并包括:1)您期望的结果,以及2)您得到的结果。谢谢。问题不清楚。请详细说明
SELECT REGEXP_SUBSTR((SELECT REGEXP_SUBSTR((SELECT REGEXP_SUBSTR (( SELECT dbms_metadata.get_ddl( 'TRIGGER',trig_name,'CISADM') FROM dual),
'INSERT(\s|\n)+INTO[^\)]+\)',1,1,'n') FROM dual),'[\(](\s|\n|.)+[\)]')
 FROM DUAL),'(\w)+',1,counter)INTO temp_col_name FROM dual;