Como retirar do campo nome os caracteres ":", &quo

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
Eduardo Fernandes
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 25
Registrado em: Qua, 08 Dez 2010 10:36 pm
Localização: Rio de Janeiro

Pessoal, sou novo na linguagem PL/SQL comecei ainda agora, gostaria de uma ajuda para contruir uma Trigger de insert e update para "each row" em uma table chamada TC_CLIENTE.

Eu comecei a criar...

Selecionar tudo

 CREATE OR REPLACE TRIGGER limpa_nome

AFTER INSERT OR UPDATE ON TC_CLIENTE

FOR EACH ROW


Não sei se estou fazendo certo pois nunca criei uma Trigger, gostaria também de saber como posso limpar o nome, tirar os caracteres diferentes de letras, mas especificamente os caracteres ":", "+", e " ' ".

Agradeço a atenção!!!
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Em relação aos caracteres tu podes utilizar as funções translate ou replace, como tu achares melhor

ex:

Selecionar tudo

SELECT REPLACE(TRANSLATE('123$$$%%%%456&&&&8910', '$ % &',' '), ' ', '') FROM dual
UNION 
SELECT REPLACE(REPLACE(REPLACE('123$$$456%%%789&&&1011', '$', ''),'%',''),'&','') FROM dual
Em relação a trigger, monta ela aí, e o que tu tiver dúvida posta aqui.
Eduardo Fernandes
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 25
Registrado em: Qua, 08 Dez 2010 10:36 pm
Localização: Rio de Janeiro

Embora seja fácil, demorei um pouco para entender, mas aos poucos estou pegando...

Muito Obrigado pela ajuda!!!
Eduardo Fernandes
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 25
Registrado em: Qua, 08 Dez 2010 10:36 pm
Localização: Rio de Janeiro

ainda estou com dúvidas...

Selecionar tudo


CREATE OR REPLACE TRIGGER LIMPA_NOME
AFTER INSERT OR UPDATE ON tc_cliente
FOR EACH ROW
BEGIN
SELECT REAPLCE (TRANSLATE('nome', ':', '+', '*')) from dual
END;

quero saber como referenciar o campo da tabela nome..
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Cara...

detro da trigger tu tem a possibilidade de utilizar :new e :old para referenciar as colunas da tabela sobre qual a trigger irá disparar

logo se nome é uma coluna da tabela tc_cliente tu podes fazer assim:

Selecionar tudo

SELECT REAPLCE (TRANSLATE(:new.nome, ':', '+', '*')) from dual
só não estou entendo por que você esta utilizando um select na dual??

se queres garantir que sempre que o usuário informe a coluna nome, seja feito uma varredura no valor para retirar os caracteres especiais então o melhor seria fazer algo assim:

Selecionar tudo

:new.nome := replace(translate(:new.nome, ':', '+', '*'));
* Só para esclarecer o :old é o valor antes do update ou de um delete, no caso do insert ele não existe, e o :new é o valor após o insert ou o update no delete ele não existe.
nozes
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Qui, 23 Dez 2010 2:06 pm
Localização: Mesquita-RJ
Emanuel "Nozes" Castro
Analista Programador

Opa...eae galera!!

Aqui vai uma forcinha, uma função q pode retirar os "caras" indesejaveis da sua string...

Selecionar tudo

TRANSLATE(UPPER([variavel]),'ABCDEFGHIJKLMNOPQRSTUVWXYZÇ0123456789,./-:+*','ABCDEFGHIJKLMNOPQRSTUVWXYZÇ')
Espero ter ajudado banows!
;)

Grande abraço!
:-o
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Google Adsense [Bot] e 9 visitantes