Crie uma tabela com: ID do produto, nome do produto, valor real do produto e valor do produto com juros. Após criar a tabela crie um trigger associada a tabela produtos, tomando o valor real do produto como referência, para incrementar 5% a mais no valor do produto com juros. Após criar a trigger povoe a tabela com 5 Itens.
Respostas
Criação da tabela:
CREATE TABLE PRODUTOS (
ID INTEGER,
NOME VARCHAR(150),
VALOR_REAL DECIMAL (18,2),
VALOR_JUROS DECIMAL (18,2));
Criação da Trigger:
SET TERM ^ ;
CREATE OR ALTER TRIGGER TRG_CALCULA_JUROS FOR PRODUTOS
ACTIVE AFTER INSERT POSITION 0
AS
DECLARE trgrDone VARCHAR(255);
begin
trgrDone = NULL;
-- VERIFICA SE A TRIGGER JÁ NÃO ESTÁ SENDO EXECUTADA! PREVINE O ERRO DE UM UPDATE COM LOOP INFINITO!
IF(trgrDone IS NULL)THEN BEGIN
rdb$set_context('USER_TRANSACTION', 'Foo', 1);
UPDATE PRODUTOS
SET valor_juros = valor_real + ((5 * valor_real) / 100)
WHERE ID = (SELECT MAX(ID) FROM PRODUTOS);
END
end
^
SET TERM ; ^
Povoamento da tabela:
insert into produtos
values(1, 'CAMISETA', 15.50, null);
insert into produtos
values(2, 'CANECA', 5.70, null);
insert into produtos
values(3, 'JAQUETA', 150.90, null);
insert into produtos
values(4, 'MOLETOM', 50.00, null);
insert into produtos
values(5, 'LUVA', 9.10, null);
Observações finais:
1 - Note que, sempre que inserido um produto novo na tabela, precisamos informar manualmente seu código ID (primeiro valor da linha "VALUES (...) após o INSERT"). Para que isso seja resolvido, recomenda-se o uso de um Generator (função atrelada a uma trigger da tabela na operação de INSERT, responsável por criar uma numeração automática para algum campo - neste caso seria o ID - ).
2 - Interpretando seu problema, a trigger para calcular os juros só irá funcionar quando um produto for INSERIDO na tabela. Caso ele seja atualizado por meio de um update por exemplo, ele não terá seu valor de juros atualizado.