Выборка из селективной хранимой процедуры
Селективная хранимая процедура (т.е.с возможностью выборки) должна удовлетворять следующим условиям:
-
Содержать, по крайней мере, один выходной параметр;
-
Использовать ключевое слово
SUSPEND
таким образом, чтобы вызывающий запрос могу выбирать выходные строки одну за другой, так же как выбираются строки таблицы или представления.
Выходные параметры селективной хранимой процедуры с точки зрения команды SELECT
соответствуют полям обычной таблицы.
Выборка из хранимой процедуры без входных параметров осуществляется точно так же, как обычная выборка из таблицы:
SELECT *
FROM suspicious_transactions
WHERE assignee = 'Dmitrii'
Если хранимая процедура требует входные параметры, то они должны быть указаны в скобках после имени процедуры:
SELECT name, az, alt
FROM visible_stars('Brugge', current_date, '22:30')
WHERE alt >= 20
ORDER BY az, alt
Значения для опциональных параметров, то есть параметров, для которых определены значения по умолчанию, могут быть указаны или опущены.
Однако если параметры задаются частично, то пропущенные параметры должны быть в конце перечисления внутри скобок.
Если предположить, что процедура visible_stars из предыдущего примера имеет два опциональных параметра spectral_class (varchar(12)) и min_magn (numeric(3,1)), то следующие команды будут корректными:
SELECT name, az, alt
FROM visible_stars('Brugge', current_date, '22:30')
SELECT name, az, alt
FROM visible_stars('Brugge', current_date, '22:30', 4.0)
А вот этот запрос не будет корректным:
SELECT name, az, alt
FROM visible_stars('Brugge', current_date, 4.0)
Алиас для селективной хранимой процедуры указывается после списка параметров:
SELECT
number,
(SELECT name FROM contestants c
WHERE c.number = gw.number)
FROM get_winners('#34517', 'AMS') gw
Если вы указываете поле (выходной параметр) с полным именем процедуры, не включайте в это имя список параметров процедуры:
SELECT number,
(SELECT name FROM contestants c
WHERE c.number = get_winners.number)
FROM get_winners('#34517', 'AMS')