我想做一个关于更新的日志。因此,如果已经进行了更新查询,我想插入日志。
UPDATE DEPOT_IMPORT SET DEPOT_IMPORT.CD_REGATE =
(SELECT CONTROLE_IMPORT_REGATE.NEW_REGATE
FROM CONTROLE_IMPORT_REGATE
WHERE DEPOT_IMPORT.CD_REGATE = CONTROLE_IMPORT_REGATE.OLD_REGATE)
WHERE DEPOT_IMPORT.CD_REGATE in (SELECT DISTINCT OLD_REGATE FROM CONTROLE_IMPORT_REGATE);
-- INSERTION AVIS FONCTIONNEL
INSERT INTO DEPOT_AVIS_FONCTIONNEL VALUES (p_id_depot,'Modification du regate car obsolète','AFO505');
好的,谢谢,所以现在我必须学习触发器:(
Triggers
在执行logging/auditing
时非常有用。因此,学习trigger
不应该是开销。
请参阅下面的演示,它简化了您的需求。
--表创建并插入了一条记录,例如
CREATE TABLE depot_import ( cd_regate NUMBER);
INSERT INTO depot_import VALUES ( 1 );
--在depot_inport表上创建触发器以处理logging
,即插入"depot_avis_foctionnel">
CREATE OR REPLACE TRIGGER trk_upd BEFORE
UPDATE ON depot_import
FOR EACH ROW
BEGIN
INSERT INTO depot_avis_fonctionnel VALUES (
:new.cd_regate,
'Modification du regate car obsolète',
'AFO505'
);
END;
更新表格:
UPDATE depot_import
SET
cd_regate = 3
WHERE cd_regate = 1;
Commit;
CCD_ 5通过CCD_ 6插入。
--选择
SQL> SELECT * FROM depot_avis_fonctionnel;
COL1 COL2 COL3
---------- -------------------------------------------------------------------------------- --------------------------------------------------------------------------------
3 Modification du regate car obsolète AFO505
好的,我看到了UPDATE
:
UPDATE DEPOT_IMPORT SET DEPOT_IMPORT.CD_REGATE = ...
日志是什么?是吗
INSERT INTO DEPOT_AVIS_FONCTIONNEL ...
无论如何:如果你把它作为PL/SQL块的一部分,那么你可以做这样的事情:
begin
update depot_import set ...
-- Log the update:
insert into log_table (cdate, text, rows_affected) values
(sysdate, 'Table DEPOT_IMPORT has been updated', sql%rowcount);
insert into dep DEPOT_AVIS_FONCTIONNEL ...
-- Log the insert:
insert into log_table (cdate, text, rows_affected) values
(sysdate, 'Table DEPOT_AVIS_FONCTIONNEL has been inserted', sql%rowcount);
end;
如果您使用纯SQL,那么是的-您可能会使用触发器。它分别为每个表触发,所以您必须编写与您修改的表一样多的触发器。