[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