Erro SQL: An error was found in the application program input parameters for the SQL statement.
Galera,
estou tentando criar minha Trigger mas está dando o seguinte erro:
An error was found in the application program input parameters for the SQL statement.
segue abaixo minha estrutura
Minha Trigger
CREATE OR ALTER TRIGGER TR_ATUALIZA_SALDO FOR ITEM_VENDA
ACTIVE AFTER INSERT OR UPDATE POSITION 0
as begin
SP_SELECIONA_LOTE ( new.id_produto, NEW.no_lote );
IF (INSERTING) THEN
BEGIN
if (new.tipo='1') then
UPDATE lote SET QTDE_DISP = (QTDE_DISP - NEW.qtde) WHERE id_produto = new.id_produto and no_lote = NEW.no_lote;
else
UPDATE lote SET QTDE_DISP = (QTDE_DISP + NEW.qtde) WHERE id_produto = new.id_produto and no_lote = NEW.no_lote;
END
IF (updating) THEN
BEGIN
if (new.tipo='1') then
UPDATE LOTE SET QTDE_DISP = (QTDE_DISP + OLD.QTDE - NEW.QTDE) WHERE id_produto = new.id_produto and no_lote = NEW.no_lote;
else
UPDATE LOTE SET QTDE_DISP = (QTDE_DISP + NEW.QTDE - OLD.QTDE ) WHERE id_produto = new.id_produto and no_lote = NEW.no_lote;
END
Minha Procedure
create or alter procedure SP_SELECIONA_LOTE (
PID_PRODUTO integer,
PNO_LOTE varchar(5))
returns (
RID integer)
as
BEGIN
for
SELECT COUNT(*) FROM LOTE WHERE (Lote.id_produto = :pID_PRODUTO ) AND (Lote.no_lote = :pNO_LOTE )
INTO :rID
do
begin
IF ( RID <= 0) THEN
INSERT INTO LOTE (ID_PRODUTO, NO_LOTE, QTDE_DISP) VALUES (:pID_PRODUTO,:pNO_LOTE,0);
suspend;
end
END
minha tabela de itens de venda
CREATE TABLE ITEM_VENDA (
ID INTEGER NOT NULL,
ID_VENDA INTEGER,
ID_PRODUTO INTEGER,
NO_LOTE VARCHAR(5),
VALOR NUMERIC(15,2),
QTDE INTEGER,
TIPO CHAR(1)
);
minha tabela de Lote
CREATE TABLE LOTE (
ID INTEGER NOT NULL,
NO_LOTE VARCHAR(5),
QTDE_DISP INTEGER,
ID_PRODUTO INTEGER
);
estou tentando criar minha Trigger mas está dando o seguinte erro:
An error was found in the application program input parameters for the SQL statement.
segue abaixo minha estrutura
Minha Trigger
CREATE OR ALTER TRIGGER TR_ATUALIZA_SALDO FOR ITEM_VENDA
ACTIVE AFTER INSERT OR UPDATE POSITION 0
as begin
SP_SELECIONA_LOTE ( new.id_produto, NEW.no_lote );
IF (INSERTING) THEN
BEGIN
if (new.tipo='1') then
UPDATE lote SET QTDE_DISP = (QTDE_DISP - NEW.qtde) WHERE id_produto = new.id_produto and no_lote = NEW.no_lote;
else
UPDATE lote SET QTDE_DISP = (QTDE_DISP + NEW.qtde) WHERE id_produto = new.id_produto and no_lote = NEW.no_lote;
END
IF (updating) THEN
BEGIN
if (new.tipo='1') then
UPDATE LOTE SET QTDE_DISP = (QTDE_DISP + OLD.QTDE - NEW.QTDE) WHERE id_produto = new.id_produto and no_lote = NEW.no_lote;
else
UPDATE LOTE SET QTDE_DISP = (QTDE_DISP + NEW.QTDE - OLD.QTDE ) WHERE id_produto = new.id_produto and no_lote = NEW.no_lote;
END
Minha Procedure
create or alter procedure SP_SELECIONA_LOTE (
PID_PRODUTO integer,
PNO_LOTE varchar(5))
returns (
RID integer)
as
BEGIN
for
SELECT COUNT(*) FROM LOTE WHERE (Lote.id_produto = :pID_PRODUTO ) AND (Lote.no_lote = :pNO_LOTE )
INTO :rID
do
begin
IF ( RID <= 0) THEN
INSERT INTO LOTE (ID_PRODUTO, NO_LOTE, QTDE_DISP) VALUES (:pID_PRODUTO,:pNO_LOTE,0);
suspend;
end
END
minha tabela de itens de venda
CREATE TABLE ITEM_VENDA (
ID INTEGER NOT NULL,
ID_VENDA INTEGER,
ID_PRODUTO INTEGER,
NO_LOTE VARCHAR(5),
VALOR NUMERIC(15,2),
QTDE INTEGER,
TIPO CHAR(1)
);
minha tabela de Lote
CREATE TABLE LOTE (
ID INTEGER NOT NULL,
NO_LOTE VARCHAR(5),
QTDE_DISP INTEGER,
ID_PRODUTO INTEGER
);
Bruno Figueira
Curtidas 0