declare
CURSOR C_PEDIDOS (P_MAT_CD IN CHAR, P_PED_ORG_ID IN number) IS
SELECT NUMERO_PEDIDO
,MAT_CD
,PEDIDO_QTD
,PED_ORG_ID
FROM PEDIDOS_SRP a
WHERE MAT_CD = P_MAT_CD
AND PED_ORG_ID = P_PED_ORG_ID
AND PED_AGL_SEQUENCIAL IS NULL
and PRO_PRO_SEQUENCIAL IS NULL
and not exists (select 1 from PEDIDOS_SRP_aud p
where p.numero_pedido = a.numero_pedido
and PED_AGL_SEQUENCIAL IS NOT NULL);
BEGIN
IF INSERTING THEN
/* está me dando erro nesta linha, quando eu abro o cursor, eu coloquei o segundo parametro ":new.ped_org_id" aí ele me dá erro váriável de ligação inválida.*/
OPEN C_PEDIDOS (:NEW.mat_cd, :new.ped_org_id);
FETCH C_PEDIDOS INTO R_PEDIDOS;
.
.
.
.
.
.
.
Passando parametro para o cursor na trigger
-
- Rank: DBA Júnior
- Mensagens: 223
- Registrado em: Qui, 14 Dez 2006 10:45 am
- Localização: Brasília-DF
Cleber Zumba de Souza
Pessoal, estou passando parametro para o cursor mas está me dando erro de variável de ligação inválida. Alguém pode me ajudar? o código está à baixo.
-
- Rank: DBA Júnior
- Mensagens: 223
- Registrado em: Qui, 14 Dez 2006 10:45 am
- Localização: Brasília-DF
Cleber Zumba de Souza
Amigão, aí está. esta trigger já funcionava perfeitamente, o que eu fiz foi incluir mais um parametro para o cursor juntamente com mais uma variável de ligação no insert e update ":new.PED_ORG_ID" aí é onde está o erro.
CREATE OR REPLACE TRIGGER evo_lic_srp_trg_03
BEFORE
INSERT OR DELETE
ON planilha_pedidos_srp
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
CURSOR C_PEDIDOS (P_MAT_CD IN CHAR, P_PED_ORG_ID IN number) IS
SELECT NUMERO_PEDIDO
,MAT_CD
,PEDIDO_QTD
,PED_ORG_ID
FROM PEDIDOS_SRP a
WHERE MAT_CD = P_MAT_CD
AND PED_ORG_ID = P_PED_ORG_ID
AND PED_AGL_SEQUENCIAL IS NULL
and PRO_PRO_SEQUENCIAL IS NULL
and not exists (select 1
from PEDIDOS_SRP_aud p
where p.numero_pedido = a.numero_pedido
and PED_AGL_SEQUENCIAL IS NOT NULL);
R_PEDIDOS C_PEDIDOS%ROWTYPE;
BEGIN
IF INSERTING THEN
OPEN C_PEDIDOS (:NEW.mat_cd, :NEW.ped_org_id);
FETCH C_PEDIDOS INTO R_PEDIDOS;
IF C_PEDIDOS%FOUND AND :NEW.ST_SOMA = 'S' THEN
:new.numero_pedido := R_PEDIDOS.numero_pedido;
BEGIN
UPDATE pedidos_SRP
SET pedido_qtd = pedido_qtd + :new.pedido_qtd
WHERE mat_cd = :new.MAT_CD
and ped_org_id = :new.PED_ORG_ID
AND numero_pedido = :new.numero_pedido;
END;
ELSE
BEGIN
INSERT INTO pedidos_srp
(
numero_pedido ,
pedido_qtd ,
mat_cd ,
mat_ds ,
pro_pro_sequencial ,
pro_pro_ano,
ped_org_id
)
VALUES
(
R_SEQ_PEDIDOS.NUMERO_PEDIDO ,
:NEW.PEDIDO_QTD,
:new.mat_cd ,
:new.mat_ds ,
null ,
null ,
:new.ped_org_id
);
END;
END IF;
CLOSE C_PEDIDOS;
END IF;
END LOOP;
END;
/
-
- Rank: DBA Sênior
- Mensagens: 365
- Registrado em: Ter, 24 Mai 2005 2:24 pm
- Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP
Araraquara - SP
Cara, não conseguir ver erro na trigger não..
você chegou a tentar mudar o cursor, tirando os parametros dele e jogando direto os valores da trigger, tipo isso aqui..???
[]'s
você chegou a tentar mudar o cursor, tirando os parametros dele e jogando direto os valores da trigger, tipo isso aqui..???
SELECT NUMERO_PEDIDO, MAT_CD, PEDIDO_QTD, PED_ORG_ID
FROM PEDIDOS_SRP a
WHERE MAT_CD = :NEW.mat_cd
AND PED_ORG_ID = :NEW.ped_org_id
.
.
.
.
.
.
-
- Rank: DBA Júnior
- Mensagens: 223
- Registrado em: Qui, 14 Dez 2006 10:45 am
- Localização: Brasília-DF
Cleber Zumba de Souza
fiz o que você falou, aí o erro está sendo exatamente nessa linha:
dando variável de ligação inválida.
O nome está correto mas o erro persiste.
AND PED_ORG_ID = :NEW.ped_org_id
dando variável de ligação inválida.
O nome está correto mas o erro persiste.
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Brother,
Uma coisa que achei estranho, talvez não seja o erro mas, poderia ser feito de outra forma:
No código:
Você diz que :NEW.NUMERO_PEDIDO recebe o valor do teu cursor (R_PEDIDOS.numero_pedido).
E depois utiliza este :NEW.NUMERO_PEDIDO na tua cláusula where:
Tenta passar direto no teu where:
Qualquer coisa, manda pra gente.
Uma coisa que achei estranho, talvez não seja o erro mas, poderia ser feito de outra forma:
No código:
:new.numero_pedido := R_PEDIDOS.numero_pedido;
BEGIN
UPDATE pedidos_SRP
SET pedido_qtd = pedido_qtd + :new.pedido_qtd
WHERE mat_cd = :new.MAT_CD
and ped_org_id = :new.PED_ORG_ID
AND numero_pedido = :new.numero_pedido;
E depois utiliza este :NEW.NUMERO_PEDIDO na tua cláusula where:
AND numero_pedido = :new.numero_pedido;
AND numero_pedido = R_PEDIDOS.numero_pedido;
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Outra coisa que deve ser analisada neste código, brother, é o seguinte:
Você fecha um LOOP e, no teu cursor, não tem abertura deste LOOP.
....
Você fecha um LOOP e, no teu cursor, não tem abertura deste LOOP.
OPEN C_PEDIDOS (:NEW.mat_cd, :NEW.ped_org_id);
FETCH C_PEDIDOS INTO R_PEDIDOS;
IF C_PEDIDOS%FOUND AND :NEW.ST_SOMA = 'S' THEN
END IF;
END LOOP;
END;
/
Editado pela última vez por Trevisolli em Ter, 06 Nov 2007 7:33 am, em um total de 1 vez.
-
- Rank: DBA Júnior
- Mensagens: 223
- Registrado em: Qui, 14 Dez 2006 10:45 am
- Localização: Brasília-DF
Cleber Zumba de Souza
Não dar nenhum erro Ora.
O erro é o seguinte:
O erro é o seguinte:
PLS-00049: variável de ligação 'new.ped_org_id' inválida
-
- Rank: DBA Júnior
- Mensagens: 223
- Registrado em: Qui, 14 Dez 2006 10:45 am
- Localização: Brasília-DF
Cleber Zumba de Souza
Na tabela planilha_pedidos_srp não possui um campo com o nome PED_ORG_ID.
-
- Rank: DBA Júnior
- Mensagens: 223
- Registrado em: Qui, 14 Dez 2006 10:45 am
- Localização: Brasília-DF
Cleber Zumba de Souza
rESOLVIDO, O PROBLEMA ERA QUE NÃO TINHA O CAMPO ped_org_id NA TABELA planilha_pedidos_srp. estou dando manutenção em sistema e estou garimpando, é difícil mas está indo. valeu galera pelo apoio.
-
- Rank: Estagiário Júnior
- Mensagens: 1
- Registrado em: Qua, 07 Nov 2007 2:04 pm
- Localização: Santo Andre - SP
o erro que dava era a resposta exatamente a resposta que você procurava,
mais claro que isso , só se ele criar o campo automaticamente pra você
mais claro que isso , só se ele criar o campo automaticamente pra você

-
- Rank: DBA Júnior
- Mensagens: 223
- Registrado em: Qui, 14 Dez 2006 10:45 am
- Localização: Brasília-DF
Cleber Zumba de Souza
Relaxa meu rafaelsouza, da próxima vez dispenso sua ajuda e seus comentários.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes