[firebase-br] Problema com trigger -> CHARACTER SET
Pha-Lista
lista em pha.com.br
Qui Abr 28 07:18:12 -03 2005
Voce definiu o Character Set da Conexao?
Voce nao esta estourando o limite de algum campo?
PHA
Nova Odessa / SP - Brazil
-----Mensagem original-----
From: "Rafael Cabral" rafael.cabral em icraft.com.br
Date: Wed, 27 Apr 2005 19:04:25 -0300
To: lista em firebase.com.br
Subject: [firebase-br] Problema com trigger -> CHARACTER SET
> Pessoal,
>
> Estou com um problema urgente.
>
> Supondo que eu tenha 2 tabelas. Uma de cadastro e outra de registros
> excluídos.
> A tabela de registros excluídos só é preenchida através de um tri> gger quando
> um registro da tabela de cadastro é excluída.
> O problema ocorre quando excluo um registro que tenha acento. Na hora de
> executar o trigger, aparece aquele famoso erro cannot transliterate betwe> en
> character sets. Esse problema só não ocorre quando não utilizo os c> haracter
> sets. Abaixo está o código do trigger a ser executado.
>
> CREATE TABLE CLIENTE(NOME VARCHAR (50) CHARACTER SET ISO8859_1 NOT NULL
> COLLATE PT_PT);
> ALTER TABLE CLIENTE ADD CONSTRAINT ID_NOME PRIMARY KEY(NOME);
>
> CREATE TABLE SYS_DELETE(
> SEQ INTEGER NOT NULL,
> TABELA VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE PT_PT,
> CHAVE VARCHAR(150) CHARACTER SET ISO8859_1 COLLATE PT_PT,
> DATA DATE,
> USUARIO VARCHAR(20) CHARACTER SET ISO8859_1 COLLATE PT_PT,
> BANCO VARCHAR(30) CHARACTER SET ISO8859_1 COLLATE PT_PT
> );
>
> ALTER TABLE SYS_DELETE ADD CONSTRAINT ID_SYS_DELETE PRIMARY KEY (SEQ);
>
> CREATE OR ALTER TRIGGER "BEF_CLIENTE" FOR "CLIENTE"
> BEFORE DELETE
> AS
> DECLARE VARIABLE TOT_DEL INTEGER;
> DECLARE VARIABLE MAX_DEL INTEGER;
> BEGIN
> SELECT COUNT(*) FROM SYS_DELETE WHERE NOME_TABELA = 'CLIENTE' AND C> HAVE
> = OLD."NOME" INTO :TOT_DEL;
> IF (TOT_DEL = 0) THEN
> BEGIN
> SELECT COALESCE(MAX(SEQ),0) + 1 FROM SYS_DELETE INTO :MAX_DEL> ;
> INSERT INTO SYS_DELETE VALUES (:MAX_DEL, 'CLIENTE', OLD."NOM> E",
> CURRENT_TIMESTAMP, USER, 'SISTEMA'); -- Erro ocorre aqui.
> END
> ELSE
> UPDATE SYS_DELETE SET MOMENTO = CURRENT_TIMESTAMP, USUARIO = > USER,
> LOCAL = 'SISTEMA' WHERE NOME_TABELA = 'CLIENTE' AND CHAVE = OLD."N> OME";
> END
>
> O campo em questão é o NOME.
> Este erro não impede que o registro na tabela CLIENTE seja excluído. > Porém
> como ocorre o erro na linha indicada, não insere na tabela SYS_DELETE.
> O engraçado é que quando insiro manualmente um registro na tabela SYS> _DELETE
> para testar com acentos, ele aceita tranquilamente
>
> []s,
>
> Rafael Cabral
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://search.gmane.org/search.php?grouprebase
Mais detalhes sobre a lista de discussão lista