创建SQL触发器的正确语法是什么,它更新另一个表更新或插入的值,以及一个字段,以指定它是UPDATE还是INSERT。
我想做的例子:
CREATE TRIGGER Table1_Trigger_Update_Insert
ON Table1
AFTER UPDATE, INSERT
AS
INSERT INTO Table2 (col1, col2, col3)
SELECT
col1, col2,
CASE WHEN {if it was an update} THEN 'UPDATE'
WHEN {if it was an insert} THEN 'INSERT'
END
FROM
Table1
答案 0 :(得分:0)
create or replace trigger table1_trigger_update_insert
after update or insert or delete
on table1
for each row
declare
v_operation varchar2(16) := '';
begin
if inserting then
v_operation := 'insert';
elsif updating then
v_operation := 'update';
elsif deleting then
v_operation := 'delete';
insert into table2 (col1, col2, col3)
select col1
,col2
,v_operation
from table1
..
..
..
..
end;
/
答案 1 :(得分:0)
(我根据用户之前的问题历史记录添加了sql-server标记,并假设SQL Server正在编写此答案。
未能引用inserted
(和/或deleted
)伪表的触发器已损坏。你当前的那个也没提到,但插入两者的引用使这很容易:
CREATE TRIGGER Table1_Trigger_Update_Insert
ON Table1
AFTER UPDATE, INSERT
AS
INSERT INTO Table2 (col1, col2, col3)
SELECT
col1, col2,
CASE WHEN EXISTS (SELECT * FROM deleted) THEN 'UPDATE'
ELSE 'INSERT'
END
FROM
inserted
我们使用inserted
而不是Table1
来获取仅受INSERT
或UPDATE
影响的行。我们引用deleted
来确定操作是UPDATE
还是INSERT
(如果我们无法检测到INSERT
则默认为UPDATE
,因为这些是UPDATE
只有导致此触发器触发的可能操作
在UPDATE
的特定情况下检测inserted
中断的特定逻辑会影响0行(这仍会导致触发器触发)。但幸运的是,在这种情况下,无论如何我们在table2
中都会有0行,因此无论如何都不要将任何行插入Highcharts.chart('container', {
chart: {
type: 'area'
},
xAxis: {
categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
},
series: [{
data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4],
color: '#ff0000',
fillColor: '#ffffff',
fillOpacity: 1
}]
});
。