Postgresql 如何解决Postgres中的错误42883?
运行此脚本时:Postgresql 如何解决Postgres中的错误42883?,postgresql,types,casting,plpgsql,Postgresql,Types,Casting,Plpgsql,运行此脚本时: CREATE OR REPLACE FUNCTION registeruser(character varying, character varying, money, character varying, character varying, date) RETURNS void AS $BODY$ BEGIN INSERT INTO "Users"("Name", "Surnames", "Money", "Email", "Password", "UserType",
CREATE OR REPLACE FUNCTION registeruser(character varying, character varying, money, character varying, character varying, date)
RETURNS void AS
$BODY$
BEGIN
INSERT INTO "Users"("Name", "Surnames", "Money", "Email", "Password", "UserType", "State", "BirthDate")
VALUES ($1,$2,$3,$4,$5,'Costumer','Active',$6);
END;
$BODY$ LANGUAGE plpgsql VOLATILE;
SELECT RegisterUser('Andrea','Gianchero',0,'gian@hotmail.com','rome','1960-04-12');
我得到这个错误:
ERROR: function registeruser(unknown, unknown, integer, unknown, unknown, unknown) does not exist
LINE 1: SELECT RegisterUser('Andrea','Gianchero',0,'gian@hotmail.com...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
如何解决此问题?字符串文本(如
'Andrea'
是非类型化的,并且与varchar
类型的参数不同。在psql控制台中测试以下两行:
select 'Andrea';
select 'Andrea'::character varying;
第一个将输出带有默认列名的Andrea?column?
第二个将输出Andrea
,但列名为varchar
。从文件中:
符号varchar(n)和char(n)分别是字符变量(n)和字符(n)的别名
要解决您的问题,只需将函数调用中的所有字符串文本强制转换为typevarchar
(或character variating
)。此外,0
应转换为类型money
,此时它被识别为整数
:
SELECT RegisterUser('Andrea'::varchar, 'Gianchero'::varchar, 0::money,...)
您的InitCaps/CamelCase看起来可疑。Postgres不会自动将整数转换为
货币。您需要自己进行强制转换。我已经进行了转换,但无法解决问题错误:函数registeruser(未知、未知、金钱、未知、未知、未知、未知、未知)不存在第1行:选择registeruser('Alfonso','Gianchero',0::money,'gian@gma...^提示:没有函数与给定的名称和参数类型匹配。您可能需要添加显式类型转换。@弗朗西斯科:您是否也像尼克·巴恩斯在评论中写的那样将整数值转换为money
?@Francisco:您评论中的错误消息指示8个参数,而ur函数有6个。删除尾随参数,它应该可以工作。这是一个问题。?column?
不是数据类型,而是默认的列名。除非函数重载,否则只有money
需要强制转换,因为没有定义隐式强制转换。最好直接强制转换字符串文字:money“0”