Хранимые процедуры PostgreSQL - PullRequest
0 голосов
/ 29 сентября 2019

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

userid - это параметр.

В PostgreSQL при создании sp я также создаю аргумент IN с теми же параметрами и именем.

Чего мне здесь не хватает?

sql прост:

select * from public.users u where u.userid = userid.

Ответы [ 2 ]

0 голосов
/ 01 октября 2019

Вы указали, что «создаете аргумент IN с теми же (t) ype и именем».Это не совсем то, что вы хотите сделать.Хотя вы хотите, чтобы тип был одинаковым, имя должно отличаться или квалифицироваться по имени функции.Если это то же самое, вы получите все строки, так как предполагаемое имя параметра будет интерпретировано как имя столбца;в основном это приводит к:

Select * from table_name where column_name = column_name;

Что верно, когда значение не равно нулю.Теперь есть 2 подхода, использующие ID пользователя и предполагающие его уникальный:

create or replace function get_user(userid_in users.userid%type)
returns setof users
language sql
as $$
    select *
      from users where userid = userid_in ; 
$$;

ИЛИ

create or replace function get_user(userid users.userid%type)
returns setof users
language sql
as $$
    select *
      from users where userid = get_user.userid ; 
$$;
0 голосов
/ 29 сентября 2019

используйте его для определения параметра в SQL:


Select * from public.users u where u.userid = @userid

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