T2 Module00 PL SQL
T2 Module00 PL SQL
T2 Module00 PL SQL
Questions
1. Une table peut-elle avoir plusieurs clés primaires ?
2. Une table peut-elle avoir une contrainte unique si elle possède déjà une clé
primaire ?
3. Une table qui possède une clé étrangère est-elle une table enfant ou une table
parent ?
4. Que signifie LMD ?
5. Que signifie LDD ?
6. Quels sont les types d’instructions qui ne peuvent être exécutés en PL/SQL ?
7. Quels sont les avantages du langage PL/SQL par rapport au SQL ?
8. Pour configurer le client, lequel de ces fichiers utilisez-vous?
A. init.ora
B. sqlnet.ora
C. listener.ora
D. tnsnames.ora
9. Quel est le répertoire où se trouvent les fichiers de configuration ?
A. %ORACLE_HOME%\admin\network
B. %ORACLE_HOME%\network\admin
C. %ORACLE_HOME%\net90\admin
Exercice n° 1 Installation
Installez Oracle XE sur votre machine en tenant compte de votre système
d’exploitation.
Questions
1. Quel est l'outil que vous retrouvez sur chaque serveur de base de données
installée ?
A. SQL*Plus.
B. iSQL*Plus.
C. SQL*Plus Worksheet
D. Oracle Enterprise Manager.
2. SQL*Plus est-il un langage ou un environnement ?
3. Pour utiliser iSQL*Plus sur une machine distante, avez-vous besoin d'installer
le client Oracle ?
4. Quelle est la commande qui vous permet de vous connecter ?
5. Dans la syntaxe de démarrage de SQL*Plus, pouvez-vous lancer l’exécution
d’un script ?
6. Quelle est la commande qui vous permet de stocker dans un fichier tout ce qui
est affiché à l’écran ?
7. Dans l’environnement SQL*Plus, peut-on exécuter des commandes du système
d’exploitation ?
8. Citez trois types de paramètres de mise en forme des résultats des requêtes.
9. Quelle est la commande qui vous permet de décrire la structure d’une vue ?
Répertoire de C:\
C:\>unzip Oracle12cSQL_PLSQL.zip
Archive: Oracle12cSQL_PLSQL.zip
creating: Oracle12cSQL_PLSQL/
inflating: Oracle12cSQL_PLSQL/DeleteEnvStagiaireXE.sql
inflating: Oracle12cSQL_PLSQL/InitEnvEtoileXE.sql
inflating: Oracle12cSQL_PLSQL/InitEnvStagiaireXE.sql
creating: Oracle12cSQL_PLSQL/stagiaire/
inflating: Oracle12cSQL_PLSQL/stagiaire/CATEGORIES.DAT
inflating: Oracle12cSQL_PLSQL/stagiaire/CLIENTS.DAT
inflating: Oracle12cSQL_PLSQL/stagiaire/COMMANDES.DAT
inflating: Oracle12cSQL_PLSQL/stagiaire/COMMANDES_2009.DAT
inflating: Oracle12cSQL_PLSQL/stagiaire/DETAILS_COMMANDES.DAT
inflating: Oracle12cSQL_PLSQL/stagiaire/DETAILS_COMMANDES_2009.DAT
inflating: Oracle12cSQL_PLSQL/stagiaire/DIM_TEMPS.DAT
inflating: Oracle12cSQL_PLSQL/stagiaire/EMPLOYES.DAT
inflating: Oracle12cSQL_PLSQL/stagiaire/FOURNISSEURS.DAT
inflating: Oracle12cSQL_PLSQL/stagiaire/PRODUITS.DAT
inflating: Oracle12cSQL_PLSQL/stagiaire/STATISTIQUES.DAT
C:\>cd Oracle12cSQL_PLSQL
C:\Oracle12cSQL_PLSQL>dir
Répertoire de C:\Oracle12cSQL_PLSQL
Exercice n° 2 Connexion
Démarrez SQL*Plus, en ligne de commande, avec le nom d’utilisateur du schéma
exemples « STAGIAIRE » et son mot de passe « PWD ».
Démarrez SQL Developer et paramétrez la connexion à la base de données.
Questions
1. Quelles sont les sections qui font partie d’un bloc ?
2. Quel est le rôle de la section « DECLARE » ?
3. Quelles sont les syntaxes incorrectes ?
A. declare begin NULL;begin NULL;begin NULL;
end;end;end;
B. declare NULL;begin NULL;begin NULL;end;end;end;
C. declare begin NULL;begin NULL;begin NULL;end;end;
D. declare begin NULL;begin begin NULL;end;end;end;
E. declare begin NULL;begin NULL;begin NULL;
end;NULL;end;NULL;end;
4. Quel est le symbole de fin d’instruction en PL/SQL ?
A. .
B. :
C. ;
D. !
5. Quelles sont les syntaxes qui représentent des commentaires en PL/SQL ?
A. /* Commentaire */
B. -- Commentaire --
C. ' Commentaire '
D. " Commentaire "
6. Quelle est la signification la syntaxe suivante :
« PRAGMA AUTONOMOUS_TRANSACTION » ?
Questions
1. Quelles sont les déclarations invalides ?
A. nom_varA NUMBER(8) DEFAULT 10 ;
B. nom_var1, nom_var2 DATE;
C. nom_var VARCHAR2(20) NOT NULL ;
D. nom_var BOOLEAN := 1;
E. nom_var BINARY_INTEGER;
F. 2nom_var BINARY_INTEGER;
G. a$nom_varG DATE := '01/01/2006';
H. B#a$nom_var DATE NOT NULL := SYSDATE;
I. nom_varI NUMBER(3):= 123.45678;
J. nom_var NUMBER(3) := 1234.5678;
K. nom_varK CONSTANT NUMBER(12,3) := 1234.5678;
2. Quel est le résultat de la requête suivante ?
SQL> declare
2 utilisateur varchar2(50) := '1 :'||USER;
3 begin
4 declare
5 utilisateur varchar2(50) := '2 :'||USER;
6 begin
7 declare
8 utilisateur varchar2(50) := '3 :'||USER;
9 begin
10 dbms_output.put_line( utilisateur);
11 end;
12 end;
13 end;
14 /
A. '1 :STAGIAIRE'
B. '2 :STAGIAIRE'
C. '3 :STAGIAIRE'
3. Quelles sont les syntaxes correctes ?
A. declare v_1 NUMBER(8,2) := 2500;
begin v_1 = v_1 * 2; end;
B. declare v_1 date;
begin v_1 := sysdate; end;
C. declare v_1 constant date;
begin v_1 := sysdate; end;
Questions
1. Quelles sont les déclarations invalides ?
A. declare SUBTYPE Numeral IS NUMBER(1,0); v_1 Numeral;
begin v_1 := 1; end;
B. declare SUBTYPE v_1 IS TIMESTAMP;
begin v_1:= SYSTIMESTAMP; end;
C. declare v_1 DIM_TEMPS.JOUR%TYPE;
begin v_1:= SYSDATE; end;
D. declare v_1 DIM_TEMPS%ROWTYPE;
begin v_1.JOUR:= SYSDATE; end;
E. declare v_1 DIM_TEMPS%ROWTYPE; begin v_1:= SYSDATE; end;
F. declare TYPE var IS VARRAY(3) OF NVARCHAR2(30);
v_1 var:= var('BIZOÏ','FABER'); begin null; end;
G. declare TYPE var IS RECORD ( A VARCHAR2(3) := 'AA',
B VARCHAR2(3) := 'BB'); v_1 var; begin null; end;
H. declare TYPE var IS TABLE OF DATE INDEX
BY BINARY_INTEGER; v_1 var;begin v_1(1):=sysdate; end;
I. declare v_1 DIM_TEMPS.JOUR%TYPE :=
ADD_MONTHS( TRUNC(SYSDATE,'MONTH'),1);begin null; end;
J. declare v_1 CLIENTS%ROWTYPE; begin
v_1.CODE_CLIENT := 'AA'; v_1.SOCIETE := 'BB';end;
K. declare TYPE var IS TABLE OF DATE INDEX BY
VARCHAR2(2); v_1 var; begin null; end;
2. Quelles est le type de retour de chaque expression suivante :
A. 256*2 + EXTRACT(YEAR FROM SYSDATE)
B. 1024||SYSDATE||USER
C. SYSDATE > '01/07/2006'
D. 2.5*2.5/0f + 10
E. INSTR('QUANTITE','T')*256
F. SYSDATE - ROUND(TRUNC(MOD(1600,10),-1),2)
G. 2.5D*256+10
H. 2.5f/0||USER
I. SYSDATE + 3070 + 2.5f
Questions
1. Sachant que les expressions doivent remplacer les trois points dans le bloc
suivant, quelles sont les expressions invalides ?
declare
v_1 EMPLOYES%ROWTYPE;
TYPE TAB IS TABLE OF EMPLOYES%ROWTYPE
INDEX BY BINARY_INTEGER;
t_1 TAB;
begin
SELECT * INTO v_1 FROM EMPLOYES WHERE NO_EMPLOYE = 5;
end;
/
A. SELECT * INTO v_1 FROM EMPLOYES WHERE NO_EMPLOYE = 5;
B. UPDATE EMPLOYES SET ROW = v_1 WHERE NO_EMPLOYE = 5;
C. SELECT count(*) INTO v_1 FROM EMPLOYES WHERE 1 = 2;
D. SELECT * INTO v_1 FROM EMPLOYES WHERE 1 = 2;
E. SELECT * INTO v_1 FROM EMPLOYES;
F. SELECT * BULK COLLECT INTO t_1 FROM EMPLOYES;
G. v_1.NO_EMPLOYE:=100;INSERT INTO EMPLOYES VALUES v_1;
H. v_1.NO_EMPLOYE:=100;INSERT INTO EMPLOYES
VALUES ( v_1.NO_EMPLOYE, v_1.REND_COMPTE, v_1.NOM,
v_1.PRENOM, v_1.FONCTION, v_1.TITRE, v_1.DATE_NAISSANCE,
v_1.DATE_EMBAUCHE, v_1.SALAIRE, v_1.COMMISSION);
2. Sachant que les variables ont été déclarées auparavant, qu’elles sont du bon type
et au bon endroit, quels sont les ordres de mise à jour incorrects ?
A. INSERT INTO CATEGORIES VALUES ( 9,'Fruits',
'Fruits') RETURNING ROWID INTO v_rowid;
B. INSERT INTO CATEGORIES VALUES ( 9,'Fruits',
'Fruits') RETURNING * INTO v_cat;
C. UPDATE COMMANDES SET PORT = PORT * 1.05
RETURNING NO_COMMANDE BULK COLLECT INTO v_comm;
D. DELETE CATEGORIES WHERE ROWID = v_1
RETURNING CODE_CATEGORIE INTO v_cat;
E. UPDATE CATEGORIES SET NOM_CATEGORIE = DESCRIPTION
WHERE ROWID = v_1 RETURNING NOM_CATEGORIE
INTO v_cat;
F. UPDATE COMMANDES SET PORT = PORT * 1.05
RETURNING NO_COMMANDE INTO v_comm;
G. DELETE INDICATEURS RETURNING ROWID
BULK COLLECT INTO v_rowid;
Questions
1. Quel est l’affichage suite à l’exécution de ce bloc ? Argumentez votre
réponse.
SQL> declare
2 v_sql_dynamique VARCHAR2(200) :='CREATE TABLE SAV_CAT AS '||'
3 SELECT * FROM CATEGORIES WHERE 1=2' ;
4 v_count NUMBER(5);
5 begin
6 EXECUTE IMMEDIATE v_sql_dynamique;
7 SELECT COUNT(*) INTO v_count FROM CATEGORIES;
8 dbms_output.put_line( 'Enregistrements : '|| v_count);
9 INSERT INTO SAV_CAT SELECT * FROM CATEGORIES
10 SELECT COUNT(*) INTO v_count FROM SAV_CAT;
11 dbms_output.put_line( 'Enregistrements : '|| v_count);
12 end;
13 /
A. Enregistrements : 9 9
B. Enregistrements : 9 0
C. Enregistrements : 9
D. Enregistrements :
E. ERREUR à la ligne 10 : ...
2. Pour laquelle de ces exécutions, 'v_sql' ne peut pas être un bloc
PL/PLSQ ?
A. EXECUTE IMMEDIATE v_sql USING v_1, v_2
RETURNING BULK COLLECT INTO v_tab;
B. EXECUTE IMMEDIATE v_sql USING
IN v_1, IN v_2, OUT v_3;
C. EXECUTE IMMEDIATE v_sql USING v_1, v_2;
D. EXECUTE IMMEDIATE v_sql;
Questions
1. Quelles sont les instructions de contrôle structurellement invalides ?
A. if CONDITION then EXPRESSION end if;
B. if CONDITION then EXPRESSION elsif CONDITION
then EXPRESSION else EXPRESSION end if;
C. if CONDITION then EXPRESSION else if CONDITION
then EXPRESSION else EXPRESSION end if; end if;
D. if CONDITION then EXPRESSION else if CONDITION
then EXPRESSION else EXPRESSION end if;
E. if CONDITION then EXPRESSION else EXPRESSION endif;
F. case EXPRESSION when 1 then EXPRESSION
when 2 then EXPRESSION else EXPRESSION end case;
G. case EXPRESSION when 1 then EXPRESSION
when 2 then EXPRESSION else EXPRESSION endcase;
H. case EXPRESSION when CONDITION then EXPRESSION
else EXPRESSION end case;
I. case when CONDITION then EXPRESSION
when CONDITION then EXPRESSION else EXPRESSION end case;
J. case when CONDITION then EXPRESSION
when 1 then EXPRESSION else EXPRESSION end case;
2. Quelles sont les instructions de contrôle structurellement invalides ?
A. while CONDITION loop
CONDITION:= NOT CONDITION; end loop;
B. while CONDITION
CONDITION:= NOT CONDITION; end loop;
C. while CONDITION loop
CONDITION:= NOT CONDITION; endloop;
D. loop exit; end loop;
E. whileloop exit; end loop;
F. loop exit; when CONDITION; end loop;
G. loop exit when CONDITION; end loop;
H. <<B01>>loop exit B01 when CONDITION; end loop;
I. for i in 1..3 loop NULL; end loop;
J. for i in 1 3 loop NULL; end loop;
K. for i in 1..3 NULL; end loop;
L. for i in 1..3 loop NULL; endloop;
M. forall i in 1..3 ORDRE_DML;
Questions
SQL> declare
2 CURSOR c_1 IS SELECT * FROM PRODUITS;
3 v_1 c_1%ROWTYPE;
4 begin
5 /*A*/if c_1%FOUND then
6 dbms_output.put_line('/*A*/ %FOUND'); end if;
7 /*B*/if c_1%ISOPEN then
8 dbms_output.put_line('/*B*/ %ISOPEN'); end if;
9 /*C*/if c_1%NOTFOUND then
10 dbms_output.put_line('/*C*/ %NOTFOUND');end if;
11 /*D*/if c_1%ROWCOUNT >0 then
12 dbms_output.put_line('/*D*/ %ISOPEN'); end if;
13 open c_1;
14 /*E*/if c_1%FOUND then
15 dbms_output.put_line('/*E*/ %FOUND'); end if;
16 /*F*/if c_1%ISOPEN then
17 dbms_output.put_line('/*F*/ %ISOPEN'); end if;
18 /*G*/if c_1%NOTFOUND then
19 dbms_output.put_line('/*G*/ %NOTFOUND');end if;
20 /*H*/if c_1%ROWCOUNT = 0 then
21 dbms_output.put_line('/*H*/ %ROWCOUNT'); end if;
22 loop
23 fetch c_1 into v_1;
24 exit when c_1%NOTFOUND;
25 end loop;
26 /*I*/if c_1%FOUND then
27 dbms_output.put_line('/*I*/ %FOUND'); end if;
28 /*J*/if c_1%ISOPEN then
29 dbms_output.put_line('/*J*/ %ISOPEN'); end if;
30 /*K*/if c_1%NOTFOUND then
31 dbms_output.put_line('/*K*/ %NOTFOUND');end if;
32 /*L*/if c_1%ROWCOUNT >0 then
33 dbms_output.put_line('/*L*/ %ROWCOUNT'); end if;
34 close c_1;
35 /*M*/if c_1%FOUND then
36 dbms_output.put_line('/*M*/ %FOUND'); end if;
37 /*N*/if c_1%ISOPEN then
38 dbms_output.put_line('/*N*/ %ISOPEN'); end if;
39 /*O*/if c_1%NOTFOUND then
40 dbms_output.put_line('/*O*/ %NOTFOUND');end if;
41 /*P*/if c_1%ROWCOUNT >0 then
42 dbms_output.put_line('/*P*/ %ISOPEN'); end if;
43 end;
44 /
1. Quelles sont les instructions qui génèrent une erreur due à une lecture des
attributs du curseur ?
2. Si on efface les instructions qui génèrent une erreur, quelles sont les autres
instructions qui valident la condition et affichent la chaine avec leur lettre et
leur attribut ?
Questions
SQL> declare
2 EXCEPTION_1 EXCEPTION;
3 EXCEPTION_2 EXCEPTION;
4 EXCEPTION_3 EXCEPTION;
5 EXCEPTION_4 EXCEPTION;
6 EXCEPTION_5 EXCEPTION;
7 begin --bloc 1
8 begin --bloc 2
9 begin --bloc 3
10 begin --bloc 4
11 begin --bloc 5
12 RAISE EXCEPTION_5;
13 dbms_output.put_line( 'Suite traitements bloc 5.');
14 exception--exception bloc 5
15 when EXCEPTION_5 then
16 dbms_output.put_line( 'Exception EXCEPTION_5');
17 RAISE EXCEPTION_4;
18 end;--end bloc 5
19 dbms_output.put_line( 'Suite traitements bloc 4.');
20 exception--exception bloc 4
21 when EXCEPTION_4 then
22 dbms_output.put_line( 'Exception EXCEPTION_4');
23 RAISE EXCEPTION_3;
24 end;--end bloc 4
25 dbms_output.put_line( 'Suite traitements bloc 3.');
26 exception--exception bloc 3
27 when EXCEPTION_3 then
28 dbms_output.put_line( 'Exception EXCEPTION_3');
29 RAISE EXCEPTION_2;
30 end;--end bloc 3
31 dbms_output.put_line( 'Suite traitements bloc 2.');
32 exception--exception bloc 2
33 when EXCEPTION_2 then
34 dbms_output.put_line( 'Exception EXCEPTION_2');
35 RAISE EXCEPTION_1;
36 end;--end bloc 2
37 dbms_output.put_line( 'Suite traitements bloc 1.');
38 exception--exception bloc 1
39 when EXCEPTION_1 then
40 dbms_output.put_line( 'Exception EXCEPTION_1');
41 when OTHERS then
42 dbms_output.put_line( 'Une autre erreur.');
43 end;--end bloc 1
44 /
1. Quel est l’affichage effectué par le bloc suite au traitement ?
A.
Exception EXCEPTION_5
Suite traitements bloc 4.
Exception EXCEPTION_4
Suite traitements bloc 3.
Exception EXCEPTION_3
Suite traitements bloc 2.
Exception EXCEPTION_2
Suite traitements bloc 1.
Exception EXCEPTION_1
B.
Exception EXCEPTION_5
Suite traitements bloc 4.
Suite traitements bloc 3.
Suite traitements bloc 2.
Suite traitements bloc 1.
C.
Exception EXCEPTION_5
Exception EXCEPTION_4
Exception EXCEPTION_3
Exception EXCEPTION_2
Exception EXCEPTION_1
D.
Suite traitements bloc 5.
Suite traitements bloc 4.
Suite traitements bloc 3.
Suite traitements bloc 2.
Suite traitements bloc 1.
E.
Une autre erreur.
VALUE_ERROR,
ZERO_DIVIDE
Suivant les choix à l’exécution, par la saisie d’une variable de substitution, vous
exécutez le code erroné qui passe directement à la section de l’'exception choisie
du programme qui affiche le nom de l’exception.
Questions
SQL> declare
2 PROCEDURE ProcedureA IS
3 begin
4 dbms_output.put_line( 'ProcedureA');
5 ProcedureB;
6 end;
7 PROCEDURE ProcedureB IS
8 begin
9 dbms_output.put_line( 'ProcedureB');
10 end;
11 begin
12 ProcedureA;
13 end;
14 /
1. Le bloc précédent peut-il être compilé ? justifiez votre réponse.
2. Quelles sont les syntaxes invalides ?
A. PROCEDURE p1( a_1 NUMBER ) IS declare
a_1 := 0; end;
B. PROCEDURE p1( a_1 IN OUT NUMBER ) IS
declare a_1 := 0; end;
C. PROCEDURE p1( a_1 OUT NUMBER ) IS
declare a_1 := 0; end;
D. PROCEDURE p1( a_1 IN NUMBER ) IS
declare a_1 := 0; end;
SQL> CREATE OR REPLACE PROCEDURE
2 p1( a_1 NUMBER := 0, a_2 NUMBER := 0,a_3 NUMBER := 0) IS
3 begin
4 dbms_output.put_line( a_1||' '||a_2||' '||a_3);
5 end;
6 /
3. Quelles sont les syntaxes qui affichent la chaîne suivante '1 2 0' ?
A. exec p1;
B. exec p1(1,2,3);
C. exec p1(1,2);
D. exec p1(3);
E. exec p1(a_3 => 3,a_1 => 1);
F. exec p1(a_2 => 3,a_1 => 1);
G. exec p1(a_3 => 0,a_1 => 1,a_2 => 2);
H. exec p1(a_1 => 3,a_2 => 2,a_3 => 1);
Effacez d’abord les enregistrements, puis insérez les dans les sept tables du
modèle étoile :
QUANTITES_CLIENTS,
VENTES_CLIENTS,
VENTES_ANNEES,
VENTES_MOIS
VENTES_CLIENTS_2009
VENTES_CLIENTS_2010
VENTES_CLIENTS_2011
Questions
Questions
1. Quels sont les déclencheurs qui peuvent être compilés ?
A. CREATE OR REPLACE TRIGGER T1 BEFORE UPDATE
ON CATEGORIES BEGIN
:new.DESCRIPTION := 'DESCRIPTION'; END T1;
B. CREATE OR REPLACE TRIGGER T2 AFTER UPDATE
ON CATEGORIES BEGIN
:new.DESCRIPTION := 'DESCRIPTION'; END T2;
C. CREATE OR REPLACE TRIGGER T3 BEFORE UPDATE
ON CATEGORIES FOR EACH ROW BEGIN
:new.DESCRIPTION := 'DESCRIPTION'; END T3;
D. CREATE OR REPLACE TRIGGER T4 AFTER UPDATE
ON CATEGORIES FOR EACH ROW BEGIN
:new.DESCRIPTION := 'DESCRIPTION'; END T4;
E. CREATE OR REPLACE TRIGGER T5 BEFORE INSERT
ON CATEGORIES FOR EACH ROW BEGIN
:old.DESCRIPTION := 'DESCRIPTION'; END T5;
F. CREATE OR REPLACE TRIGGER T6 AFTER INSERT
ON CATEGORIES FOR EACH ROW BEGIN
:old.DESCRIPTION := 'DESCRIPTION'; END T6;
G. CREATE OR REPLACE TRIGGER T8 AFTER INSERT
ON CATEGORIES FOR EACH ROW DECLARE a NUMBER;
BEGIN a:= :old.DESCRIPTION; END T8;
H. CREATE OR REPLACE TRIGGER T9 BEFORE INSERT
ON CATEGORIES FOR EACH ROW DECLARE a NUMBER;
BEGIN a:= :old.DESCRIPTION; END T9;
Questions
1. Quels sont les déclencheurs qui peuvent être compilés ?
A. CREATE OR REPLACE TYPE T1 IS OBJECT
( a1 CLIENTS.TELEPHONE%TYPE, a2 VARCHAR2(24));
B. CREATE OR REPLACE TYPE T1 IS OBJECT
( a1 NUMBER(1), a2 ROWID);
C. CREATE OR REPLACE TYPE T1 IS OBJECT
( a1 NUMBER(1));
D. CREATE OR REPLACE TYPE T1 IS OBJECT
( a1 LONG, a2 VARCHAR2(24));
E. CREATE OR REPLACE TYPE T1 IS OBJECT
( a1 NUMBER(1), a2 BOOLEAN);
F. CREATE OR REPLACE TYPE T1 IS OBJECT
( a1 NUMBER(1), a2 VARCHAR2(24));
SQL> CREATE OR REPLACE TYPE T1 IS OBJECT
2 ( a1 NUMBER(1), a2 NUMBER(1),
3 CONSTRUCTOR FUNCTION T1( a1 NUMBER) RETURN SELF AS RESULT,
4 MEMBER PROCEDURE m1);
5 /
Type créé.