首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否从函数参数中设置PgSQL运行时参数?

问是否从函数参数中设置PgSQL运行时参数?
EN

Stack Overflow用户
提问于 2019-01-29 21:30:41
回答 1查看 81关注 0票数 0

我创建了一个带有varchar参数的pl/pgsql函数。在这个函数中,我尝试将运行时参数设置为函数参数的值。

代码语言:javascript
复制
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被视为字符串,而不是参数名。为什么是这样,我如何才能实现我想要做的事情?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-30 20:13:36

PL/pgSQL变量仅适用于SELECT和DML命令。这些语句有一个执行计划,可以使用参数执行。PLpgSQL运行时能够使用plpgsql变量作为参数。没有计划的静态SQL命令,如DDL、SET、SHOW、..不能使用plpgsql变量。没有唯一的方法可以做到这一点--而且存在语义不明确的风险。在这种情况下,您应该使用动态SQL。

代码语言:javascript
复制
DO $$
BEGIN
  EXECUTE format('SET choice.p = %L', 'some text);
  RAISE NOTICE '%', current_setting('choice.p');
END;
$$;

你的例子不能工作的主要原因很简单-- SQL命令不支持a表达式,然后没有正确的方法,如何在那里应用SET变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54422226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档