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

Rafael Cabral rafael.cabral em icraft.com.br
Qua Abr 27 19:05:26 -03 2005


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 trigger 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 between
character sets. Esse problema só não ocorre quando não utilizo os character
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 CHAVE
=  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."NOME",
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."NOME";
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



Mais detalhes sobre a lista de discussão lista