【问题标题】:How to run a "returns void" function with JSON parameter?如何使用 JSON 参数运行“返回 void”函数?
【发布时间】:2021-05-29 10:29:21
【问题描述】:

这个函数被创建为

CREATE OR REPLACE FUNCTION myschema._add1( vjson json, vtype smallint, vdate date) 
  returns void language 'plpgsql' cost 100 volatile security definer set search_path=myschema
as $$
begin
  insert into myschema.tbl(cjson, ctype, cdate)
  values(vjson, vtype, vdate);
end;
$$

Tbl 定义:

create table myschema.tbl(cjson json, ctype smallint, cdate date)

运行函数

select myschema._add1('{"j":["j1", "j2"]}', 1, '2021-02-26')获取

错误:函数 myschema._add1hidoc(unknown, integer, unknown) 没有 存在提示:没有函数匹配给定的名称和参数类型。 您可能需要添加显式类型转换。

select myschema._add1('{"j":["j1", "j2"]}'::json, 1, '2021-02-26'::date)获取

错误:函数 myschema._add1hidoc(json, integer, date) 没有 存在提示:没有函数匹配给定的名称和参数类型。 您可能需要添加显式类型转换。

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    您没有显式转换的唯一参数是smallint 参数,但我敢肯定,这就是问题所在。我尝试了in the fiddle 并且它工作了,在只将int 转换为smallint 之后:

    select _add1('{"j":["j1", "j2"]}', 1::smallint, '2021-02-26')
    

    【讨论】:

    • 是的,int 到 smallint 是向下的,必须解决。同时,错误消息非常具有误导性。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2017-07-13
    • 2019-10-08
    • 2016-08-28
    • 1970-01-01
    • 2018-04-09
    • 2013-11-26
    • 2021-10-02
    • 2020-12-08
    相关资源
    最近更新 更多