postgresql - 在 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';
但我得到
错误:未选择任何架构。
我该怎么做?另外,还有其他方法可以在一个函数中存储多个数据吗?
解决方案
一般来说,你的想法确实有效。但是您必须移出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
“错误:未选择架构。” 似乎是与您的代码无关的其他问题。
推荐阅读
- python - 如何制作具有多个输入的是或否按钮?
- html - 如何使用jQuery删除href标签但保持文本自然?
- mysql - 将 datetime-local 类型的表单数据发布到 sql 表 datetime 字段
- ios - 是否可以在同一个函数中调用不同的重载函数?
- jquery - JQuery MultiSelect下拉列表不显示文本
- c - 可以使用`_mm256_movemask_ps`代替未定义的`_mm256_movemask_epi32`吗?
- vue.js - Vuetify 设置从右到左的文本
- tensorflow - ValueError: ('检查模型目标时出错:预期没有数据,但得到了
- google-apps-script - 如何使用 `ScriptApp.getService().getUrl()` 在电子表格中正确显示“当前 Web 应用程序 URL”?
- r - $operator 和 atomic vector - 将我的 data.frame 代码放在哪里