› Fóruns › SQL e PL/SQL › Dúvida Expressões Regulares – Replace (REGEXP_REPLACE) › Dúvida Expressões Regulares – Replace (REGEXP_REPLACE)
[quote=”burga”:h031jypv]Dá pra fazer assim:
with t as (select
'DROP TRIGGER TCU.TR_ACAO;
CREATE OR REPLACE TRIGGER TCU.TR_ACAO AFTER INSERT OR UPDATE OR DELETE
ON TCU.ACAO
FOR EACH ROW
DECLARE
V_ChangeType CHAR(1);
V_UsuarioAtualizacao CHAR(20);
V_OSUSER VARCHAR2(20);
V_MAQUINA VARCHAR2(65);
BEGIN
SELECT DISTINCT OSUSER, MACHINE INTO V_OSUSER, V_MAQUINA
FROM V$SESSION
WHERE AUDSID = USERENV(''SESSIONID'')
AND STATUS IN (''ACTIVE'',''INACTIVE'')
;
V_UsuarioAtualizacao:= USER;
IF PKG_AUDIT.COD_USUARIO IS NOT NULL THEN
V_UsuarioAtualizacao := PKG_AUDIT.COD_USUARIO;
END IF;
/* I=Insert, D=Delete, U=Update */
IF INSERTING THEN
V_ChangeType := ''I'';
ELSE
IF UPDATING THEN
V_ChangeType := ''U'';
ELSE
V_ChangeType := ''D'';
END IF;
END IF;
INSERT INTO AUDIT_TCU.ACAO
(
V_NUM_DIAS_PREVISTO
, V_DTHORA_INICIO
, V_DTHORA_TERMINO
, V_TIPO
, V_SE_DATA_ESTIMADA
, V_SE_HORA_ESTIMADA
, V_COD
, N_COD
, OPERACAO_EFETUADA
, DTHORA_ATUALIZACAO
, USUARIO_ATUALIZACAO
, OSUSER
, MAQUINA
, USUARIO_ORACLE
)' texto from dual)
select
regexp_replace(texto,'DROP([[:print:]|[:cntrl:]])INSERT INTO AUDIT_TCU.ACAO([[:print:]|[:cntrl:]])(')
from t;
Abraços,[/quote]
regexp_replace(texto,'DROP([[:print:]|[:cntrl:]])INSERT INTO AUDIT_TCU.ACAO([[:print:]|[:cntrl:]])(')
Burga,
Gostaria que explicasse o que significa o ([[:print:]|[:cntrl:]]) entre DROP e *.
E que depois você usou de novo.
Quando é replace por BLANK não é necessário então o terceiro parametro da função ? O default é ” ? Pois você usou apenas dois parametros, o texto e a expressão regular a ser substituida.
Valeu!