我想为插入操作创建触发器,以及打印插入值的过程。
CREATE TRIGGER added_product_info_trigger
BEFORE INSERT
ON products
EXECUTE PROCEDURE added_product_info();
还有我的程序
CREATE OR REPLACE FUNCTION added_product_info()
RETURNS trigger
AS
$$
(Select p.productname, s.companyname from products as p, suppliers as s
where p.supplierid = s.supplierid)
$$ LANGUAGE SQL;
如何打印我插入的值?
最佳答案
Sql 函数不能返回trigger
.您可能想编写一个 plpgsql 函数。
触发器函数无法生成任何输出(如 select
查询的结果)。
您可以使用 raise notice
将一些结果传递给客户端程序:
create or replace function added_product_info()
returns trigger as $$
declare
company text;
begin
select companyname
from suppliers
where supplierid = new.supplierid
into company;
raise notice 'inserted: "%" supplied by "%"', new.productname, company;
return new;
end;
$$ language plpgsql;
记录new
仅当声明触发器时才在触发器函数中可见 for each row
(当记录 for each statement
和 new
不可访问时,默认为 old
):
create trigger added_product_info_trigger
before insert on products
for each row
execute procedure added_product_info();
如果触发器是 before insert for each row
它必须返回 new
.
请注意,客户端必须准备好获取和处理通知。 如果您在标准的 psql shell 程序中运行查询,您将得到:
insert into products values ('some product', 1);
NOTICE: inserted: "some product" supplied by "company"
INSERT 0 1
阅读:
关于sql - 如何使用触发器 Postgres 打印新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39859642/