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;

RemarqueSyntaxe %TYPE

Cette syntaxe est largement recommandée pour l'affectation depuis une requête.

RemarqueAffectation 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.

RappelBD "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)

ExempleBD "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