我使用的是使用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
谢谢。
答案 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。