Can I invoke Function on a Trigger?

Asked

Viewed 1,048 times

5

My Function done on Sql-Server:

CREATE FUNCTION  dbo.getQuantidade(@idProd char)
RETURNS float
AS
BEGIN
      DECLARE @QTD float
      SET @QTD = (SELECT (prod.Quantidade)
      FROM Produto prod 
      where @id_prod = IdProduto)

return @QTD
END

My Trigger made oracle:

create or replace trigger seq_PedidoItem
Before insert on PedidoItem
for each row
begin

    if(:new.Quantidade > getQuantidade(:new.IdProduto)) then

    raise_application_error(-20101, 'Quantidade Pedida abaixo da quantidade do Stock');

    end if;

    :new.ValorTotal:= :new.Quantidade * getValor(:new.IdProduto);

end;
/

I wanted to adapt Trigger to SQL Server. Can someone give me a help on syntax ?

Obs: I’m doubting how I do the if and how I invoke the function in trigger.

  • You want to call a function done in Sql-Server on a Trigger made in Oracle?

  • No no, I made the function in SQL Server, and also I have this function in Oracle, now I wanted to adopt/transform so I can use in SQL Server, I have some difficulties with the syntax in SQL Server

1 answer

1

I can invoke Function on a trigger?

Yes you can call a Function no problem.

In your case to use your if you can recolpera the values of INSERT, UPDATE, DELETE of TRIGGER with the (SELECT IdProduto FROM INSERTED).

CREATE FUNCTION  dbo.getQuantidade(@idProd char)
RETURNS float
AS
BEGIN
      DECLARE @QTD float
      SET @QTD = (SELECT (prod.Quantidade)
      FROM Produto prod 
      where IdProduto = @idProd )

return @QTD
END



IF OBJECT_ID ('[dbo].[Produto]','TR') IS NOT NULL  
    DROP TRIGGER [dbo].[Produto];  
GO  
CREATE TRIGGER reminder2  ON [dbo].[Produto] 
AFTER INSERT, UPDATE, DELETE   
AS  

 DECLARE @IdProduto int, @Quantidade int;

 set @IdProduto = (SELECT IdProduto FROM INSERTED)
 set @Quantidade = (SELECT Quantidade FROM INSERTED)

 if(@Quantidade > dbo.getQuantidade(@IdProduto))
    begin
        RAISERROR ('Quantidade Pedida abaixo da quantidade do Stock', 16, 1); 
    end 
    else
    begin
        UPDATE Produto 
        SET ValorTotal = @Quantidade * getValor(@IdProduto);
        WHERE IdProduto = @IdProduto
    end
GO  

Browser other questions tagged

You are not signed in. Login or sign up in order to post.