在postgres中创建会话变量时出错

igsr9ssn  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(321)

我正在创建一个过程,其中它接收两个参数: p_user 以及 p_id .

create or replace procedure user (p_user numeric, p_ip varchar(20))
as $$
begin 
    set session.id_user= p_user;
    set session.ip = p_ip;
end;
$$ 
language 'plpgsql';

我将创建的过程称为:

call user (1, '127.0.0.1');

我执行验证查询:

select current_setting('session.id_user'), current_setting('session.ip');

结果是:

current_setting: p_user
current_setting: p_ip

而不是价值观​​在参数中报告。

jgovgodb

jgovgodb1#

您可以为此使用格式函数:

create or replace procedure myproc (p_user numeric, p_ip varchar(20))
as $$
begin 
    execute format('set session.id_user=%s', p_user) ;
    execute format('set session.ip=%L', p_ip) ;
end;
$$ 
language 'plpgsql';
CREATE PROCEDURE

call myproc(1, '127.0.0.1');
CALL

select current_setting('session.id_user'), current_setting('session.ip');
 current_setting | current_setting 
-----------------+-----------------
 1               | 127.0.0.1
(1 row)

相关问题