我的职能是:
CREATE OR REPLACE FUNCTION FnUpdateSalegtab09
(
iacyrid Integer,iRepId Integer,iDrId Integer,ivrid Integer,imode smallint,itrno
varchar,itrdate timestamp,iacid Integer,ivrno varchar,iSuppId Integer,icustname
varchar,inetamt money,idisrate real,idisamt money,iRoundOff real,ijrmid integer,iuserid
integer,iuserdtm timestamp,iVSNo integer,iRecdAmt money,icstrate real,icstsaleamt
money,icstamt money,itdrate real,itdamt money,icdrate real,icdamt money,iCessRate
real,iCessAmt money,iodesc1 varchar,ioamt1 money,iCashCredit boolean,iOrderNo
varchar,iOrderDate timestamp,iCustAdd2 varchar,iRemarks varchar,iWhoRetSl boolean,iPatName
varchar,iDrName varchar,iFormId integer,iSalesMan varchar,iCFMode smallint,iPatId
integer,iStkPtId integer,iDisType smallint,iBranchID integer
)
RETURNS void AS
'BEGIN
INSERT INTO gtab09
(
acyrid, RepId, DrId, vrid, mode, trno, trdate, acid, vrno, SuppId, custname, netamt,
disrate, disamt, RoundOff, jrmid, userid, userdtm, VSNo, RecdAmt, cstrate, cstsaleamt,
cstamt, tdrate, tdamt, cdrate, cdamt, CessRate, CessAmt, odesc1, oamt1, CashCredit,
OrderNo, OrderDate, CustAdd2, Remarks, WhoRetSl, PatName, DrName, FormId, SalesMan,
CFMode,PatId,StkPtId,DisType,BranchID
)
values
( iacyrid,iRepId,iDrId,ivrid,imode,itrno,itrdate,iacid,ivrno,iSuppId,icustname,inetamt,idisra
te,idisamt,iRoundOff,ijrmid,iuserid,iuserdtm,iVSNo,iRecdAmt,icstrate,icstsaleamt,icstamt,it
drate,itdamt,icdrate,icdamt,iCessRate,iCessAmt,iodesc1,ioamt1,iCashCredit,iOrderNo,iOrderDa
te,iCustAdd2,iRemarks,iWhoRetSl,iPatName,iDrName,iFormId,iSalesMan,iCFMode,iPatId,iStkPtId,
iDisType,iBranchID);
END;'
LANGUAGE plpgsql VOLATILE
COST 100;
字符串
我以前把这个叫做:
select FnUpdateSalegtab09 (4, 1, 0, 12, 1, '9'::varchar,'2014-07-15'::timestamp, 4048, '9'::varchar, 4048, 'MYCUSTOMER'::varchar, 12::money, 0, 0::money, 0.32, 185, 0, '2014-07-15 11:24:12 AM'::timestamp, 0, 0::money, 0, 0::money, 0::money, 0, 0::money, 0, 0::money, 0, 0::money, ''::varchar, 0::money, False, ''::varchar, '2014-07-15'::timestamp, ''::varchar, ''::varchar, False, ''::varchar, ''::varchar, 1, ''::varchar, 1,0,1,0,42)
型
错误是:
ERROR: function fnupdatesalegtab09(integer, integer, integer, integer, integer, unknown, unknown, integer, unknown, integer, unknown, integer, integer, integer, numeric, integer, integer, unknown, integer, integer, integer, integer, integer, integer, integer, integer, integer, integer, integer, unknown, integer, boolean, unknown, unknown, unknown, unknown, boolean, unknown, unknown, integer, unknown, integer, integer, integer, integer, integer) does not exist
LINE 1: select FnUpdateSalegtab09 (4, 1, 0, 12, 1, '9','2014-07-15',...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
********** Error **********
型
6条答案
按热度按时间w80xi6nr1#
您的函数有两个**
smallint
参数。但在调用中,您使用的是假定为
integer
类型的数字文本。字符串文字或字符串常量(
'123'
)没有立即类型化。在显式赋值或强制转换之前,它将保持“unknown”类型。但是,会立即键入数字文字或数字常量**。手册:
如果既不包含小数点也不包含指数的数值常量的值符合
integer
类型(32位),则**最初假定该常量为integer
**类型;否则,如果该常量的值符合bigint
类型(64位),则假定该常量为bigint
类型;包含小数点和/或指数的常数最初总是被假定为numeric
类型。另请参阅:
溶液
为
smallint
参数添加显式强制转换,或传递带引号的(非类型化的)文本。演示
字符串
不正确的呼叫:
型
正确的呼叫:
型
老家伙。
w9apscun2#
这个错误意味着一个函数调用只有在所有参数都是相同类型并且以相同顺序传递的情况下才能被现有函数匹配。
字符串
被称为
型
它会出错,
型
因为没有
f()
函数以整数作为参数。所以你需要仔细地比较你传递给函数的内容和它期望的内容,那么长的表列列表看起来像是糟糕的设计。
fcy6dtqo3#
在我的特殊情况下,函数实际上是失踪。错误消息是相同的。我使用的是Postgresql插件PostGIS,我不得不重新安装,无论出于何种原因。
ruarlubt4#
我通过谷歌搜索达到这个问题-我遇到了同样的错误
没有函数与给定的名称和参数类型匹配
但与OP不同,在我的情况下,这是因为函数存在,但它在不同的模式中。
要验证这种情况,需要运行查询:
字符串
以防有人有同样的问题。
j9per5c45#
您还可以在假定的整数类型不正确的情况下使用类型转换运算符::smallint。
字符串
gajydyqb6#
我用
OUT
参数创建了一个PL/pgSQL function,如下所示:字符串
然后,调用
my_func(3)
得到了如下所示的相同错误,因为OUT
参数无法从调用者获取值,而它可以向调用者返回值:型
所以,我设置了
INOUT
参数,它可以从调用者那里获取一个值并返回一个值给调用者,如下所示,然后错误就解决了:型
或者,我设置了
IN
参数,它可以从调用者那里获取值,但不能向调用者和RETURNS VOID
返回值,如下图所示,然后错误就解决了:型
或者,我设置了没有
IN
关键字的参数,它也被识别为IN
参数和RETURNS VOID
,如下图所示,然后错误就解决了:型