如何在postgresql中为custom_variable_class赋值变量值或函数参数

时间:2012-05-07 10:54:28

标签: function postgresql session-variables plpgsql

我使用的是使用custom_variable_class的pl / pgsql函数,函数代码是

CREATE OR REPLACE FUNCTION can_connect("pUserId" character varying)
RETURNS boolean AS
$BODY$DECLARE
user_id integer ;
BEGIN

SELECT users.user_serial INTO user_id
FROM public.users
WHERE users.user_id="pUserId"
;

set public.userId  to user_id  ;
 set public.companyId  to "pUserId" ;
RETURN true ;    

EXCEPTION
 WHEN OTHERS THEN
raise notice ' error %',sqlerrm ;
END ;

$BODY$
LANGUAGE plpgsql VOLATILE

现在使用功能

 select can_connect ('amr' );
 t

没关系,返回值是预期的t

但是在尝试检索会话变量值时

select current_setting('public.userId') ;
the result is 
 user_id

哪个是变量名而不是值 使用函数参数

时也是如此
select current_setting('public.pUserId') ;
the result is 
pUserId 

谢谢。

2 个答案:

答案 0 :(得分:4)

使用plpgsql EXECUTE强制解析器插入变量的值:

EXECUTE 'set public.userId  to ' || quote_literal(user_id);
EXECUTE 'set public.companyId to ' || quote_literal( "pUserId");

作为奖励,它也适用于旧版本的PostgreSQL。

答案 1 :(得分:1)

这样只允许SET PostgreSQL的配置参数。

在PostgreSQL 9.1上,我有以下输出:

SET user_id TO bbb;
ERROR:  unrecognized configuration parameter "user_id"

由于PostgreSQL没有包,因此保持状态的最佳方法是使用temporary tables