Postgresql中动态生成的游标
我有一个光标,它指向一个选择,但这个选择是动态生成的。我想在宣布后分配对账单。 我已经做了一个工作的例子和另一个不工作的例子。这是一个只打印一些数据的简单示例。 这是表格:Postgresql中动态生成的游标,postgresql,dynamic,cursor,plpgsql,Postgresql,Dynamic,Cursor,Plpgsql,我有一个光标,它指向一个选择,但这个选择是动态生成的。我想在宣布后分配对账单。 我已经做了一个工作的例子和另一个不工作的例子。这是一个只打印一些数据的简单示例。 这是表格: CREATE TABLE public.my_columns ( id serial NOT NULL, "name" varchar(30) NOT NULL, /* Keys */ CONSTRAINT my_columns_pkey PRIMARY KEY (id) ) WITH (
CREATE TABLE public.my_columns (
id serial NOT NULL,
"name" varchar(30) NOT NULL,
/* Keys */
CONSTRAINT my_columns_pkey
PRIMARY KEY (id)
) WITH (
OIDS = FALSE
);
CREATE INDEX my_columns_index01
ON public.my_columns
("name");
INSERT INTO public.my_columns
("name")
VALUES
('name1'),
('name2'),
('name3'),
('name4'),
('name5'),
('name6');
这是函数(我已经输入了工作代码和不工作代码):
有什么想法吗
谢谢。您真的需要显式光标吗?如果您需要迭代动态SQL,那么您可以使用
FOR IN EXECUTE
。它是动态SQL的隐式(内部)游标上的循环
FOR db_rec IN EXECUTE v_sql_dynamic
LOOP
..
END LOOP
稍复杂一点的解决方案在-openforexecute
中描述:
do $$
declare r refcursor; rec record;
begin
open r for execute 'select * from pg_class';
fetch next from r into rec;
while found
loop
raise notice '%', rec;
fetch next from r into rec;
end loop;
close r;
end $$;
有了这种游标,您就不能使用
FOR IN
OPEN FOR EXECUTE是我需要的。谢谢,我相信您还必须声明rec变量:rec record;
do $$
declare r refcursor; rec record;
begin
open r for execute 'select * from pg_class';
fetch next from r into rec;
while found
loop
raise notice '%', rec;
fetch next from r into rec;
end loop;
close r;
end $$;