首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用PL/pgSQL将查询结果存储在变量中

使用PL/pgSQL将查询结果存储在变量中
EN

Stack Overflow用户
提问于 2012-09-08 13:12:37
回答 5查看 272.8K关注 0票数 156

在PostgreSQL的过程化语言PL/pgSQL中,如何将查询结果赋值给变量?

我有一个函数:

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION test(x numeric)
RETURNS character varying AS
$BODY$
DECLARE
name   character varying(255);
begin
 name ='SELECT name FROM test_table where id='||x;

 if(name='test')then
  --do somthing
 else
  --do the else part
 end if;
end;
return -- return my process result here
$BODY$
LANGUAGE plpgsql VOLATILE

在上面的函数中,我需要存储这个查询的结果:

代码语言:javascript
复制
'SELECT name FROM test_table where id='||x;

添加到变量name

该如何处理呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-09-08 13:29:11

我想你是在找SELECT select_expressions INTO

代码语言:javascript
复制
select test_table.name into name from test_table where id = x;

这将从test_table中提取name,其中id是函数的参数,并将其保留在name变量中。不要遗漏了test_table.name上的表名前缀,否则您会收到关于引用不明确的投诉。

票数 234
EN

Stack Overflow用户

发布于 2012-09-08 15:14:48

只要你赋值的是一个变量,你也可以在plpgsql函数中使用普通赋值:

代码语言:javascript
复制
name := (SELECT t.name from test_table t where t.id = x);

或者像@mu already provided一样使用SELECT INTO

这也是可行的:

代码语言:javascript
复制
name := t.name from test_table t where t.id = x;

但最好使用前两种方法中的一种,更清晰的方法,就像@Pavel评论的那样。

我另外使用了一个表别名来缩短语法。

更新:我删除了我的代码示例,建议使用像provided by @Pavel一样的IF EXISTS()

票数 98
EN

Stack Overflow用户

发布于 2012-09-09 02:52:54

通常的模式是EXISTS(subselect)

代码语言:javascript
复制
BEGIN
  IF EXISTS(SELECT name
              FROM test_table t
             WHERE t.id = x
               AND t.name = 'test')
  THEN
     ---
  ELSE
     ---
  END IF;

此模式用于PL/SQL、PL/pgSQL、SQL/PSM、...

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

https://stackoverflow.com/questions/12328198

复制
相关文章

相似问题

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