首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redshift存储过程中的动态变量处理

Redshift存储过程中的动态变量处理
EN

Stack Overflow用户
提问于 2022-11-08 11:34:48
回答 1查看 31关注 0票数 0

嗨,我有一个需求,我正在通过aws红移存储过程执行查询。我需要有列名或表名才是动态的,类似于下面的示例.表详细信息](https://i.stack.imgur.com/Rg968.png),在这个表中,我想要执行id=3的查询,但是我希望在调用过程时从我的过程中发送表名(I)。创建表ro.test4(id整型);#应该执行

代码语言:javascript
复制
create or replace procedure ro.template()
language plpgsql
as $$
declare
i varchar(20);
name varchar(100);
begin
  i='test4';
  execute 'select(select query from rwr_dataops.test where id=3)'into name;
  raise info '%',name;
end;
$$

call ro.template();

我试过这个过程代码,但它不是working.Can,有人帮我这个。

代码语言:javascript
复制
create or replace procedure ro.template()
language plpgsql
as $$
declare
i varchar(20);
name varchar(100);
begin
  i='test4';
  execute 'select(select query from rwr_dataops.test where id=3)'into name;
  raise info '%',name;
end;
$$

call ro.template();

不工作的输出是Create ro.i(id整数);预期执行: Create ro.test4(id integer);#应该执行

EN

回答 1

Stack Overflow用户

发布于 2022-11-08 16:43:03

您需要两个EXECUTE语句-一个用于从测试表中获取SQL,另一个用于执行此SQL语句。

下面是一组快速的SQL演示:

代码语言:javascript
复制
create table test as select 'select \'fubar\';' as query;

create or replace procedure template()
language plpgsql
as $$
declare
name varchar(100);
command varchar(100);
begin
  execute 'select query from test 'into command;
  execute command into name;
  raise info '%',name;
end;
$$;

call template();

这是一种显示文本'fubar‘的四通八达的方式,但是您应该看看这是如何映射到您的情况的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74360059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档