SQLSTATE[42883]:未定义函数您可能需要添加显式类型转换
Posted
技术标签:
【中文标题】SQLSTATE[42883]:未定义函数您可能需要添加显式类型转换【英文标题】:SQLSTATE[42883]: Undefined function You might need to add explicit type casts 【发布时间】:2018-11-08 17:31:46 【问题描述】:我在使用 Laravel 和 postgres 时遇到了这个错误:
SQLSTATE[42883]: Undefined function: 7 ERROR: function paymentrun(integer, date, double precision, text) does not exist LINE 1: SELECT paymentRun( ^ HINT: No function matches the given name and argument types. 你可能需要添加显式类型转换。(SQL: SELECT paymentRun( :buyer_id::integer, :payment_date::DATE, :paid_amount::double precision, :paydetails::text);)
我有这个功能的地方: 编辑::功能更大,但我认为不需要显示
CREATE FUNCTION "paymentRun"(buyer_id integer, payment_date DATE, paid_amount double precision, payDetails text) RETURNS VOID AS
$$
DECLARE
row_STab "SearchTable"%rowtype;
curProd "KeysForSale"%rowtype;
totalPrice double precision;
returnedPID integer;
BEGIN
我是这样调用函数的:
DB::select("SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;");
DB::select('BEGIN TRANSACTION;');
$sendToSQL = '';
for($i = 0; $i<session('cart_number'); $i++)
$sendToSQL .= '(' . $cart_array[$i] . '),';
$sendToSQL = rtrim($sendToSQL,",");
$sendToSQL .= ';';
DB::select('INSERT INTO "SearchTable"(product_id) VALUES' . $sendToSQL);
//DB::select(DB::raw('SELECT paymentRun'))->where(Auth::id(), date('Y/m/d'),'PayPal', 10000, 'qualquer');
DB::select('SELECT paymentRun(
:buyer_id::integer,
:payment_date::DATE,
:paid_amount::double precision,
:paydetails::text);',
['buyer_id' => Auth::id(),
'payment_date' => date('Y/m/d'),
'paid_amount' => 10000,
'paydetails' =>'qualquer'
]);
//DB::select('DELETE FROM "SearchTable";');
DB::select('COMMIT;');
我做错了什么? 我尝试了好几次,但没有一个取得好的结果。
谢谢
【问题讨论】:
使用函数 CAST() 我得到了同样的错误。使用 DB::raw() 它跳过... 【参考方案1】:您使用双引号和不同大小写的名称创建了函数。
CREATE FUNCTION "paymentRun" ...
如果您这样做,则在随后处理对象时,大小写很重要。所以你需要改变
DB::select('SELECT paymentRun(
到
DB::select('SELECT "paymentRun"(
为了正确处理函数。
【讨论】:
以上是关于SQLSTATE[42883]:未定义函数您可能需要添加显式类型转换的主要内容,如果未能解决你的问题,请参考以下文章
SQLSTATE [HY093]:参数号无效:未定义参数 - php
如何修复 SQLSTATE [42704]:未定义对象:7 错误:数据类型 json 在heroku 托管中没有访问方法“btree”的默认运算符类
PostgresException: 42883: function ifnull(integer, integer) does not exist