gpt4 book ai didi

postgresql - 在 Postgresql 9.1 中使用动态表名进行循环?

转载 作者:行者123 更新时间:2023-11-29 11:38:26 27 4
gpt4 key购买 nike

我有一个 plpgslq 函数,它进行一些数据处理,并想编写一个 for 循环,但是我的表名在设计时是未知的。有没有可能的方法来实现这一目标?这是我想要实现的示例代码片段:

-- Function: check_data()

-- DROP FUNCTION check_data();

CREATE OR REPLACE FUNCTION check_data()
RETURNS character varying AS
$BODY$declare
dyn_rec record;
tbl_name record;
begin
-- sample dynamic tables
tbl_name := 'cars';
tbl_name := 'trucks';
tbl_name := 'bicycles';

for dyn_rec in select * from format($$s%$$,tbl_name) loop
raise notice 'item is %',dyn_rec.item_no;
end loop;

return 'Processing Ok';

end;$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION check_data()
OWNER TO postgres;

最佳答案

永远不能在 plpgsql 嵌入式 SQL 中使用变量作为表或列标识符。一个解决方案是动态 SQL - EXECUTE 或 FOR IN EXECUTE 语句:

DO $$
DECLARE
tables text[] = ARRAY['table1','table2'];
table_name text;
rec record;
BEGIN
FOREACH table_name IN ARRAY tables
LOOP
FOR r IN EXECUTE format('SELECT * FROM %I', table_name)
LOOP
RAISE NOTICE '%', rec;
END LOOP;
END LOOP;
END; $$

关于postgresql - 在 Postgresql 9.1 中使用动态表名进行循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20965882/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com