REVELAR

Fórum Problema com trigger de LOG #56523

12/07/2006

0

Estou montando algumas triggers para fazer LOG de um sistema, ou seja, montar os scripts SQL que disparam as triggers. Eu monto o SQL concatenando a parte ´fixa´ (nomes de campos) com a parte variável (valores dos campos), ex:
vSQL = ´UPDATE tabela SET Campo1 = ´||NEW.Campo1||´, Campo2 = ´||NEW.Campo2||´, Campo3 = ´||NEW.Campo3||´ WHERE Campo1 = OLD.Campo1


O primeiro problema surgiu com os campos não requeridos, se tiverem o valor nulo, toda a expressão ficará nula. Eu resolvi isso com um COALESCE. (O NULL está entre apóstrofos, mas ao gerar a SQL, eles são removidos, o que é o correto)
vSQL = ´UPDATE tabela SET Campo1 = ´||NEW.Campo1||´, Campo2 = ´||NEW.Campo2||´, Campo3 = ´||COALESCE(NEW.Campo3, ´NULL´, NEW.Campo3)||´ WHERE Campo1 = OLD.Campo1


O segundo problema são os campos do tipo string (VARCHAR/CHAR) que devem aparecer na SQL final com apóstrofos. No caso dos campos requeridos foi fácil resolver o problema, assim:
vSQL = ´UPDATE tabela SET Campo1 = ´||NEW.Campo1||´, Campo2 = ´´´||NEW.Campo2||´´´, Campo3 = ´||COALESCE(NEW.Campo3, ´NULL´, NEW.Campo3)||´ WHERE Campo1 = OLD.Campo1


O problema é quando tenho que combinar isso com os campos não requeridos ou seja, os que usam o COALESCE, tentei de várias maneiras concatenar os apóstrofos com o terceiro parâmetro da função, mas em todos os casos os apóstrofos são removidos. A única maneira que funcionou foi colocando-os fora da função, mas daí conflita com o NULL, se mantenho os apóstrofos do NULL, remove os da string, se os tiro, dá certo a string, mas se o campo for nulo toda a SQL ficará nula.

Alguém sabe como posso resolver isso? Ou existe uma maneira mais simples de fazer esse log? Eu preciso resolver isso logo.

Obrigada


Gandalf.nho

Gandalf.nho

Responder

Posts

13/07/2006

Gandalf.nho

Ninguém sabe?


Responder

Gostei + 0

13/07/2006

Gandalf.nho

Consegui resolver. Pelo jeito, o COALESCE não gosta de concatenações, tive que o substituir por CASE e passar o apóstrofo na concatenação usando uma UDF que emula a função CHR do Delphi (concatenando direto no CASE tb não dava certo).


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar