plsql的触发器

#0xZ 2017-03-30 08:11:26
一个才接触plsql触发器的小白,第一个触发器就发生这种问题,百度了白天没啥收获,求大神一语道破~

表结构很简单,test_id,a1,a2,a3,b,其中test_id是自增序列
我只是想我每次插入a1,a2,a3的数据时,触发求和并存放入b中
我是这么写的~

触发器函数是没问题的,如下

CREATE OR REPLACE FUNCTION test_01_insert()
RETURNS trigger AS
$BODY$
BEGIN
IF TG_OP='INSERT' THEN
UPDATE test_table SET b=a1+a2+a3 WHERE test_id=NEW.test_id;
END IF;
return null;
END;
$BODY$
LANGUAGE 'plpgsql';



然后触发器

CREATE TRIGGER test_01_insert
AFTER INSERT
ON test_table
FOR EACH ROW
EXECUTE PROCEDURE test_01_insert();

以上都没啥问题

但是我插入的时候

INSERT INTO test_table (a1,a2,a3) VALUES (1,1,1);

就报错了
[Err] ERROR: function cannot execute on segment because it issues a non-SELECT statement (functions.c:135) (seg3 iZ23ivn7dceZ:40001 pid=2648) (cdbdisp.c:1326)
DETAIL:
SQL statement "UPDATE test_table SET b=a1+a2+a3"
PL/pgSQL function "test_01_insert" line 3 at SQL statement


这个错到底是什么情况?求大神解释下~谢谢
...全文
897 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
#0xZ 2017-05-18
  • 打赏
  • 举报
回复
...自己解决了,应该要返回new值,而且不应该是执行update的动态操作。(简而言之就是要更改语句结构~)

954

社区成员

发帖
与我相关
我的任务
社区描述
PostgreSQL相关内容讨论
sql数据库数据库架构 技术论坛(原bbs)
社区管理员
  • PostgreSQL社区
  • yang_z_1
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧