在PostgreSQL的过程化语言PL/pgSQL中,如何将查询结果赋值给变量?
我有一个函数:
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
。
该如何处理呢?
发布于 2012-09-08 13:29:11
我想你是在找SELECT select_expressions INTO
select test_table.name into name from test_table where id = x;
这将从test_table
中提取name
,其中id
是函数的参数,并将其保留在name
变量中。不要遗漏了test_table.name
上的表名前缀,否则您会收到关于引用不明确的投诉。
发布于 2012-09-08 15:14:48
只要你赋值的是一个变量,你也可以在plpgsql函数中使用普通赋值:
name := (SELECT t.name from test_table t where t.id = x);
或者像@mu already provided一样使用SELECT INTO
。
这也是可行的:
name := t.name from test_table t where t.id = x;
但最好使用前两种方法中的一种,更清晰的方法,就像@Pavel评论的那样。
我另外使用了一个表别名来缩短语法。
更新:我删除了我的代码示例,建议使用像provided by @Pavel一样的IF EXISTS()
。
发布于 2012-09-09 02:52:54
通常的模式是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、...
https://stackoverflow.com/questions/12328198
复制相似问题