【问题标题】: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_PARAM 将CONSTRAINTS(包括补充日志组)设置为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。