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

时间:2012-09-08 05:12:37

标签: database postgresql stored-procedures plpgsql postgresql-9.1

如何将查询结果分配给PL / pgSQL中的变量,这是PostgreSQL的过程语言?

我有一个功能:

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

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

'SELECT name FROM test_table where id='||x;

变量name

如何处理?

5 个答案:

答案 0 :(得分:139)

我认为您正在寻找SELECT INTO

select test_table.name into name from test_table where id = x;

这会从name中提取test_table,其中id是您的函数的参数,并将其保留在name变量中。不要在test_table.name上省略表格名称前缀,否则您会收到有关模糊参考的投诉。

答案 1 :(得分:55)

只要您分配单个变量,您还可以在plpgsql函数中使用普通赋值:

name := (SELECT t.name from test_table t where t.id = x);

或使用SELECT INTO之类的name := t.name from test_table t where t.id = x;

这也有效:

IF EXISTS()

但最好使用前两个更清晰的方法之一,如@Pavel评论。

我还用表别名缩短了语法。
更新:我删除了我的代码示例,建议使用{{1}}代替@mu already provided

答案 2 :(得分:16)

通常的模式是EXISTS(subselect)

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,......

答案 3 :(得分:0)

您可以使用以下示例使用PL / pgSQL将查询结果存储在变量中:

 select * into demo from maintenanceactivitytrack ; 
    raise notice'p_maintenanceid:%',demo;

答案 4 :(得分:0)

根据 Executing a Query with a Single-Row Result,使用以下语法:

SELECT select_expressions INTO [STRICT] target FROM ...

其中 target 可以是记录变量、行变量或逗号分隔的简单变量列表和记录/行字段。

SELECT INTO 不同,SELECT select_expressions INTO 不创建表。

在您的示例中,您有一个简单的变量 name,因此选择语句将是:

SELECT test_table.name INTO name FROM test_table WHERE test_table.id = x;