[firebase-br] Problema com trigger -> CHARACTER SET

Rafael Cabral rafael.cabral em icraft.com.br
Qui Abr 28 09:42:34 -03 2005


Bom, nao tinha definido o CHARACTER SET DEFAULT. Tinha definido
individualmente pra cada campo CHAR. E adaptei as chaves das tabelas para um
tamanho que nao ultrapassasse o limite, pois se isso tivesse acontecendo o
Firebird nao deixaria criar a chave ou a tabela (se a chave estivesse sendo
definida na criacao da tabela).

O problema e q estava utilizando tabelas com acentos e cedilha. Tirei de
todos eles e funcionou perfeitamente.

A pouco tempo estava tentando migrar um banco de dados em Oracle para
Firebird e a maioria das tabelas ja tinha acentos e cedilhas. Queria muito
tirar os acentos, mas o coordenador do projeto nao queria ter q mudar a
aplicacao por causa dos acentos. Mas pelos testes q fazemos aqui com o FB,
ele acabou aceitando a ideia.

Alias, eu acho certissimo criar nomes de tabelas e campos sem acentos. Mas
acho q o pessoal do Oracle ficou muito mal acostumado pois la permite e nao
da problema. ;)

[]s,

Rafael Cabral

-----Original Message-----
From: Pha-Lista [mailto:lista em pha.com.br]
Sent: quinta-feira, 28 de abril de 2005 07:18
To: rafael.cabral em icraft.com.br; FireBase
Subject: Re: [firebase-br] Problema com trigger -> CHARACTER SET


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
> exclumdos.
> A tabela de registros exclumdos ss i preenchida atravis de um tri> gger
quando
> um registro da tabela de cadastro i exclumda.
> 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 ss nco ocorre quando nco utilizo os c>
haracter
> sets. Abaixo esta o csdigo 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 questco i o NOME.
> Este erro nco impede que o registro na tabela CLIENTE seja exclumdo. >
Porim
> como ocorre o erro na linha indicada, nco insere na tabela SYS_DELETE.
> O engragado i 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 configuragco na lista, use o enderego
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