【问题标题】:Error: No function matches the given name and argument types错误:没有函数匹配给定的名称和参数类型
【发布时间】:2016-07-07 16:33:16
【问题描述】:

我尝试让这个功能运行。当我使用 pgadmin 并使用

手动调用此函数时

SELECT calculate_something(7)SELECT common.calculate_something(7)

ERROR: function calculate_something(integer) doesn't exist hint no function matches the given name and argument types (从德语翻译)

我已经尝试拨打电话SELECT calculate_something(cast(7 as bigint));

该函数或强制转换有什么问题? :/

CREATE OR REPLACE FUNCTION common.calculate_something(id bigint)
  RETURNS real AS
$BODY$
  DECLARE
    some_value_out REAL := 20;
  BEGIN
    -- I already removed that part for bug fixing and return a constant value (20)
    RETURN some_value_out;
  END;
$BODY$
  LANGUAGE plpgsql VOLATILE;

【问题讨论】:

  • 为我工作。检查函数是否创建成功并检查您是否连接到正确的数据库。
  • 如果您关闭自动提交,请确保 commit 您的 create function 声明
  • 你用的是什么pg版本?
  • 我在 debian 机器上使用 9.4.5 版本。
  • 如果您使用的架构不是public,您是否授予了所有必需的权限? postgresql.org/docs/9.4/static/sql-grant.html

标签: postgresql plpgsql


【解决方案1】:

你的函数真的被调用了吗:

stoff_stueckgewicht(id bigint)

或许:

stoff_stückgewicht(id bigint)

?

如果您的语言环境设置在 debian 和 PostgreSQL 之间不同,后者可能会导致问题。

或者,使用 pgAdmin III 遍历数据库上所有模式中的所有函数并手动查找函数。

【讨论】:

  • 我重命名了函数以避免使对我的问题的解释更容易理解并忘记了那部分。对不起。
【解决方案2】:

使用它来诊断您的问题:

SELECT n.nspname AS schema, p.proname AS function
     , pg_get_function_identity_arguments(p.oid) As args
FROM   pg_proc p
JOIN   pg_namespace n ON n.oid = p.pronamespace
WHERE  p.proname LIKE 'calculate%';

并检查您的search_path

无论哪种方式,bigint 函数都可以使用数字文字调用 - 默认为 integer,但有一个注册转换为 bigint

考虑Function Type Resolution

【讨论】:

    猜你喜欢
    • 2014-09-05
    • 1970-01-01
    • 2013-08-20
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    相关资源
    最近更新 更多