Problema com trigger de LOG
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:
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)
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:
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
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
Curtidas 0
Respostas
Gandalf.nho
12/07/2006
Ninguém sabe?
GOSTEI 0
Gandalf.nho
12/07/2006
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).
GOSTEI 0