#postgresql #postgresql-9.5
Вопрос:
В следующем SQL мне нужно проверить, возвращено ли более одной записи из предложения select.
_персонал.длина не работает, между тем, я не могу выбрать count(*) в другую переменную. Как мне узнать, сколько строк вернулось в поле «Выбрать»?
create or replace function search_users(partial_name text) returns setof text as $ declare _person record; begin select * into _person from users where name ~ partial_name; if not found then return next 'No matching user'; elsif _person.length gt; 1 then return next 'Ambiguous user name'; else return next _person.name; end if; end; $ language plpgsql;
Ответ №1:
Если ваш запрос возвращает более одной строки, вы получите сообщение об ошибке из-за INTO _person
предложения, которое не может получить набор записей. Вместо этого вы можете объединить полученные строки в массив, а затем проверить длину массива :
create or replace function search_users(partial_name text) returns text as $ declare _person text[] ; begin select string_agg(name) into _person from users where name ~ partial_name; if not found then return next 'No matching user'; elsif array_length(_person, 1) gt; 1 then return next 'Ambiguous user name'; else return next _person[1] ; end if; end; $ language plpgsql;