假设我有一个定义如下的表:
CREATE TABLE my_tbl (
id bigint,
a1 bigint[],
a2 bigint[]
);
我想创建一个存储过程来将值附加到a1
和a2
。这是正确的方法还是有更简单的方法?
CREATE OR REPLACE FUNCTION append(
iid bigint,
next_a1 bigint,
next_a2 bigint)
DECLARE
r "my_tbl";
tmp_a1 bigint[];
tmp_a2 bigint[];
BEGIN
FOR r IN SELECT * FROM "my_tbl"
WHERE r."id" = iid
FOR UPDATE
LOOP
tmp_a1 := r.a1 || next_a1;
tmp_a2 := r.a2 || next_a2;
UPDATE my_tbl SET ( "a1", "a2" ) = ( tmp_a1, tmp_a2 )
WHERE "id" = iid;
END LOOP;
END; $$
LANGUAGE plpgsql;
我在 Postgresql 9.2 上。
你可以简单地做
要获得一个函数,您只需将整数常量替换为参数。您可以安全地使用查询语言(又名 SQL)函数来执行此操作,根本不需要 pl/pgsql。