Fórum Pegando o valor de uma trigger com generator. #43345
23/03/2004
0
DECLARE VARIABLE NOVCONTA INTEGER;
BEGIN
IF (NEW.INCD IS NULL) THEN BEGIN
NEW.INCD = GEN_ID(INTERNACAO_CONTA,1);
[b:645f386490] NOVCONTA = OLD.incd;[/b:645f386490]
EXECUTE PROCEDURE LEITOSAUA ([b:645f386490]NOVCONTA[/b:645f386490], NEW.INEN, NEW.INLT);
END
Alguem pode me dar uma mão :(
Sremulador
Curtir tópico
+ 0Posts
23/03/2004
Afarias
T+
Gostei + 0
24/03/2004
Sremulador
Gostei + 0
24/03/2004
Afarias
Vc precisa realmente se esforçar mais para fazer suas perguntas! Procure ser mais atento e completo... é muito difícil tentar ajudar quando vc realmente não posta nada-com-nada! Desculpe!
Por exemplo, vc AGORA diz q recebe um erro do chave estrangeira, mas no código q vc postou É IMPOSSÍVEL TER UM ERRO DESSES!!
Alguem tem q chutar q INCD possui uma chave estrangeira, mas ai vc NUNCA deveria estar jogando um valor de generator nele, ou por outro lado, o erro vem do procedimento o qual não se tem a mínima idéia do código -- muito difícil!!
Mais do q isso -- vc quer ajuda numa trigger q não INFORMA nem se é AFTER ou BEFORE, se é UPDATE, INSERT ou DELETE -- realmente, *muito* difícil.
Analize bem seu problema, veja QUAL O PROBLEMA, QUAL A MENSAGEM DE ERRO, QUAIS OS CÓDIGOS ENVOLVIDOS, e... DEPURE para estar o mais próximo possível do real problema -- então post uma questão q permita q outros possam conhecer e ajudar no problema
Isso vai poupar muito tempo seu e dos usuários q querem ajudar.
T+
Gostei + 0
24/03/2004
Sremulador
before insert
DECLARE VARIABLE SITLEI INTEGER;
BEGIN
IF (NEW.INCD IS NULL) THEN
NEW.INCD = GEN_ID(INTERNACAO_CONTA,1);
SELECT LTSL FROM LEITOS WHERE LTEN = NEW.INEN AND LTLT = NEW.INLT
INTO SITLEI;
IF (SITLEI = 2) THEN BEGIN
[b:6ea9a597a0] UPDATE LEITOS SET LTIN= NEW.INCD, LTSL=1[/b:6ea9a597a0]
WHERE ((LTLT = NEW.INLT) AND (LTEN = NEW.INEN));
END ELSE EXCEPTION A001;
Como disse acima o erro parece ser porque não tenho o cod gravado na tabela [b:6ea9a597a0]INTERNACAO[/b:6ea9a597a0] para poder gravar na de [b:6ea9a597a0]LEITOS[/b:6ea9a597a0]
Criticas são sempre bem vinda pois ajudam o homem a ver seus erros !!!
Gostei + 0
24/03/2004
Afarias
...considerando q a trigger esteja na tabela de INTERNAÇÃO, mova o código de atualização da tabela de leitos para uma trigger AFTER INSERT .. assim, o registro já estará lá e vc não terá o erro de violação de chave.
Realmente no BEFORE INSERT o registro ainda não existe.
T+
Gostei + 0
24/03/2004
Sremulador
Gostei + 0
24/03/2004
Afarias
T+
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)