Sat*_*ish 108 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
Run Code Online (Sandbox Code Playgroud)
在上面的函数中我需要存储此查询的结果:
'SELECT name FROM test_table where id='||x;
Run Code Online (Sandbox Code Playgroud)
到变量name.
怎么处理这个?
mu *_*ort 162
我想你正在寻找SELECT INTO:
select test_table.name into name from test_table where id = x;
Run Code Online (Sandbox Code Playgroud)
这将拉动name从test_table哪里id是你的函数的参数,让它在name变.不要忽略表名前缀test_table.name或者你会得到关于模糊引用的投诉.
Erw*_*ter 67
只要您分配单个变量,您还可以在plpgsql函数中使用普通赋值:
name := (SELECT t.name from test_table t where t.id = x);
Run Code Online (Sandbox Code Playgroud)
或者SELECT INTO像@mu已经提供的那样使用.
这也有效:
name := t.name from test_table t where t.id = x;
Run Code Online (Sandbox Code Playgroud)
但更好地使用前两个更清晰的方法之一,正如@Pavel所评论的那样.
我另外用表别名缩短了语法.
更新:我删除了我的代码示例,并建议使用IF EXISTS(),而不是像由@Pavel提供.
Pav*_*ule 16
通常的模式是EXISTS(subselect):
BEGIN
IF EXISTS(SELECT name
FROM test_table t
WHERE t.id = x
AND t.name = 'test')
THEN
---
ELSE
---
END IF;
Run Code Online (Sandbox Code Playgroud)
此模式用于PL/SQL,PL/pgSQL,SQL/PSM,...
| 归档时间: |
|
| 查看次数: |
178659 次 |
| 最近记录: |