函数循环并从多个表中选择数据 [英] Function to loop through and select data from multiple tables

查看:167
本文介绍了函数循环并从多个表中选择数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是Postgres的新手,并且拥有一个具有相同结构的多个表的数据库。我需要从每个表中选择符合特定条件的数据。



我可以用一堆 UNION 查询,但是我需要搜索的表的数量会随着时间的推移而改变,所以我不想像这样对其进行硬编码。我一直在试图开发一个函数,将循环通过特定的表(他们有一个共同的命名约定),并返回一个记录表,但我没有得到任何结果,当我查询函数。函数代码如下:

pre $ CREATE OR REPLACE FUNCTION public.internalid_formaltable_name_lookup()
RETURNS TABLE(natural_id text,name text ,natural_id_numeric文本)AS
$ BODY $
DECLARE
formal_table text;
begin
for formal_table IN
从information_schema.tables中选择table_name
其中table_schema ='public'和table_name like'formaltable%'
LOOP
EXECUTE' SELECT natural_id,name,natural_id_numeric
FROM'|| formal_table ||
'WHERE natural_id_numeric IN(
从internal_idlookup中选择natural_id_numeric
where internal_id =''7166571'')';
RETURN NEXT;
END LOOP;
返回;
END;
$ BODY $
语言plpgsql;

当我尝试使用该函数时,没有收到任何错误,但没有返回任何行:

  SELECT * from internalid_formaltable_name_lookup(); 

有什么想法我错了?

RETURNS TABLE(natural_id text,name text,natural_id_numeric text)AS
$ func $
DECLARE
formal_table text;
BEGIN
for formal_table IN
SELECT quote_ident(table_name)
FROM information_schema.tables
WHERE table_schema ='public'
AND table_name LIKE'formaltable%'
LOOP
RETURN QUERY EXECUTE
'SELECT t.natural_id,t.name,t.natural_id_numeric
FROM internal_idlookup i
JOIN public。 formal_table || 't USING(natural_id_numeric)
WHERE i.internal_id = 7166571'; - 假设internal_id是数字
END LOOP;
END
$ func $ LANGUAGE plpgsql;



要点:

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆