postgresql 如何在用户定义函数中使用fomat函数

t5fffqht  于 2023-02-08  发布在  PostgreSQL
关注(0)|答案(1)|浏览(133)

我有以下简单的代码用户定义的函数,要格式化字符串。

create or replace function func_format_usage(v1 integer, v2 varchar)
returns varchar as $$
declare
res1 varchar;
begin
 -- error
 res1 = execute format('input arguments is %I and %S', v1, v2) ;
 -- also eror
 res1 = format('input arguments is %I and %S', v1, v2);
 return res1;
end
$$ language plpgsql;

select func_format_usage(10,'Ten')

无论我是否添加execute来调用format返回,它都会报告错误,报告格式有错误。
但是,可以运行select format
我想问问题出在哪里,谢谢!

kknvjkwl

kknvjkwl1#

我假设这是一个语法练习。有两个问题:

  • 使用execute into代替赋值操作符。注意,这个例子仍然不能工作,因为execute需要有效的SQL。它将生成一个运行时异常。
  • 格式占位符%S无效,应为%s

就是这样,我用text代替了varchartext在PostgreSQL中更常见。

create or replace function func_format_usage(v1 integer, v2 text)
returns text language plpgsql as
$$
declare
    res1 text;
begin
 -- execute format('input arguments is %I and %s', v1, v2) into res1;
 res1 := format('input arguments is %I and %s', v1, v2);
 return res1;
end
$$;

可以像这样使用execute

execute 'select '''||format('input arguments is %I and %s',v1,v2)||'''' into res1;

到目前为止,这是一种过度的杀伤,没有多大意义。

相关问题