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]:参数号无效:参数未定义

SQLSTATE [HY093]:参数号无效:未定义参数 - php

如何修复 SQLSTATE [42704]:未定义对象:7 错误:数据类型 json 在heroku 托管中没有访问方法“btree”的默认运算符类

类值返回未定义,因为值有可能改变

PostgresException: 42883: function ifnull(integer, integer) does not exist

SQLSTATE[HY000] [2002] 与 AW 的连接超时