我是疯了还是傻乎乎的?
dev=# \df abuse_resolve
List of functions
-[ RECORD 1 ]-------+------------------------------------------------------------------------------------------------------------------------------------
Schema | public
Name | abuse_resolve
Result data type | record
Argument data types | INOUT __abuse_id bigint, OUT __msg character varying
Type | normal
dev=# select abuse_resolve('30'::bigint);
ERROR: function abuse_resolve(bigint) does not exist
LINE 1: select abuse_resolve('30'::bigint);
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.下面是CREATE FUNCTION,我省略了代码的主要部分,但这应该是无关紧要的:
CREATE OR REPLACE FUNCTION abuse_resolve(INOUT __abuse_id bigint, OUT __msg character varying) RETURNS record AS $_$
DECLARE
__abuse_status VARCHAR;
BEGIN
...snip...
UPDATE abuse SET abuse_status = __abuse_status,
edate = now(),
closed_on = now()
WHERE abuse_id = __abuse_id;
__msg = 'SUCCESS';
END;
$_$ LANGUAGE plpgsql SECURITY DEFINER;只是为了让你咯咯笑:
GRANT ALL ON FUNCTION abuse_resolve(INOUT __abuse_id, OUT __msg character varying) TO PUBLIC;
GRANT ALL ON FUNCTION abuse_resolve(INOUT __abuse_id, OUT __msg character varying) TO myuser;这个函数看起来像是存在的。我能错过什么呢?
这个问题已经解决了,答案是:我是哑巴。我最初错误地定义了参数,但我的代码使用了正确的参数。有一个额外的bigint不应该出现在那里。
发布于 2012-03-13 19:48:34
好吧,有件事很奇怪。我做到了:
steve@steve@[local] =# create function abuse_resolve(inout __abuse_id bigint,
out __msg text) returns record language plpgsql as
$$ begin __msg = 'ok'; end; $$;
CREATE FUNCTION
steve@steve@[local] =# \df abuse_resolve
List of functions
-[ RECORD 1 ]-------+----------------------------------------
Schema | so9679418
Name | abuse_resolve
Result data type | record
Argument data types | INOUT __abuse_id bigint, OUT __msg text
Type | normal
steve@steve@[local] =# select abuse_resolve('30'::bigint);
-[ RECORD 1 ]-+--------
abuse_resolve | (30,ok)这个数据库还有其他问题吗?您可以使用dump/restore复制它,然后在新的副本上尝试此操作吗?使用"public“模式显式限定函数名是否有帮助?您使用的是哪个版本的PostgreSQL?
更新: sql函数它对我来说也很好用,使用:
create function abuse_resolve(inout __abuse_id bigint, out __msg text)
language sql as $$ select $1, 'ok'::text $$;发布于 2012-04-02 15:59:06
如果可以,如果这是问题所在。我推荐使用
"set search_path = mainSchemaName, secondOnes" 要在创建函数的位置或直接调用函数的位置设置正确的模式,请指定模式名称
select schemaName.abuse_resolve('30'::bigint);发布于 2012-03-13 14:47:11
尝试以下语法:
SELECT * FROM abuse_resolve('30'::bigint);https://stackoverflow.com/questions/9679418
复制相似问题