使用 REGEXP_REPLACE 替换 ORACLE 中的一个句子

Replace a sentence in ORACLE using REGEXP_REPLACE

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

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

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

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

生成的

您可以使用:

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

您还可以使用 DBMS_METADATA.SET_TRANSFORM_PARAM 在 运行 DBMS_METADATA.GET_DDL 之前将 CONSTRAINTS(包括 SUPPLEMENTAL LOG GROUP)设置为 false。但问题是,这也会禁用所有其他 non-referential table 约束的显示。我觉得 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了解更多选项。