如何解决Postgres会话变量在函数内部不起作用
我正在postgres函数中设置会话变量,但未设置值。 任何帮助是最感激的。提前致谢。 我正在使用“ Postgresql 10.6,由Visual C ++内部版本1800编译,64位”
CREATE FUNCTION set_rp_vals(iv_rp_company varchar,iv_rp_portfolio varchar)
RETURNS integer
LANGUAGE plpgsql
Security DEFINER
AS $function$
DECLARE
l_retval integer;
BEGIN
l_retval := 1;
RAISE NOTICE '1.iv_rp_company: >>> %',iv_rp_company;
RAISE NOTICE '2.iv_rp_portfolio: >>> %',iv_rp_portfolio;
--set the session variable
set rp.company = iv_rp_company;
set rp.portfolio = iv_rp_portfolio;
RETURN l_retval;
EXCEPTION
WHEN OTHERS THEN
RETURN 9;
END;
$function$
;
SELECT set_rp_vals(iv_rp_company := 'COMPAN',iv_rp_portfolio := 'PORTOF');
-检索会话变量:
select
current_setting('rp.company') as company,current_setting('rp.portfolio') as portfolio;
The value returned by the above query:
解决方法
我将为此使用set_config()
函数:
CREATE OR REPLACE FUNCTION set_rp_vals(iv_rp_company varchar,iv_rp_portfolio varchar)
RETURNS integer
LANGUAGE plpgsql
SECURITY DEFINER
AS $function$
DECLARE
l_retval integer;
BEGIN
l_retval := 1;
RAISE NOTICE '1.iv_rp_company: >>> %',iv_rp_company;
RAISE NOTICE '2.iv_rp_portfolio: >>> %',iv_rp_portfolio;
--set the session variable
perform set_config('rp.company',iv_rp_company,false);
perform set_config('rp.portfolio',iv_rp_portfolio,false);
RETURN l_retval;
EXCEPTION
WHEN OTHERS THEN
RETURN 9;
END;
$function$
;
CREATE FUNCTION
执行您的值:
SELECT set_rp_vals(iv_rp_company := 'COMPAN',iv_rp_portfolio := 'PORTOF');
NOTICE: 1.iv_rp_company: >>> COMPAN
NOTICE: 2.iv_rp_portfolio: >>> PORTOF
┌─────────────┐
│ set_rp_vals │
├─────────────┤
│ 1 │
└─────────────┘
(1 row)
select
current_setting('rp.company') as company,current_setting('rp.portfolio') as portfolio;
┌─────────┬───────────┐
│ company │ portfolio │
├─────────┼───────────┤
│ COMPAN │ PORTOF │
└─────────┴───────────┘
(1 row)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。