create or replace trigger tr_atualiza_produto
after update or delete on produto_trg
for each row
declare
aux_seq number(10);
aux_sq number(10);
aux_sq_his number(10);
begin
if updating then
select nvl(max(num_seq),0) + 1
into aux_seq
from produtos_atualizados;
insert into produtos_atualizados a (a.num_seq,
a.cod_prod,
a.qt_anterior,
a.qt_atual,
a.vl_prod,
a.owner,
a.dt_atual)
values (aux_seq,
:old.cod_prod,
:old.qt_estoque,
:new.qt_estoque,
:old.vl_prod,
'SIMONE',
sysdate);
if :new.qt_estoque = 0 then
select nvl(max(num_sq),0) + 1
into aux_sq
from produtos_falta;
insert into produtos_falta f (f.num_sq,
f.cod_prod,
f.ds_prod,
f.qt_estoque,
f.qt_falta,
f.id_status)
values (aux_sq,
:old.cod_prod,
:old.ds_prod,
:old.qt_estoque,
0,
'A');
end if;
elsif deleting then
select nvl(max(num_sq_his),0) + 1
into aux_sq_his
from HIST_PROD_EXC;
if :old.qt_estoque = 0 or :old.qt_estoque is null then
insert into HIST_PROD_EXC e (e.num_sq_his,
cod_prod,
qt_estoque,
vl_preco)
values (aux_sq_his,
:old.cod_prod,
:old.qt_estoque,
:old.vl_prod);
-- else
-- raise_application_error(100,' Produto com estoque não pode ser excluído!');
end if;
end if;
end tr_atualiza_produto;
TABELAS ENVOLVIDAS
create table PRODUTO_TRG
(
COD_PROD NUMBER(10) not null,
DS_PROD VARCHAR2(100) not null,
VL_PROD NUMBER(10),
QT_ESTOQUE NUMBER(10),
QT_FALTA NUMBER(10),
ID_STATUS VARCHAR2(1)
);
create table PRODUTOS_ATUALIZADOS
(
NUM_SEQ NUMBER(10) not null,
COD_PROD NUMBER(10) not null,
QT_ANTERIOR NUMBER(10) not null,
QT_ATUAL NUMBER(10) not null,
VL_PROD NUMBER(10) not null,
OWNER VARCHAR2(50),
DT_ATUAL DATE
);
create table PRODUTOS_FALTA
(
COD_PROD NUMBER(10) not null,
DS_PROD VARCHAR2(100) not null,
QT_ESTOQUE NUMBER(10),
QT_FALTA NUMBER(10),
ID_STATUS VARCHAR2(1),
NUM_SQ NUMBER(10) not null
);
______________________________________
Profa: Simone Cristina Aléssio
Administração - Sistemas de Informação