Oracle-PLSQL/如果已进行更新,则插入一行



我想做一个关于更新的日志。因此,如果已经进行了更新查询,我想插入日志。

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,那么是的-您可能会使用触发器。它分别为每个表触发,所以您必须编写与您修改的表一样多的触发器。

最新更新