使用 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;
您还可以使用 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了解更多选项。
我想删除字符串中出现的所有以下模式。
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;
您还可以使用 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了解更多选项。