У меня есть процедура:
CREATE OR REPLACE FUNCTION func()
RETURNS SETOF bigint AS
$BODY$
DECLARE
rowsQuantity bigint;
BEGIN
return query select p.id from product p where...;
GET DIAGNOSTICS rowsQuantity = ROW_COUNT;
if(rowsQuantity < 8) then
return query select p.id from product p where p.id not in (ids from prev query) limit 8 - rowsQuantity;
end if;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
Мой вопрос: как получить идентификатор из первого запроса, чтобы использовать его во втором запросе, или, может быть, я могу как-то объявить переменную и выбрать идентификатор этой переменной из первого запроса, а затем использовать эту переменную во втором запросе? Я не могу найти решение для моей задачи... помогите мне, пожалуйста
Я использую Postgresql версии 9.3.6.
Что именно ты пытаешься сделать? Вся функция кажется слишком сложной. Это, вероятно, можно было бы сделать с помощью всего одного запроса, если вы сообщите нам основную проблему, которую вы пытаетесь решить. Отредактируйте свой вопрос, добавьте некоторые образцы данных и ожидаемый результат на основе этих данных. – a_horse_with_no_name 3 минуты назад
Моя процедура должна возвращать 8 записей, первый запрос имеет много условий (и из-за этих условий набор результатов ROW COUNT может быть меньше 8 записей), поэтому мне нужно проверить, меньше ли ROW COUNT первого запроса 8 записей, я должен добавить записи для набора результатов из другого запроса, но мне нужно избегать дубликатов, второй запрос должен возвращать 0...8 строк (зависит от первого запроса), но без дубликатов из первого запроса, поэтому мне нужны идентификаторы из первого запроса
звучит просто выберите отличный p.id от продукта p, где... limit 8; сделал бы работу
Нет, второй запрос содержит записи (с идентификаторами), которые я получил из первого запроса, DISTINCT во втором запросе не помогает
select distinct p.id from product p where... limit 8;
справится с этой задачей - person a_horse_with_no_name   schedule 12.12.2015