【问题标题】:Replace a sentence in ORACLE using REGEXP_REPLACE使用 REGEXP_REPLACE 替换 ORACLE 中的句子
【发布时间】:2018-08-14 14:46:27
【问题描述】:

我想在我的字符串中删除所有出现的以下模式。

SUPPLEMENTAL LOG GROUP "SAMPLESL" ("PIKEY") ALWAYS, 
SUPPLEMENTAL LOG GROUP "SAMPLE2" ("UIKEY") ALWAYS, 

如何为此创建正则表达式?

基本上,我不想要任何 SUPPLEMENTAL LOG GROUP 语句。这是由 dbms_metadata.get_ddl 生成的。

【问题讨论】:

    标签: sql oracle regexp-replace


    【解决方案1】:

    你可以使用:

    WITH cte(R) as (select 
    'CREATE TABLE TAB (X int)
    --- something
    SUPPLEMENTAL LOG GROUP "SAMPLESL" ("PIKEY") ALWAYS, 
    SUPPLEMENTAL LOG GROUP "SAMPLE2" ("UIKEY") ALWAYS, 
    --else
    '
      FROM DUAL
    )
    select R, regexp_replace(R, 'SUPPLEMENTAL LOG GROUP.*', '')
    from CTE;
    

    DBFiddle Demo

    【讨论】:

      【解决方案2】:

      在运行DBMS_METADATA.GET_DDL 之前,您还可以使用DBMS_METADATA.SET_TRANSFORM_PARAMCONSTRAINTS(包括补充日志组)设置为false。但问题是这也会禁用所有其他非引用表约束的显示。我觉得 Oracle 应该有 SUPPLEMENTAL LOG GROUP 作为一个单独的 Transform 参数

      EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,
      'CONSTRAINTS',
             FALSE);
      
      
      select DBMS_METADATA.GET_DDL('TABLE','YOURTABLE','YOURSCHEMA') ddl from dual;
      

      更多选项请参考SET_TRANSFORM_PARAM

      【讨论】:

      • 是的,我不能使用它,因为我还需要其他约束。
      猜你喜欢
      • 2015-03-12
      • 1970-01-01
      • 2018-08-03
      • 2021-01-14
      • 2021-12-29
      • 2012-09-25
      • 2017-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多