Affectation par une requête SELECT INTO
Syntaxe :
1
SELECT propriété1, propriété2, ...
2
INTO variable_name1, variable_name2, ...
3
FROM relations
4
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
DECLARE
2
v_deptno dept.deptno%TYPE;
3
v_loc dept.loc%TYPE;
4
BEGIN
5
SELECT deptno, loc
6
INTO v_deptno, v_loc
7
FROM dept
8
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
IS
4
vNbInterventions NUMBER;
5
BEGIN
6
SELECT COUNT(fkintervenant) INTO vNbInterventions
7
FROM tCours
8
WHERE fkintervenant=pIntervenant;
9
10
IF vNbInterventions > 0 THEN
11
RETURN 'OUI';
12
ELSE
13
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