Sélection à partir d’une procédure stockée sélective
Une procédure stockée sélective (c’est-à-dire sélectionnable) doit satisfaire aux conditions suivantes :
-
Il doit contenir au moins un paramètre de sortie ; * Il doit utiliser le mot-clé
SUSPEND
afin que l’appelant puisse sélectionner les lignes de sortie une par une, tout comme les lignes d’une table ou d’une vue sont sélectionnées.
Les paramètres de sortie d’une procédure stockée sélective en termes de commande SELECT
correspondent aux champs d’une table normale.
La sélection dans une procédure stockée sans paramètres d’entrée se fait de la même manière que la sélection dans une table :
SELECT *
FROM suspicious_transactions
WHERE assignee = 'Dmitrii'
Si la procédure stockée nécessite des paramètres d’entrée, ceux-ci doivent être spécifiés entre parenthèses après le nom de la procédure :
SELECT name, az, alt
FROM visible_stars('Brugge', current_date, '22:30')
WHERE alt >= 20
ORDER BY az, alt
Les valeurs des paramètres facultatifs (c’est-à-dire les paramètres pour lesquels des valeurs par défaut sont définies) peuvent être spécifiées ou omises.
Toutefois, si les paramètres sont partiellement spécifiés, les paramètres omis doivent se trouver à la fin de l’énumération, à l’intérieur des parenthèses.
En supposant que la procédure visible_stars de l’exemple précédent possède deux paramètres optionnels spectral_class (varchar(12)) et min_magn (numeric(3,1)), les commandes suivantes seront correctes :
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)
Cette demande, en revanche, ne serait pas correcte :
SELECT name, az, alt
FROM visible_stars('Brugge', current_date, 4.0)
L’alias de la procédure stockée sélective est spécifié après la liste des paramètres :
SELECT
number,
(SELECT name FROM contestants c
WHERE c.number = gw.number)
FROM get_winners('#34517', 'AMS') gw
Si vous spécifiez un champ (paramètre de sortie) avec le nom complet de la procédure, n’incluez pas la liste des paramètres de la procédure dans ce nom :
SELECT number,
(SELECT name FROM contestants c
WHERE c.number = get_winners.number)
FROM get_winners('#34517', 'AMS')