- Este tópico contém 4 respostas, 3 vozes e foi atualizado pela última vez 15 anos, 6 meses atrás por
burga.
-
AutorPosts
-
22 de setembro de 2010 às 1:34 am #96194
mpungan
ParticipantePessoal,
Estou com um problema em uma trigger, esta ocorrendo o erro abaixo alguem tem alguma sugestão para resolver esse erro abaixo:
ORA-04093: references to columns of type LONG are not allowed in triggersValeu.
22 de setembro de 2010 às 4:13 pm #96195burga
ParticipanteTem como postar sua trigger e uma descrição da tabela?
22 de setembro de 2010 às 4:30 pm #96197Rodrigo Mesquita
ParticipanteO que essa sua trigger faz?
22 de setembro de 2010 às 11:19 pm #96212mpungan
ParticipanteCREATE TABLE DIGI_DOCUM_DIR_IMAGENS_LOG_AIUD (
IDIMAGEM NUMBER,
IDDOCUMENTO NUMBER,
DATACADASTRO DATE,
MATRICULACADASTRO VARCHAR2(20),
CAMINHO VARCHAR2(250),
EXTENSAO VARCHAR2(100),
NOMEARQUIVO VARCHAR2(4000),
TAMANHO LONG,
DESCRICAO VARCHAR2(50),
DATAALTERACAO DATE,
DATAVCTO DATE,
VERSAO VARCHAR2(10),
TPOPERACAO VARCHAR2(1),
CDUSUARIO VARCHAR2(30),
CDIP VARCHAR2(30),
DTALTERACAO DATE,
CDLOG NUMBER(15,0)
);CREATE OR REPLACE TRIGGER TRG_DOCUMENTO_DIR_IMAGENS_LOG_AIUD
AFTER INSERT OR UPDATE OR DELETE ON DIGI_DOCUMENTO_DIR_IMAGENS
FOR EACH ROW
DECLARE
vAtualiza NUMBER :=0;
BEGIN
vAtualiza := 0;IF INSERTING THEN
INSERT INTO DIGI_DOCUM_DIR_IMAGENS_LOG_AIUD (IDIMAGEM,
IDDOCUMENTO,
DATACADASTRO,
MATRICULACADASTRO,
CAMINHO,
EXTENSAO,
NOMEARQUIVO,
TAMANHO,
DESCRICAO,
DATAALTERACAO,
DATAVCTO,
VERSAO,
TPOPERACAO,
CDUSUARIO,
CDIP,
DTALTERACAO,
CDLOG)
VALUES (
:new.IDIMAGEM,
:new.IDDOCUMENTO,
:new.DATACADASTRO,
:new.MATRICULACADASTRO,
:new.CAMINHO,
:new.EXTENSAO,
:new.NOMEARQUIVO,
:new.TAMANHO,
:new.DESCRICAO,
:new.DATAALTERACAO,
:new.DATAVCTO,
:new.VERSAO
‘I’,
SYS_CONTEXT (‘USERENV’, ‘OS_USER’),
SYS_CONTEXT (‘USERENV’, ‘HOST’),
SYSDATE,
SQ_DOCUMENTO_DIR_IMAGENS_LOG_AIUD.NEXTVAL);
ELSE IF UPDATING THEN
IF NVL(:new.IDIMAGEM, 0) NVL(:old.IDIMAGEM, 0) THEN
vAtualiza := 1;
END IF;IF NVL(:new.IDDOCUMENTO, 0) NVL(:old.IDDOCUMENTO, 0) THEN
vAtualiza := 1;
END IF;IF NVL(:new.DATACADASTRO, 0) NVL(:old.DATACADASTRO, 0) THEN
vAtualiza := 1;
END IF;IF NVL(:new.MATRICULACADASTRO, 0) NVL(:old.MATRICULACADASTRO, 0) THEN
vAtualiza := 1;
END IF;IF NVL(:new.CAMINHO, 0) NVL(:old.CAMINHO, 0) THEN
vAtualiza := 1;
END IF;IF NVL(:new.EXTENSAO, 0) NVL(:old.EXTENSAO, 0) THEN
vAtualiza := 1;
END IF;IF NVL(:new.NOMEARQUIVO, 0) NVL(:old.NOMEARQUIVO, 0) THEN
vAtualiza := 1;
END IF;IF NVL(:new.TAMANHO, 0) NVL(:old.TAMANHO, 0) THEN
vAtualiza := 1;
END IF;IF NVL(:new.DESCRICAO, 0) NVL(:old.DESCRICAO, 0) THEN
vAtualiza := 1;
END IF;IF NVL(:new.DATAALTERACAO, 0) NVL(:old.DATAALTERACAO, 0) THEN
vAtualiza := 1;
END IF;IF NVL(:new.DATAVCTO, 0) NVL(:old.DATAVCTO, 0) THEN
vAtualiza := 1;
END IF;IF NVL(:new.VERSAO, 0) NVL(:old.VERSAO, 0) THEN
vAtualiza := 1;
END IF;IF vAtualiza = 1 THEN
INSERT INTO DIGI_DOCUM_DIR_IMAGENS_LOG_AIUD (IDIMAGEM,
IDDOCUMENTO,
DATACADASTRO,
MATRICULACADASTRO,
CAMINHO,
EXTENSAO,
NOMEARQUIVO,
TAMANHO,
DESCRICAO,
DATAALTERACAO,
DATAVCTO,
VERSAO,
TPOPERACAO,
CDUSUARIO,
CDIP,
DTALTERACAO,
CDLOG)
VALUES (
decode(:new.IDIMAGEM, 😮 ld.IDIMAGEM, null, :new.IDIMAGEM),
decode(:new.IDDOCUMENTO, 😮 ld.IDDOCUMENTO, null, :new.IDDOCUMENTO),
decode(:new.DATACADASTRO, 😮 ld.DATACADASTRO, null, :new.DATACADASTRO),
decode(:new.MATRICULACADASTRO, 😮 ld.MATRICULACADASTRO, null, :new.MATRICULACADASTRO),
decode(:new.CAMINHO, 😮 ld.CAMINHO, null, :new.CAMINHO),
decode(:new.EXTENSAO, 😮 ld.EXTENSAO, null, :new.EXTENSAO),
decode(:new.NOMEARQUIVO, 😮 ld.NOMEARQUIVO, null, :new.NOMEARQUIVO),
decode(:new.TAMANHO, 😮 ld.TAMANHO, null, :new.TAMANHO),
decode(:new.DESCRICAO, 😮 ld.DESCRICAO, null, :new.DESCRICAO),
decode(:new.DATAALTERACAO, 😮 ld.DATAALTERACAO, null, :new.DATAALTERACAO),
decode(:new.DATAVCTO, 😮 ld.DATAVCTO, null, :new.DATAVCTO),
decode(:new.VERSAO, 😮 ld.VERSAO, null, :new.VERSAO),
‘U’,
SYS_CONTEXT (‘USERENV’, ‘OS_USER’),
SYS_CONTEXT (‘USERENV’, ‘HOST’),
SYSDATE,
SQ_DOCUMENTO_DIR_IMAGENS_LOG_AIUD.NEXTVAL);
END IF;
ELSE IF DELETING THEN
INSERT INTO DIGI_DOCUM_DIR_IMAGENS_LOG_AIUD (IDIMAGEM,
IDDOCUMENTO,
DATACADASTRO,
MATRICULACADASTRO,
CAMINHO,
EXTENSAO,
NOMEARQUIVO,
TAMANHO,
DESCRICAO,
DATAALTERACAO,
DATAVCTO,
VERSAO,
TPOPERACAO,
CDUSUARIO,
CDIP,
DTALTERACAO,
CDLOG)
VALUES (
:old.IDIMAGEM,
:old.IDDOCUMENTO,
:old.DATACADASTRO,
:old.MATRICULACADASTRO,
:old.CAMINHO,
😮 ld.EXTENSAO,
:old.NOMEARQUIVO,
:old.TAMANHO,
:old.DESCRICAO,
:old.DATAALTERACAO,
:old.DATAVCTO,
:old.VERSAO
‘D’,
SYS_CONTEXT (‘USERENV’, ‘OS_USER’),
SYS_CONTEXT (‘USERENV’, ‘HOST’),
SYSDATE,
SQ_DOCUMENTO_DIR_IMAGENS_LOG_AIUD.NEXTVAL);
END IF;
END IF;
END IF;END;
23 de setembro de 2010 às 2:52 am #96223burga
ParticipanteUma coluna chamada TAMANHO de tipo LONG, parece que quem criou as tabelas confundiu os tipos de dados…
No Oracle o tipo LONG grava textos grandes, não é um tipo numérico como nas outras linguagens de programação.
Verifique se está correto o tipo desta coluna… Se estiver correto, não seria melhor usar CLOB?
Se ainda assim tiver que usar o LONG, fique atento às restrições (no 10g… você não disse a versão do teu banco):
Trigger Restrictions on LONG and LONG RAW Datatypes
LONG and LONG RAW datatypes in triggers are subject to the following restrictions:
* A SQL statement within a trigger can insert data into a column of LONG or LONG RAW datatype.
* If data from a LONG or LONG RAW column can be converted to a constrained datatype (such as CHAR and VARCHAR2), then a LONG or LONG RAW column can be referenced in a SQL statement within a trigger. The maximum length for these datatypes is 32000 bytes.
* Variables cannot be declared using the LONG or LONG RAW datatypes.
* :NEW and 😛 ARENT cannot be used with LONG or LONG RAW columns.Fonte: http://download.oracle.com/docs/cd/B14117_01/appdev.101/b10795/adfns_tr.htm#1006604
Então, uma forma de “resolver”:
http://forums.oracle.com/forums/thread.jspa?threadID=856638
recomendação real:
mude o tipo pra CLOB
mude o tipo pra CLOB
mude o tipo pra CLOB
mude o tipo pra CLOB
😆 -
AutorPosts
- Você deve fazer login para responder a este tópico.