PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum Duvida Procedure/Trigger #473680

22/03/2014

0

Olá Pessoal,

Eu criei uma procedure onde eu coloco todos meus dados e a chamo na trigger. Na tabela DETALLE_CONFERENCIA.

No qual eu utilizo 3 tabelas: DETALLE_CONFERENCIA, CONFERENCIA, PRODUCTO.

1º Eu tinha estes comandos na procedure onde assim que 'After Insert' ele faria a ENTRADA, ou seja, aumentaria o valor no meu estoque da minha tabela PRODUCTO e funcionou perfeitamente, até ai só utilizei a tabela DETALLE_CONFERENCIA e PRODUCTO.

INPUT PARAMETERS:
-ID_PRODUCTO / INTEGER
-CANTIDAD / FLOAT

VARIABLES
-QTD_TEMPORARIO / FLOAT
-QTD_REAL / FLOAT

begin
  select ESTOQUE_TEMPORARIO, ESTOQUE_REAL
  from PRODUCTO A, CONFERENCIA B
  where A.ID_PRODUCTO = :ID_PRODUCTO
  into :QTD_TEMPORARIO, :QTD_REAL;
  if (B.MOVIMIENTO = 'ENTRADA') then
  begin
  update PRODUCTO
  set A.ESTOQUE_TEMPORARIO = :QTD_TEMPORARIO + :CANTIDAD,
      A.ESTOQUE_REAL = :QTD_REAL + :CANTIDAD
        where A.ID_PRODUCTO = :ID_PRODUCTO;
end


Porém surgiu um problema em que além de ele fazer uma ENTRADA também vai ter a SAIDA e para isso eu teria que utilizar um IF, pois a SAIDA vai diminuir e não somar, mas eu não estou conseguindo fazer isso, pois ai entra a outra tabela CONFERENCIA, onde no campo MOVIMIENTO é onde está registrado se foi uma ENTRADA ou uma SAIDA, no qual eu preciso utilizar ele para fazer as comparações. E para que funcione a ENTRADA e a SAIDA eu tenho que fazer 2 coisas:
-Fazer uma busca e encontrar o ID_CONFERENCIA (PK) da tabela CONFERENCIA igual ao que está na tabela DETALLE_CONFERENCIA que também tem o campo nomeado de ID_CONFERENCIA (FK)
-E depois pegar o campo MOVIMIENTO desse ID_CONFERENCIA encontrado na tabela CONFERENCIA, para utilizar o IF e fazer as comparações se é SAIDA ou ENTRADA.
Eu até o momento fiz desta forma porém eu não sei como vou fazer esse filtro entre os ID's e meus If estão com erros. Alguem poderia me ajudar?

INPUT PARAMETERS:
-ID_PRODUCTO / INTEGER
-CANTIDAD / FLOAT

VARIABLES
-QTD_TEMPORARIO / FLOAT
-QTD_REAL / FLOAT

begin
  select ESTOQUE_TEMPORARIO, ESTOQUE_REAL
  from PRODUCTO A, CONFERENCIA B
  where A.ID_PRODUCTO = :ID_PRODUCTO
  into :QTD_TEMPORARIO, :QTD_REAL;
  if (B.MOVIMIENTO = 'ENTRADA') then
  begin
  update PRODUCTO
  set A.ESTOQUE_TEMPORARIO = :QTD_TEMPORARIO + :CANTIDAD,
      A.ESTOQUE_REAL = :QTD_REAL + :CANTIDAD
  end
  else
  if (B.MOVIMIENTO = 'SAIDA') then
  begin
    update PRODUCTO
  set A.ESTOQUE_TEMPORARIO = :QTD_TEMPORARIO - :CANTIDAD,
      A.ESTOQUE_REAL = :QTD_REAL - :CANTIDAD
  end
  where A.ID_PRODUCTO = :ID_PRODUCTO;
end


Tem mais um detalhe que talvez ajude o ID que tem o campo MOVIMIENTO no qual eu preciso utilizar para saber se é ENTRADA ou SAIDA ele sempre vai ser o ultimo nessa ocasião pois ele vai ter sido adicionado recentemente. E so relembrando eu estou utilizando essa procedure em uma trigger dentro da tabela DETALLE_CONFERENCIA.

Desde já agradecido!
Edson Vilhalba

Edson Vilhalba

Responder

Posts

22/03/2014

Edson Vilhalba

Pessoal eu já tive um avanço porém está acontecendo um erro, no qual não sei resolver:
Toda vez quando eu faço uma SAIDA da este erro mas quando eu faço uma ENTRADA funciona normalmente.

ERRO:

Error Message:
----------------------------------------
multiple rows in singleton select.
multiple rows in singleton select.
At procedure 'ENTRADA' line: 9, col: 3
At trigger 'DETALLE_CONFERENCIA_ENTRADA' line: 5, col: 3.


Meu codigo SQL:
begin
  select A.ESTOQUE_TEMPORARIO, A.ESTOQUE_REAL, B.MOVIMIENTO
  from PRODUCTO A, CONFERENCIA B, DETALLE_CONFERENCIA C
  where A.ID_PRODUCTO = :ID_PRODUCTO and
        C.ID_CONFERENCIA = B.ID_CONFERENCIA
  into :QTD_TEMPORARIO, :QTD_REAL, :MOVIMIENTO;
  if (:MOVIMIENTO = 'ENTRADA') then
  begin
    update PRODUCTO
    set ESTOQUE_TEMPORARIO = :QTD_TEMPORARIO + :CANTIDAD,
        ESTOQUE_REAL = :QTD_REAL + :CANTIDAD
        where ID_PRODUCTO = :ID_PRODUCTO;
  end
  else
  if (:MOVIMIENTO = 'SAIDA') then
  begin
    update PRODUCTO
    set ESTOQUE_TEMPORARIO = :QTD_TEMPORARIO - :CANTIDAD,
        ESTOQUE_REAL = :QTD_REAL - :CANTIDAD
        where ID_PRODUCTO = :ID_PRODUCTO;
  end
end 


Desde já agradecido!
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar