Auswählen von FROM
einer gespeicherten Prozedur
Eine auswählbare gespeicherte Prozedur ist eine Prozedur, die:
-
enthält mindestens einen Ausgabeparameter und
-
verwendet das Schlüsselwort
SUSPEND
, damit der Aufrufer die Ausgabezeilen einzeln abrufen kann, genau wie bei der Auswahl aus einer Tabelle oder Ansicht.
Die Ausgabeparameter einer auswählbaren gespeicherten Prozedur entsprechen den Spalten einer regulären Tabelle.
Die Auswahl aus einer gespeicherten Prozedur ohne Eingabeparameter entspricht der Auswahl aus einer Tabelle oder Ansicht:
select * from suspicious_transactions
where assignee = 'John'
Alle erforderlichen Eingabeparameter müssen nach dem Prozedurnamen in Klammern angegeben werden:
select name, az, alt from visible_stars('Brugge', current_date, '22:30')
where alt >= 20
order by az, alt
Werte für optionale Parameter (dh Parameter, für die Standardwerte definiert wurden) können weggelassen oder bereitgestellt werden.Wenn Sie sie jedoch nur teilweise bereitstellen, müssen sich die weggelassenen Parameter alle am Ende befinden.
Angenommen, die Prozedur visible_stars
aus dem vorherigen Beispiel hat zwei optionale Parameter: min_magn
(numeric(3,1)
) und spectral_class
(varchar(12)
), sind die folgenden Abfragen gültig:
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, '22:30', 4.0, 'G');
Dies ist jedoch nicht der Fall, da die Parameterliste ein “hole” enthält:
select name, az, alt
from visible_stars('Brugge', current_date, '22:30', 'G');
Ein Alias für eine auswählbare gespeicherte Prozedur wird nach der Parameterliste angegeben:
select
number,
(select name from contestants c where c.number = gw.number)
from get_winners('#34517', 'AMS') gw
Wenn Sie auf einen Ausgabeparameter (“column”) verweisen, indem Sie ihn mit dem vollständigen Prozedurnamen qualifizieren, sollte der Prozeduralias weggelassen werden:
select
number,
(select name from contestants c where c.number = get_winners.number)
from get_winners('#34517', 'AMS')