我使用DBEaver在PostgreSQL中创建了一个存储过程。我正试图通过从DBeaver调用过程将数据插入到表中。但这给了我一个错误
SQL错误[42883]:错误:函数public.proc_insert_test(integer,unknown,unknown,unknown,unknown,unknown,timestamp with time zone,integer,integer,integer,timestamp with time zone)不存在提示:没有与给定名称和参数类型匹配的函数。您可能需要添加显式类型转换。职位:8
程序:
CREATE OR REPLACE FUNCTION public.proc_insert_test(p_brndcode integer,
p_brndname varchar(100),
p_brndsname varchar(100),
p_prdtype char(1),
p_discontinue char(1),
p_crddate date,
p_status integer,
p_recstat integer,
p_brndgrpseqno integer,
p_wefrom date)
RETURNS char
LANGUAGE plpgsql
AS $body$
BEGIN
Insert into arc_mmstbrndgroup(brndcode, brndname, brndsname, prdtype, discontinue, crddate, status, recstat, brndgrpseqno, wefrom)
values(p_brndcode, p_brndname, p_brndsname, p_prdtype, p_discontinue, p_crddate, p_status, p_recstat, p_brndgrpseqno, p_wefrom);
END;
$body$
;
调用过程:
select public.proc_insert_test(123, 'Test2', 'Test2', 'T', 'T', now(), 1, 9, 1234, now());
问题可能是什么?
我对此完全陌生。
select public.proc_insert_test(123, 'Test2'::varchar(100), 'Test2'::varchar(100), 'T'::char(1), 'T'::char(1), now(), 1, 9, 1234, now());
SQL错误[42883]:错误:函数public.proc_insert_test(integer,character variing,character,character,timestamp with time zone,integer,integer,integer,timestamp with time zone)不存在提示:没有与给定名称和参数类型匹配的函数。您可能需要添加显式类型转换。职位:8
Postgres不允许将时间戳
隐式转换为日期
数据类型。注意-Postgresdate
类型与Oracle的date
类型不同。
CREATE OR REPLACE FUNCTION public.test(v date)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
RAISE NOTICE '%', v;
END;
$function$
postgres=# SELECT test(now());
ERROR: function test(timestamp with time zone) does not exist
LINE 1: SELECT test(now());
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
postgres=# SELECT test(current_date);
NOTICE: 2019-11-14
+------+
| test |
+------+
| |
+------+
(1 row)
postgres=# SELECT test(now()::date);
NOTICE: 2019-11-14
+------+
| test |
+------+
| |
+------+
(1 row)
从timestamp
(now()
函数的结果类型)到date
的转换正在丢失转换。默认情况下不允许。因此您应该强制执行它(通过显式强制转换),或者您应该使用返回date
类型的伪常量current_date
,并且不需要任何转换。
因此,im在将数据库从Oracle迁移到PGSql项目中,现在im修复了一些查询.我有一个这样的错误: 并且我在这个字符串生成器上发现了来自控制台的nvl错误
这里是上面代码的错误-> 没有与给定的名称和参数类型匹配的函数。您可能需要添加显式类型转换。
我在PostgreSQL中有一个存储过程,如下所示: 我的数据库中有带精度值的类型。对于numeric,我只需要使用。这条路对吗?
代码中的以下语句给了我一个错误: 是Postgres中的用户定义聚合函数,定义为: 错误消息为:
但这段代码有一个错误: 错误:函数log(数值,双精度)不存在行1:select log(2.7,c) 提示:没有函数与给定的名称和参数类型匹配。您可能需要添加显式类型转换。 查询:select log(2.7,c)context:pl/pgsql function inline_code_block line 11 at SQL语句SQL state:42883
我使用NPGSQLADO.net连接器从C#代码与postgresql通信。 函数在postgresql数据库中可用,我也可以从pgadmin工具执行它,但无法从c#code调用它。 获取错误 42883:函数public.insert_json_array_to_test_method_temp(p_input_test_name= 错误提示-没有与给定名称和参数类型匹配的函数。您可能需要添加显