当前位置: 首页 > 知识库问答 >
问题:

SQLSTATE[42883]:未定义的函数您可能需要添加显式类型转换

扈运浩
2023-03-14

我使用Laravel与postgres和我有这个错误:

SQLSTATE[42883]:未定义的函数: 7错误:函数paymentrun(整数,日期,双精度,文本)不存在LINE 1: SELECT paymentRun(^提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。(SQL: SELECT paymentRun(:buyer_id::整数,:payment_date::DATE,:paid_amount::double精度,: pay详情::文本);)

我有这个功能的地方:编辑::功能要大得多,但我认为它不需要显示

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;');

我做错了什么?我一直试了几次,但没有一次取得了像样的结果。

谢谢

共有1个答案

养聪
2023-03-14

您创建的函数的名称包含双引号和不同的大小写。

CREATE FUNCTION "paymentRun" ...

如果这样做,则在随后处理对象时,大小写很重要。所以你需要改变

DB::select('SELECT paymentRun(

DB::select('SELECT "paymentRun"(

以便正确处理函数。

 类似资料: