La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

IFT2821 Base de données Chapitre 6 SQL

Présentations similaires


Présentation au sujet: "IFT2821 Base de données Chapitre 6 SQL"— Transcription de la présentation:

1 IFT2821 Base de données Chapitre 6 SQL

2 Plan du cours Introduction Architecture Modèles de données
Modèle relationnel Algèbre relationnelle SQL Conception Fonctions avancées Concepts avancées PL/SQL

3 Introduction Permet de retrouver et de manipuler les données
Dérivé de SEQUEL 2 (76) lui-même dérivé de SQUARE (75) Proposé par IBM (82 puis 87) Première version normalisée SQL1 (ISO89) Deuxième version normalisée SQL2 (ISO92) SQL3 en cours de normalisation Sert de couche basse aux L4G (par exemple Access)

4 Langage SQL Partie LDD Partie LMD Conceptuel : CREATE SCHEMA, TABLE,…
Externe : CREATE VIEW, GRANT,… Interne : CREATE INDEX, CLUSTER,… Partie LMD SELECT, INSERT, DELETE, UPDATE

5 Environnement SQL Environnement SQL Catalogue Ventes Schéma
Ventes.Exportation Table Ventes.Exportation.Article View c2.s1 Catalogue c2 Ventes.s2 c1.s2.t1 Ventes.Exportation.ArticleSport

6 Environnement SQL (utilisateur)
Identificateur d ’utilisateur authorizationID Mécanisme d’authentification e.g. mot de passe Utilisateur possède privilèges Exemple CREATE user joe IDENTIFIED BY jpw CONNECT joe/jpw

7 Environnement SQL (Schéma)
DATABASE ~ catalogue une instance Oracle monte une DATABASE à la fois Nom du SCHEMA = authorizationID du propriétaire (Oracle) CREATE SCHEMA AUTHORIZATION blair CONNECT [AS sysDBA]

8 Environnement SQL (interprétation de requêtes)
Création d ’une table ou schéma Transmise à l ’interprète du LDD vérification création de la table schéma stocké dans dictionnaire de données allocation des structures physiques

9 Environnement SQL (Dictionnaire)
BD relationnelle : contient les méta-données d ’un CATALOG DEFINITION_SCHEMA tables INFORMATION_SCHEMA VIEWS sur les tables du DEFINITION_SCHEMA

10 Environnement SQL (Dictionnaire)
SCHEMATA les SCHEMA créés par CURRENT_USER DOMAINS les DOMAIN accessibles par CURRENT_USER ou PUBLIC TABLES les noms des tables accessibles par CURRENT_USER ou PUBLIC VIEWS les vues accessibles par CURRENT_USER ou PUBLIC COLUMNS les colonnes des TABLE accessibles par CURRENT_USER ou PUBLIC TABLE_CONSTRAINTS contraintes des TABLE créées par CURRENT_USER CHECK_CONSTRAINTS contraintes CHECK des TABLE créées par CURRENT_USER TABLE_PRIVILEGES privilèges accordés par CURRENT_USER, à CURRENT_USER, ou à PUBLIC

11 Environnement SQL (Dictionnaire)

12 Type SQL Numérique exact INTEGER (ou INT) :2,3,5,..,299,..
SMALLINT 2, 3, 459,… NUMERIC(p, c) (ou DECIMAL(p, c) ou DEC(p, c)) Nombre décimal avec p chiffres significatifs et c chiffres après le point Exemples : 2.5, , 6

13 Type SQL Numérique approximatif REAL : Point flottant
Exemples : 3.27E-4, 24E5 DOUBLE PRECISION : Point flottant à double précision Exemples : E-4, 24E12 FLOAT(n) :Point flottant (précision minimale est de n chiffres pour la mantisse)

14 Type SQL Chaîne de caractères
CHARACTER(n) (ou CHAR(n)) :Chaîne de caractère de taille fixe égale à n Exemples :  ’Adresse', 'Paul LeGrand ’ CHARACTER VARYING (n) (ou VARCHAR(n)) : Taille variable (max de n caractères) NATIONAL CHARACTER(n) :Ensemble de caractères alternatif spécifique à l'implémentation NATIONAL CHARACTER VARYING(n) :Taille variable

15 Type SQL Date et temps DATE : année (quatre chiffres), mois (2 chiffres) et jour (2 chiffres) Exemple : DATE '  ’ ALTER SESSION SET NLS_DATE_FORMAT = ‘ DD/MM/YYYY ’ TIME[(p)] : heure (2 chiffres), minutes (2 chiffres), secondes (2 +p chiffres) Exemple : TIME '14:04:32.25 ’ TIMESTAMP[(p)] : DATE + TIME Exemple : TIMESTAMP ' :04:32.25 ’ INTERVAL : Représente un intervalle de temps Exemple : INTERVAL '2' DAY

16 Type SQL Booléen BIT (n) : Vecteur de n bits.
Exemples : B' ', X'9F ’ BIT VARYING (n) : taille variable (max = n) Données de grande taille BINARY LARGE OBJECT (n) (BLOB(n)) n : taille en octets (ex: 1024, 5K, 3M, 2G) Exemple : X ’52CF4 ’ (hexadecimal) CHARACTER LARGE OBJECT (n) (CLOB(n))

17 Type SQL (Oracle) NUMBER(p,[c]) VARCHAR2(n) : n £ 4000 RAW(n) :
numérique exact; p entre 1 et 38, c doit être entre -84 et +127 (défaut, c =0) VARCHAR2(n) : n £ 4000 RAW(n) : Binaire de taille n octets (n £ 2000) LONG(n) : Chaîne de caractères de taille variable (n £ 2G). Maximum une colonne LONG par table LONG RAW(n) Binaire de taille variable (n £ 2G). Maximum une colonne de type LONG RAW par table

18 Type SQL (Oracle) ROWID : identifiant de ligne composé de
identificateur de fichier identificateur de bloc relatif au fichier identificateur de ligne relatif au bloc Conversions implicites

19 Définition des données
Domaine Exemple CREATE DOMAIN SSS_TYPE AS CHAR(9) (sql2) CREATE TYPE COULEUR AS OBJECT (Oracle) nomCouleur CHAR(6) DEFAULT 'vert' CONSTRAINT COULEUR_VALIDE CHECK (VALUE IN 'rouge', 'blanc', 'vert', 'bleu', 'noir'); Destruction d’un domaine DROP TYPE domaine [RESTRICT | CASCADE]

20 Définition des données
Définition d’une table (1) CREATE TABLE <table name> (<column name> <column type> [<attribute constraint>] {, <column name> <column type> [<attribute constraints>] } [<table constraint> {,<table constraint>}]) Contraintes d’intégrité sur une table NOT NULL UNIQUE ou PRIMARY KEY FOREIGN KEY REFERENCES CHECK

21 Définition des données
Définition d’une table (2) CREATE TABLE nomDeLaTable ( spécificationDeColonne [, spécificationDeColonne]... spécificationDeContrainte]...) nomColonne [ type|domaine] [DEFAULT valeurDeDéfaut] [NULL | NOT NULL] [UNIQUE | PRIMARY KEY] [REFERENCES nomTable[ listeColonnes]] [[CONSTRAINT nomContrainte] CHECK conditionSQL)] [CONSTRAINT nomContrainte] {PRIMARY KEY listeColonnes| [ON DELETE {NO ACTION|CASCADE|SET NULL|SET DEFAULT}] [ON UPDATE {NO ACTION|CASCADE|SET NULL|SET DEFAULT}]| CHECK ( conditionSQL) } [[NOT] DEFERRABLE INITIALLY {DEFERRED|IMMEDIATE}]

22 Définition des données
Exemple CREATE TABLE DEPARTMENT (DNAME VARCHAR(15) NOT NULL, DNUMBER INT, MGRSSN CHAR(9) DEFAULT ' ', MGRSTARTDATE DATE, CONSTRAINT DEPTPK PRIMARY KEY(DNUMBER), CONSTRAINT DEPTSK UNIQUE (DNAME) CONSTRAINT DEPTMGRFK FOREIGN KEY(MGRSSN) REFERENCES EMPLOYE(SSN) ON DELETE CASCADE);

23 Définition des données
Table Avec contraintes d ’intégrité Exemple (SQL 86) CREATE TABLE COMMANDE ( NC NUMBER UNIQUE NOT NULL, NV NUMBER NOT NULL QUANTITE NUMBER(6)) Exemple (SQL 89) CREATE TABLE COMMANDE ( NC NUMBER PRIMARY KEY, NV NUMBER NOT NULL REFERENCES VIN, QUANTITE NUMBER(6) CHECK(QUANTITE > 0)) NC NUMBER, PRIMARY KEY (NC), NV NUMBER NOT NULL, FOREIGN KEY (NV) REFERENCES VIN, SQL 92

24 Définition des données
Modification du schéma d’une table (1) ALTER TABLE <table> ADD <attribut> <type>, <attribut> <type>, ... Exemple : ALTER TABLE DEPARTEMENT ADD DATE_CREATION DATE ; ALTER TABLE EMPLOYE DROP ADDRESS CASCADE; ALTER TABLE EMPLOYE DROP CONSTRAINT EMPSUPERFK CASCADE; Suppression d’une table DROP TABLE <table> DROP TABLE EMPLOYE ; DROP TABLE DEPENDENT CASCADE;

25 Définition des données
Modification du schéma d’une table (2) ALTER TABLE nomTable {ADD COLUMN spécificationColonne DROP COLUMN nomColonne [RESTRICT|CASCADE]| ADD spécificationContrainte| DROP nomContrainte [RESTRICT|CASCADE]| ALTER nomColonne SET DEFAULT valeurDéfaut| ALTER nomColonne DROP DEFAULT}

26 Accès aux données Clause SELECT SELECT <attributs>
FROM <liste de tables> [WHERE <condition>] [GROUP BY <groupe(s) attribut(s) >] [HAVING <condition de groupe>] [ORDER BY <liste attributs>]; Exemple : SELECT BDATE, ADRESS FROM EMPLOYE WHERE FNAME='Jhon' AND LNAME='Smith'; BDATE ADRESS 01-SEP Fondren Huston, TX

27 Accès aux données Exemple Donner les noms et adresses des employés?
SELECT BDATE, ADRESS FROM EMPLOYE BDATE ADRESS 10-OCT Stone, Huston, TX 08-DEC Voss, Huston , TX 20-JUN Berry, Bellaire, TX 15-SEP FireOak, Humble,TX 31-JUL Rice, Humble, TX 19-JUL Castle,Spring, TX 29-MAR , Dallas, Huston, TX 01-SEP Fondren Huston, TX

28 Accès aux données Clause Where non spécifiée
Que fait la requête suivante ? SELECT * FROM EMPLOYE, DEPARTMENT ; Clause Where mal spécifiée !!! SELECT LNAME, FNAME, DNUMDER FROM EMPLOYE, DEPARTMENT WHERE DNUMBER = 5; Produit cartésien des tables EMPLOYE et DEPARTMENT ? ? ? ? ? ? ? ?

29 Accès aux données Exemple
Donner les noms et adresses des employés du département de recherche ? SELECT FNAME, LNAME, ADRESS FROM EMPLOYE, DEPARTMENT WHERE DNAME='Research' AND DNUMBER=DNO; FNAME LNAME ADRESS Franklin Wong Voss, Huston , TX Ramesh Narayan FireOak, Humble,TX Joyce English Rice, Humble, TX Jhon Smith Fondren Huston, TX

30 Accès aux données Attributs ambiguës Exemple :
Donner les noms et adresses des employés qui travaillent au département de recherche ? (Supposons que l’attribut DNO de la table EMPLOYE s’appelle DNUMBER) SELECT FNAME, EMPLOYE.LNAME, ADRESS FROM EMPLOYE, DEPARTMENT WHERE DEPARTMENT.DNAME = 'Research' AND DEPARTMENT.DNUMBER=EMPLOYE.DNUMBER;

31 Accès aux données Attributs ambiguës Exemple :
Donner le nom et prénom de chaque employé ainsi que le nom et le prénom de son superviseur immédiat ? SELECT E.FNAME, E.LNAME, S.FNAME, S.LNAME FROM EMPLOYE E, EMPLOYE S WHERE E.SUPERSSN=S.SSN; FNAME LNAME FNAME LNAME Franklin Wong James Borg Jennifer Wallace James Borg Ramesh Narayan Franklin Wong Joyce English Franklin Wong Alicia Zelaya Jennifer Wallace Ahmad Jabbar Jennifer Wallace Jhon Smith Franklin Wong

32 Accès aux données Tables & Ensembles Duplication des uplets :
Duplication permise des uplets SELECT ALL SALARY FROM EMPLOYE ; Duplication non permise des uplets SELECT DISTINCT SALARY SALARY 55000 40000 43000 38000 25000 30000 SALARY 25000 30000 38000 40000 43000 55000

33 Accès aux données Tables & Ensembles
Union: Donner la liste des projets dont Smith est implique comme employé ou comme directeur du département qui contrôle ces projets ? (SELECT DISTINCT PNUMBER FROM PROJECT, DEPARTMENT, EMPLOYE WHERE DNUM = DNUMBER AND MGRSSN = SSN AND LNAME= 'Smith') UNION FROM PROJECT, WORKS_ON, EMPLOYE WHERE PNUMBER = PNO AND ESSN = SSN AND LNAME = 'Smith'); PNUMBER 1 2

34 Accès aux données Fonctions de calcul SUM, AVG, MAX, MIN
SELECT SUM (SALARY), MAX (SALARY), MIN (SALARY), AVG (SALARY) FROM EMPLOYE; SUM(SALARY) MAX(SALARY) MIN(SALARY) AVG(SALARY) Quel est le nombre des employés ? SELECT COUNT (*) COUNT(*) 8

35 Accès aux données Fonctions de calcul Que fait la requête suivante ?
SELECT LNAME, FNAME FROM EMPLOYE WHERE (SELECT COUNT (*) FROM DEPENDENT WHERE SSN=ESSN) >= 2; Retourne nom et prénom des employés qui ont deux dépendants et plus. LNAME FNAME Smith Jhon

36 Accès aux données Fonctions d’agrégation GROUP BY, HAVING
Pour chaque projet retrouver son nom, son numéro et le nombre des employés qui y ont participé ? SELECT PNUMBER, PNAME, COUNT (*) FROM PROJECT, WORKS_ON WHERE PNUMBER=PNO GROUP BY PNUMBER, PNAME; PNUMBER PNAME COUNT(*) ProductX ProductY ProductZ Computerization 3 Reorganization Newbenefits

37 Accès aux données Fonctions d’agrégation GROUP BY, HAVING
Pour chaque projet qui implique plus de deux employés retrouver son nom, son numéro et le nombre d’employés qui y participent ? SELECT PNUMBER, PNAME, COUNT (*) FROM PROJECT, WORKS_ON WHERE PNUMBER = PNO GROUP BY PNUMBER, PNAME HAVING COUNT (*) > 2; PNUMBER PNAME COUNT(*) ProductY Computerization 3 Reorganization Newbenefits

38 Accès aux données Chaînes de caractères, opérateurs arithmétiques et ordonnancement LIKE, BETWEEN, ORDER BY Retrouver tous les employés qui ont une adresse a Huston, Texas? SELECT FNAME, LNAME FROM EMPLOYE WHERE ADRESS LIKE '%Huston, TX%'; Retrouver tous les employés qui sont nés durant les années 1950 ? WHERE BDATE LIKE'________5_';

39 Accès aux données Chaînes de caractères, opérateurs arithmétiques et ordonnancement Retrouver le salaire de chaque employé si on augmente de 10% les employés qui ont participé dans le projet ‘ProjectX’? SELECT FNAME, LNAME, 1.1*SALARY FROM EMPLOYE, WORKS_ON, PROJECT WHERE SSN=ESSN AND PNO=PNUMBER AND PNAME='ProjectX'; Que fait la requête suivante ? SELECT * FROM EMPLOYE WHERE (SALARY BETWEEN AND 40000) AND DNO = 5; FNAME LNAME *SALARY Jhon Smith Joyce English

40 Accès aux données Chaînes de caractères, opérateurs arithmétiques et ordonnancement Retrouver la liste des employés qui sont impliqués dans des projets ; Cette liste doit triée par département (descendant), nom et prénom(ascendant). SELECT DNAME, LNAME, FNAME, PNAME FROM DEPARTMENT, EMPLOYE, WORKS_ON, PROJECT WHERE DNUMBER=DNO AND SSN=ESSN AND PNO=PNUMBER ORDER BY DNAME DESC, LNAME ASC, FNAME ASC;

41 Accès aux données Chaînes de caractères, opérateurs arithmétiques et ordonnancement DNAME LNAME FNAME PNAME Research English Joyce ProductX Research English Joyce ProductY Research Narayan Ramesh ProductZ Research Smith Jhon ProductX Research Smith Jhon ProductY Research Wong Franklin ProductY Research Wong Franklin ProductZ Research Wong Franklin Computerization Research Wong Franklin Reorganization Headquarters Borg James Reorganization Administration Jabbar Ahmad Computerization Administration Jabbar Ahmad Newbenefits Administration Wallace Jennifer Newbenefits Administration Wallace Jennifer Reorganization Administration Zelaya Alicia Newbenefits Administration Zelaya Alicia Computerization

42 Accès aux données Sous requêtes et comparaison d’ensembles
IN, SOME, ANY, ALL, EXIST, UNIQUE, NOT Retrouver le NAS des employé qui ont travaillé dans les mêmes projets et les mêmes nombres d ’heures que John Smith (NAS : ) ? SELECT DISTINCT ESSN FROM WORKS_ON WHERE (PNO, HOURS) IN (SELECT PNO, HOURS FROM WORKS_ON WHERE ESSN=' '); Qu’obtient-on si on remplacer IN par =SOME puis par =ANY ?

43 Accès aux données Sous requêtes et comparaison d’ensembles
(IN, NOT) SOME, ANY, ALL, (EXIST, NOT) Retrouver les noms des employé qui gagnent un salaire supérieur a tous ceux qui travaillent dans le département de recherche? SELECT LNAME, FNAME FROM EMPLOYEE WHERE SALARY > ALL (SELECT SALARY FROM EMPLOYEE WHERE DNO=5); LNAME FNAME Borg James Wallace Jennifer

44 Accès aux données Sous requêtes et comparaison d’ensembles
IN, SOME, ANY, ALL, EXIST, NOT Retrouver les noms des employé qui n’ont pas de dépendant? SELECT FNAME, LNAME FROM EMPLOYE WHERE NOT EXISTS (SELECT * FROM DEPENDENT, EMPLOYE WHERE SSN=ESSN); Retrouver les noms des managers qui ont plus d’un dépendant? FNAME LNAME James Borg Ramesh Narayan Joyce English Alicia Zelaya Ahmad Jabbar

45 Accès aux données Jointure de tables JOIN, NATURAL JOIN
Retrouver les noms et les adresses des employé qui travaillent dans le département de recherche ? SELECT FNAME, LNAME, ADDRESS FROM (EMPLOYE JOIN DEPARTMENT ON DNO=DNUMBER) WHERE NAME=‘Research’; SELECT FNAME, LNAME, ADDRESS FROM (EMPLOYE NATURAL JOIN (DEPARTMENT AS DEPT (DNAME, DNO, MSSN, MSDATE))) WHERE DNAME=‘Research;

46 Manipulation des données
Insertion INSERT INTO <table> [ (<liste_colonnes>)] {VALUES (<liste_valeurs>) | <requete>} INSERT INTO EMPLOYEE VALUES ('Richard','Marini', ' ', '30-dec-1962','98 Oak Forest,Katy,TX','M', 37000, ' ', 4); INSERT INTO EMPLOYE (FNAME, LNAME, DNO, SSN) VALUES ('Richard', 'Marini', 4, ' '); INSERT INTO DEPTS_INFO (DEPT_NAME, NO_OF_EMPS, TOTAL_SAL) SELECT DNAME, COUNT (*), SUM (SALARY) FROM (DEPARTMENT JOIN EMPLOYE ON DNUMBER=DNO) GROUP BY DNAME;

47 Manipulation des données
Mise à jour UPDATE <table> SET {<nom_colonne> = <expression>}+ WHERE {<condition>} UPDATE PROJECT SET PLOCATION = ‘Bellaire’, DNUM = 5 WHERE PNUMBER=10; UPDATE EMPLOYE SET SALARY = SALARY *1.1 WHERE DNO IN (SELECT DNUMBER FROM DEPARTMENT WHERE DNAME = 'Research');

48 Manipulation des données
Suppression DELETE FROM <table> [WHERE {<condition> ] DELETE FROM EMPLOYE WHERE SSN=‘ ’; WHERE DNO IN (SELECT DNUMBER FROM DEPARTMENT WHERE DNAME='Research'); Que fait la requête suivante ? DELETE FROM EMPLOYE;

49 Opérations ensemblistes
Différence Les employés qui n ’ont pas de dépendants. select ssn as Nass from employe minus select essn from dependent; Nass - Que fait la requête suivante ?

50 Opérations ensemblistes
Différence Les noms et prénoms des employés qui n’ont pas de dépendants. select lname as prenom from employe where ssn in (select ssn as Nass from employe minus select essn from dependent); ou from employe, (select ssn as Nass from employe select essn from dependent) where ssn = Nass; PRENOM English Narayan

51 Opérations ensemblistes
Intersection Les employés qui ont des dépendants. select ssn as Nass from employe intersect select essn from dependent; Nass

52 Opérations dérivées Division (1)  =
Exemple : quel sont les employées qui ont participé au mêmes projets que « John Smith » =

53 Opérations ensemblistes
Division (2) select fname as Prenom, lname as Nom from employe e where not exists (select pno from works_on where essn = '  ’ minus select pno from works_on where essn = e.ssn) ; PRENOM NOM Joyce English Jhon Smith

54 Opérations ensemblistes
Division (2 Ayoye !!!) select fname as Prenom, lname as Nom from employe where not exists (select pno from works_on w1 where essn = '  ’ and not exists from works_on w2 where essn = ssn and w1.pno = w2.pno)) ;

55 SQL intégré Introduction
SQL peut être intégré dans un langage hôte (C, COBOL, PL/1, PASCAL, JAVA, etc.) Étude du cas du langage C

56 SQL intégré Principes Tout instruction SQL commence par l’expression EXEC SQL pour la distinguer des autres instructions du langage hôte Différents types d’instructions déclarations connexion traitement

57 SQL intégré Déclarations (variables de communication)
Elle se fait dans la DECLARE SECTION. Celle ci commence par l'ordre EXEC SQL BEGIN DECLARE SECTION; et se termine par EXEC SQL END DECLARE SECTION; Exemple int pempno ; char pname[11]; int pdeptno;

58 SQL intégré Déclarations (variables de communication)
Utilisation dans SQL EXEC SQL SELECT DEPTO, ENAME INTO :pdeptno, :pname FROM EMP WHERE EMPNO = :pempno; Variables précédées de ":" pour les distinguer des noms des attributs Utilisation dans C strcpy(pname,"Martin") ; Les types possibles pour ces variables sont ceux compatibles avec ORACLE (entiers, réels, chaînes de caractères)

59 SQL intégré Connexion La connexion à une base ORACLE se fait par l'ordre SQL : EXEC SQL CONNECT :username IDENTIFIED BY :password; username et password sont des variables déclarées dans la section déclaration Exemple EXEC SQL BEGIN DECLARE SECTION; VARCHAR username[20]; VARCHAR password[20]; EXEC SQL END DECLARE SECTION; EXEC SQL INCLUDE sqlca.h;

60 SQL intégré Connexion Exemple (suite) main() {
strcpy(username,"login_oracle"); /* Copie du username*/ strcpy(password,"motdepasse_oracle"); /* Copie du mot de passe */ EXEC SQL CONNECT :username IDENTIFIED BY :password; }

61 SQL intégré Traitements Mise à jour Suppression Création d ’une table
"mettre à jour le salaire dans la relation employé" EXEC SQL UPDATE EMP SET SAL = :salaire WHERE EMPNO=301; Suppression EXEC SQL DELETE FROM EMP WHERE EMPNO = :empno; Création d ’une table EXEC SQL CREATE TABLE EMP_TEST (EMPNO NUMBER, ENAME CHAR(15), JOB CHAR(10));

62 SQL intégré Traitements Sélection, cas du INTO
S ’applique quand le SELECT retourne un seul n-uplet EXEC SQL SELECT job, sal INTO :fonction, :salaire FROM EMP WHERE empno=301; Sélection, utilisation d’un curseur S ’applique quand le SELECT retourne un ensemble de n-uplets Un curseur est une structure de données contenant tous les n-uplets retournés par la commande SELECT Cette structure se manipule comme un fichier séquentiel

63 SQL intégré Traitements Association du curseur à un SELECT
EXEC SQL DECLARE C CURSOR FOR SELECT job, salaire FROM EMP; Ouverture du curseur EXEC SQL OPEN C; A l ’ouverture, le premier n-uplet est pointé Fermeture du curseur EXEC SQL CLOSE C;

64 SQL intégré Traitements
Accès aux autres n-uplets de manière séquentielle Se fait par l ’instruction FETCH EXEC SQL FETCH C INTO :fonction, :salaire; On ne peut pas reculer dans le curseur Pour accéder de nouveau aux n-uplets, il faut fermer et rouvrir le curseur

65 SQL intégré Commandes dynamiques
Il est possible d’exécuter des commandes SQL inconnues au moment de l‘écriture du programme Il existe pour cela quatre méthode Commandes sauf SELECT sans variables (EXECUTE IMMEDIATE) Commandes sauf SELECT avec un nombre de variables fixe (PREPARE, EXECUTE) Commandes avec un nombre de variables variable (PREPARE, DECLARE, OPEN, FETCH) SELECT complètement dynamique

66 SQL intégré Commandes dynamiques Commandes sans variables
EXEC SQL EXECUTE IMMEDIATE :modif; Commandes avec un nombre de variables fixe EXEC SQL PREPARE S1 FROM :chaîne; EXEC SQL EXECUTE S1 USING :variable1,:variable2, ...;

67 SQL intégré Directives de traitement d'erreur
EXEC SQL WHENEVER [SQLERROR / SQLWARNING / NOT FOUND] [STOP / CONTINUE / GO TO étiquette]; Ces directives correspondent donc à 3 événements ORACLE : SQLERROR : erreur ORACLE SQLWARNING : "warning" ORACLE NOT FOUND : curseur vide ou fini

68 SQL intégré Directives de traitement d'erreur
EXEC SQL WHENEVER [SQLERROR / SQLWARNING / NOT FOUND] [STOP / CONTINUE / GO TO étiquette]; Les actions possibles sont : STOP : le programme se termine et la transaction est « abortée », CONTINUE : le programme continue en séquence, GO TO : le programme se branche à l'adresse indiquée.

69 SQL intégré Directives de traitement d'erreur
La portée d'une directive WHENEVER va jusqu'à la directive WHENEVER suivante (ou la fin de programme) dans l'ordre du texte source PRO*C (et non pas dans l'ordre d'exécution). L'erreur classique dans la manipulation des SQL WHENEVER est la suivante :

70 SQL intégré routine a { ... EXEC SQL WHENEVER ERROR GOTO toto; ... toto : ... } routine b EXEC SQL INSERT ... } /* donc rien est dit dans b pour SQL WHENEVER */ Par conséquent, au sein de la routine b, on garde les dernières directives rencontrées, donc celles de la routine a. Or l'étiquette toto est locale à a et donc inconnue dans b.

71 SQL intégré Solutions par exemple avoir systématiquement des étiquettes globales définir localement dans chaque routine les directives d'erreurs.

72 SQL intégré Gestion des transactions
Une transaction est assimilée à une exécution d'un programme. Le début de transaction est implicite (c'est le début de programme), et la fin est soit implicite (erreur non récupérée par un WHENEVER : annulation, ou fin de programme : validation) soit explicite. Les ordres de fin de transaction explicites sont :

73 SQL intégré Gestion des transactions
EXEC SQL COMMIT WORK [RELEASE]; Valide les mises à jour. L'option RELEASE désalloue toutes les ressources ORACLE et réalise la déconnexion de la base EXEC SQL ROLLBACK WORK [RELEASE]; Annule les mises à jour

74 SQL intégré Gestion des transactions
Pour éviter les problèmes de conflit entre le ROLLBACK et les directives WHENEVER, il est prudent d'utiliser le ROLLBACK comme suit : EXEC SQL WHENEVER SQLERROR CONTINUE; EXEC SQL WHENEVER SQLWARNING CONTINUE; EXEC SQL ROLLBACK WORK;


Télécharger ppt "IFT2821 Base de données Chapitre 6 SQL"

Présentations similaires


Annonces Google