问题描述
我正在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)