我创建了一个带有varchar参数的pl/pgsql函数。在这个函数中,我尝试将运行时参数设置为函数参数的值。
CREATE FUNCTION test_function (param VARCHAR)
RETURNS VOID AS $tf$
BEGIN
SET choice.p = param;
RAISE NOTICE '%', current_setting('choice.p');
END; $tf$ LANGUAGE plpgsql;但是,打印的值是'param‘。param被视为字符串,而不是参数名。为什么是这样,我如何才能实现我想要做的事情?
发布于 2019-01-30 20:13:36
PL/pgSQL变量仅适用于SELECT和DML命令。这些语句有一个执行计划,可以使用参数执行。PLpgSQL运行时能够使用plpgsql变量作为参数。没有计划的静态SQL命令,如DDL、SET、SHOW、..不能使用plpgsql变量。没有唯一的方法可以做到这一点--而且存在语义不明确的风险。在这种情况下,您应该使用动态SQL。
DO $$
BEGIN
EXECUTE format('SET choice.p = %L', 'some text);
RAISE NOTICE '%', current_setting('choice.p');
END;
$$;你的例子不能工作的主要原因很简单-- SQL命令不支持a表达式,然后没有正确的方法,如何在那里应用SET变量。
https://stackoverflow.com/questions/54422226
复制相似问题