Affectation par une requête SELECT INTO
Syntaxe :
1
SELECT propriété1, propriété2, ...2
INTO variable_name1, variable_name2, ...3
FROM relations4
WHERE condition;A condition que la requête ne renvoie qu'un tuple et qu'elle projette autant de propriétés de ce tuple que de variables référencées dans la clause INTO.
Exemple :
1
DECLARE2
v_deptno dept.deptno%TYPE;3
v_loc dept.loc%TYPE;4
BEGIN5
SELECT deptno, loc6
INTO v_deptno, v_loc7
FROM dept8
WHERE dname = 'SALES';
9
...
10
END;Remarque : Syntaxe %TYPE
Cette syntaxe est largement recommandée pour l'affectation depuis une requête.
Remarque : Affectation d'une variable RECORD
Il est possible avec la clause INTO d'affecter des résultats de requête à plusieurs colonnes dans une variable RECORD.
Rappel : BD "Gestion des intervenants" : Schéma relationnel
1
tIntervenant (#pknom:varchar, prenom:varchar, poste:integer)
2
tCours (#pkannee:2000..2100, #pknum:integer, titre:varchar, type:C|TD|TP, fkintervenant=>tIntervenant, debut:date)
Exemple : BD "Gestion des intervenants" : Fonction et affectation par une requête
1
CREATE OR REPLACE FUNCTION fIntervient (pIntervenant VARCHAR2)
2
RETURN VARCHAR2
3
IS4
vNbInterventions NUMBER;5
BEGIN6
SELECT COUNT(fkintervenant) INTO vNbInterventions
7
FROM tCours 8
WHERE fkintervenant=pIntervenant;9
10
IF vNbInterventions > 0 THEN
11
RETURN 'OUI';
12
ELSE13
RETURN 'NON';
14
END IF;
15
END;16
/
17
18
SELECT pknom, fIntervient(pknom) AS I FROM tIntervenant;
1
PKNOM I
2
-------------------- ------
3
CROZAT OUI
4
JOUGLET NON