UPDATE itens_pedido SET preco_item = get_preco ( cod_prod) ;
UPDATE itens_pedido SET total_item = qtde_pedida* preco_item * ( 100 - descto_item)/100 ; COMMIT ; -- Trigger Composta para atualizar o total dos itens CREATE OR REPLACE TRIGGER atualiza_total_item_compound FOR INSERT OR UPDATE OF qtde_pedida, descto_item, preco_item ON itens_pedido COMPOUND TRIGGER linha_alterada rowid ; AFTER EACH ROW IS -- declaracao em nivel de linha BEGIN linha_alterada := :NEW.rowid ; DBMS_OUTPUT.PUT_LINE ( 'Rowid da linha alterada :'|| linha_alterada ) ; END AFTER EACH ROW ; -- declaracao em nivel de sentenca INSERT OU UPDATE -- chamar a execucao de uma funcao ou procedure para criar uma nova transacao, fora dessa aqui AFTER STATEMENT IS BEGIN atualiza_valor_total_proc ( linha_alterada) ; END AFTER STATEMENT ; END ;
-- procedure para calcular o valor total do item
CREATE OR REPLACE PROCEDURE atualiza_valor_total_proc ( vlinha IN VARCHAR2) IS total_novo itens_pedido.total_item%TYPE ; BEGIN -- capturando os valores e calculando SELECT qtde_pedida* preco_item * ( 100 - descto_item)/100 INTO total_novo FROM itens_pedido WHERE rowid = vlinha ; DBMS_OUTPUT.PUT_LINE ( 'Valor agora é :'||TO_CHAR(total_novo) ) ; -- atualizando UPDATE itens_pedido SET total_item = total_novo WHERE rowid = vlinha ; END ; -- desabilitando o gatilho anterior ALTER TRIGGER atualiza_total_item DISABLE ; SELECT * FROM itens_pedido WHERE num_ped = 2030 ; INSERT INTO itens_pedido VALUES ( 2030, 5003, 1, 10, 56.81, null, 'SEPARACAO' ) ; UPDATE itens_pedido SET descto_item = 10 , qtde_pedida = 20 WHERE num_ped = 2030 AND cod_prod = 5003 ; COMMIT ;