SQLSTATE [42883]: неопределенная функция Вам может потребоваться добавить явные приведения типов - PullRequest
0 голосов
/ 30 мая 2018

Я использую Laravel с postgres, и у меня появляется эта ошибка:

SQLSTATE [42883]: неопределенная функция: 7 ОШИБКА: функция paymentrun (целое число, дата, двойная точность, текст) не существуетЛИНИЯ 1: ВЫБРАТЬ paymentRun (^ СОВЕТ: ни одна функция не соответствует заданному имени и типу аргумента. Вам может потребоваться добавить явные приведения типов. (SQL: SELECT paymentRun (: customer_id :: integer,: payment_date :: DATE,: paid_amount ::двойная точность: paydetails :: text);)

Где у меня есть эта функция: EDIT :: функция намного больше, но я думаю, что не нужно показывать

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

ИЯ называю fuction следующим образом:

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 Ответ

0 голосов
/ 30 мая 2018

Вы создали функцию с именем в двойных кавычках и в разных случаях.

CREATE FUNCTION "paymentRun" ...

Если вы это сделаете, регистр имеет значение при последующем обращении к объекту.Поэтому вам нужно изменить

DB::select('SELECT paymentRun(

на

DB::select('SELECT "paymentRun"(

, чтобы правильно обратиться к функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...