1 postgresql trigger stored-procedures plpgsql functions
我有一个程序:
create or replace procedure pro_update_last_read(in input_sensor_id integer, in read_time timestamp)
as
$$
begin
update sensor
set last_read = read_time
where sensor_id = input_sensor_id;
end;
$$ language plpgsql;
Run Code Online (Sandbox Code Playgroud)
以及一个调用它的触发器:
create trigger tri_last_read
after insert or update of report_time
on report
execute procedure pro_update_last_read(sensor_id, report_time);
Run Code Online (Sandbox Code Playgroud)
但是,在创建触发器时,我收到错误消息:
Run Code Online (Sandbox Code Playgroud)[42883] ERROR: function pro_update_last_read() does not exist
为什么会发生这个错误?
您必须使用函数,而不是过程:
CREATE FUNCTION pro_update_last_read() RETURNS trigger ...
Run Code Online (Sandbox Code Playgroud)
必须定义触发器FOR EACH ROW
,并且不能将列传递给触发器函数。
您访问触发器函数中的列的方式是通过NEW
变量:NEW.sensor_id
和NEW.report_time
。
归档时间: |
|
查看次数: |
4473 次 |
最近记录: |