首页 > 解决方案 > 在 postgresql 中使用 execute 将列数据存储在数组中

问题描述

我正在创建一个动态查询来从表中提取一些数据。我想将该数据存储在一个变量中,但它不能存储多个值。而且我也可以使用临时表,但在某些情况下我也不允许使用它。现在我试图以数组形式存储数据:

示例:saydf_id='select col from schema.table_name'是在运行时创建的动态查询。

declare 
var_tmp varchar [];
BEGIN
    execute 'select array_agg(col) 
          into var_tmp  from ('||df_id||') as y'; 

但我得到

错误:未选择任何架构。

我该怎么做?另外,还有其他方法可以在一个函数中存储多个数据吗?

标签: postgresqldynamicquery

解决方案


一般来说,你的想法确实有效。但是您必须移出into var_tmp查询字符串并使其成为EXECUTE.

例子:

CREATE TABLE a (a varchar(8));
INSERT INTO a VALUES ('a'), ('b'), ('c');

DO
$$
declare 
var_tmp varchar [];
col varchar = 'a';
BEGIN
    execute 'select array_agg('||col||') 
            from a' into var_tmp; 
  raise notice '%', array_to_string(var_tmp, ', ', '<NULL>');
END
$$ language plpgsql

印刷:

NOTICE:  a, b, c
CONTEXT:  PL/pgSQL function inline_code_block line 8 at RAISE

“错误:未选择架构。” 似乎是与您的代码无关的其他问题。


推荐阅读