如何在 PostgreSQL 中的同一个存储过程中进行多个查询?

How do I make multiple queries in the same stored procedure in PostgreSQL?

我需要一个存储过程来做两件事。首先,我想获取所有以 'myschema_' 为前缀的模式名称,所以我这样做了:

SELECT schema_name
FROM information_schema.schemata
WHERE schema_name LIKE 'myschema_%'

接下来,我想要一个 while 循环来遍历每个模式并从 'person' table 中获取 'name'。这意味着我必须以某种方式将第一个 select 模式语句的结果作为下一次调用的参数提供。所有这些都应该是一个存储过程。

这就是我要的存储过程return:

|  schema  | name |
-------------------
| schema_1 | Mike |
| schema_1 | Jane |
| schema_2 | Rich |
| schema_3 | Fred |
| schema_4 | Chris|

我该怎么做?

您需要 plpgsql 块或过程和动态 SQL 来执行此操作。

create or replace function my_function()
returns table (sname text, pname text) as
$$
DECLARE
  running_schema text;
  running_name text;
  DYN_SQL constant text default 'select "name" from %I.person';
BEGIN
  for running_schema in --your query 
   SELECT schema_name FROM information_schema.schemata WHERE schema_name LIKE 'myschema_%'
  loop
    for running_name in execute format(DYN_SQL, running_schema) loop
       sname := running_schema;
       pname := running_name;
       return next;
    end loop;
  end loop;
END;
$$ language plpgsql;

-- Unit test
SELECT sname, pname from my_function();