Ошибка Postgres: ни одна процедура не соответствует заданному имени и типам аргументов. Возможно, вам потребуется добавить явное приведение типов

Я знаю, что этот вопрос задавался много раз, однако я не могу понять, что не так, несмотря на то, что следую ответам SO. Буду признателен за помощь, так как я новичок в PostgreSQL. Вот шаги, которые я выполнил.

  1. Используя pgadmin4, я создал базу данных. Оттуда я щелкнул правой кнопкой мыши процедуры и создал новую процедуру с помощью графического интерфейса. Я установил язык как SQL на вкладке определения, а затем написал следующий код на вкладке кода.
CREATE OR REPLACE PROCEDURE f_data(IN arg1 integer, IN arg2 integer)
    
LANGUAGE sql
AS $$
INSERT INTO tbl (col1, col2) VALUES (arg1, arg2);
$$;
  1. Нажатие кнопки «Сохранить» не вызвало никаких ошибок, поэтому я щелкнул правой кнопкой мыши только что созданную процедуру, а затем в меню сценариев выбрал «Сценарий EXEC». Это сгенерировало следующий код
CALL public.f_data(1, 2)

Выполнение этого вызвало следующее заявление об ошибке

ERROR:  procedure public.f_data(integer, integer) does not exist
LINE 1: CALL public.f_data(1::integer, 2::integer)
             ^
HINT:  No procedure matches the given name and argument types. You might need to add explicit type casts.
SQL state: 42883
Character: 6

я тоже пробовал

CALL public.f_data(1::integer, 2::integer)

Получил ту же ошибку, упомянутую выше.

Где я ошибаюсь? Отметит ответ как принятый только с четко подробными шагами.

Ваш код выглядит просто отлично. Возможно, процедура создается в другой схеме? Чтобы убедиться, попробуйте: CREATE OR REPLACE PROCEDURE public.f_data(IN arg1 integer, IN arg2 integer). Это решает вашу проблему? dbfiddle.uk/MTkiWpIg

Jim Jones 12.01.2023 11:46

@JimJones Спасибо за ваш комментарий. Однако дело было в другом. Я решил это и разместил ответ ниже.

Lihka_nonem 12.01.2023 12:05
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я смог решить проблему. Использование графического интерфейса для создания процедуры — ужасный способ ведения дел. Я понял, что GUI предлагает еще 2 вкладки - параметры и SQL. Быстрая проверка вкладки SQL выявила следующий код.

CREATE OR REPLACE PROCEDURE public.f_data()
    LANGUAGE sql
    
AS $$
    CREATE OR REPLACE PROCEDURE f_data(IN arg1 integer, IN arg2 integer)
    LANGUAGE sql
    INSERT INTO tbl (col1, col2) VALUES (arg1, arg2);
$$;

По сути, код, который я написал в разделе кода графического интерфейса, в конечном итоге был включен в тело хранимой процедуры. Вы также можете заметить, что первая строка кода не имеет параметров. Я попытался добавить параметры с помощью вкладки параметров, однако, похоже, что пользовательские параметры не разрешены.

В любом случае, я отказался от идеи использовать графический интерфейс для создания процедуры, открыл новый редактор запросов и написал тот же код, который я разместил в вопросе, и на этот раз он сработал.

РЕДАКТИРОВАТЬ

Если вы хотите установить входные параметры для хранимой процедуры с помощью графического интерфейса, вы должны сделать это на вкладке определения.

Другие вопросы по теме