Замените предложение в ORACLE, используя REGEXP_REPLACE

Я хотел бы удалить все вхождения указанного ниже шаблона в моей строке.

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

Как мне создать для этого регулярное выражение?

По сути, мне не нужны какие-либо операторы SUPPLEMENTAL LOG GROUP. Это генерируется dbms_metadata.get_ddl.


person Prasanna Narayanan    schedule 06.03.2018    source источник


Ответы (2)


Вы можете использовать:

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

person Lukasz Szozda    schedule 06.03.2018

Вы также можете использовать DBMS_METADATA.SET_TRANSFORM_PARAM, чтобы установить CONSTRAINTS (который включает ДОПОЛНИТЕЛЬНУЮ ГРУППУ ЖУРНАЛА) в значение false перед запуском DBMS_METADATA.GET_DDL. Но проблема в том, что это также отключит отображение всех других ограничений таблицы, не являющихся ссылками. Я считаю, что Oracle должен был иметь SUPPLEMENTAL LOG GROUP в качестве отдельного параметра преобразования.

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 для дополнительных опций.

person Kaushik Nayak    schedule 06.03.2018
comment
Да, я не мог использовать это, потому что мне все еще нужны другие ограничения. - person Prasanna Narayanan; 07.03.2018