SGBD-PL\SQL (Procedural Language / Structured Query Language)

Documents pareils
Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Bases de Données Avancées PL/SQL

Bases de données avancées

TP Contraintes - Triggers

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

Devoir Data WareHouse

Cours Bases de données 2ème année IUT

Cours 3. Développement d une application BD. DBA - Maîtrise ASR - Université Evry

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

CREATION WEB DYNAMIQUE

Oracle Le langage procédural PL/SQL

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

Notes de cours : bases de données distribuées et repliquées

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Corrigés détaillés des exercices

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW

Bases de Données relationnelles et leurs systèmes de Gestion

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Cours Bases de données 2ème année IUT

A QUOI SERVENT LES BASES DE DONNÉES?

Introduction à JDBC. Accès aux bases de données en Java

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

Les bases de données

Introduction au PL/SQL Oracle. Alexandre Meslé

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

A QUOI SERVENT LES BASES DE DONNÉES?

PHP. PHP et bases de données

Laboratoires de bases de données. Laboratoire n 6. Programmation SQL. par Danièle BAYERS et Louis SWINNEN

Le Langage SQL version Oracle

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Le langage procédural PL-PGSQL

Intégrité sémantique dans les bases de données relationnelles

Présentation du PL/SQL

Optimisation SQL. Quelques règles de bases

Le langage SQL (première partie) c Olivier Caron

Support de cours «SGBD»

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

Administration des bases de données

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

Java DataBaseConnectivity

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

Mysql avec EasyPhp. 1 er mars 2006

Bases de données et sites WEB

Intégrité des données

Bases de données relationnelles

BTS/CGO P10 SYSTEME INFORMATION Année

1. Base de données SQLite

Mysql. Les requêtes préparées Prepared statements

Gestion des utilisateurs et de leurs droits

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

Bases de Données Réparties

//////////////////////////////////////////////////////////////////// Administration bases de données

Quelques aspects du Relationnel-Objet du SGBD Oracle

Exemple accessible via une interface Web. Bases de données et systèmes de gestion de bases de données. Généralités. Définitions

Gestion des transactions et accès concurrents dans les bases de données relationnelles

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

PHP 5. La base de données MySql. A. Belaïd 1

Olivier Mondet

Chapitre 5 : Les procédures stockées PL/SQL

Vues: définition. Vues: avantages. Vues: inconvénients. Vues: exemple. Vues: syntaxe 08/12/2009

Administration des bases de données. Jean-Yves Antoine

CATALOGUE FORMATIONS DOMAINE Bases de données

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

Partie 0 : Gestion des tablespace et des utilisateurs... 3

Création et Gestion des tables

Configurer la supervision pour une base MS SQL Server Viadéis Services

PHP 4 PARTIE : BASE DE DONNEES

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Les transactions 1/46. I même en cas de panne logicielle ou matérielle. I Concept de transaction. I Gestion de la concurrence : les solutions

Paginer les données côté serveur, mettre en cache côté client

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

SQL Historique

Attaques applicatives

Information utiles. webpage : Google+ : digiusto/

IFT3030 Base de données. Chapitre 1 Introduction

Accès aux bases de données

MS SQL Express 2005 Sauvegarde des données

Pratique et administration des systèmes

Compétences Business Objects

PL langage de programmation côté serveur. SQL à la base : types, expressions, requêtes

Gestion de stock pour un magasin

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Présentation du module Base de données spatio-temporelles

MODE OPERATOIRE OPENOFFICE BASE

Historisation des données

PROJET 1 : BASE DE DONNÉES REPARTIES

Le Langage De Description De Données(LDD)

Langage SQL : créer et interroger une base

CHAPITRE 4 POLITIQUES DE CONTRÔLES DES ACCÈS SOUS ORACLE ADMINISTRATION ET TUNING DE BASES DE DONNÉES 10/05/2015 RESPONSABLE DR K.

Ora2Pg. Présentation, bonnes pratiques et futur du projet

Cours SQL. Base du langage SQL et des bases de données

Les BASES de DONNEES dans WampServer

Bases de données. Mihaela Mathieu

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

Transcription:

SGBD-PL\SQL (Procedural Language / Structured Query Language) Chapitre 3 : Interaction avec Oracle et les curseurs Faîçal Felhi felhi_fayssal@yahoo.fr

I. Interactions simples avec la base Extraire, modifier, inserer. Le select ne doit renvoyer qu une seule ligne Si le select renvoie plus d une ligne : exception «TOO_MANY_ROWS» (ORA- 01422) Si le select ne renvoie aucune ligne : exception «NO_DATA_FOUND» (ORA-01403) pour ramener des lignes : les curseurs 2

II. Les curseurs Toutes les requêtes SQL sont associées à un curseur Ce curseur représente la zone mémoire utilisée pour analyser et exécuter la requête Le curseur peut être implicite (pas déclaré par l utilisateur) ou explicite Les curseurs explicites servent à retourner plusieurs lignes avec un select On distingue deux types de curseurs : Les curseurs explicites Les curseurs implicites 3

Notion de curseur Le tableau suivant indique, par opération de manipulation, les commandes SQL susceptibles de jouer le rôle de curseur implicite et/ou explicite : Opération MAJ Curseur implicite Insert, Update, Delete Curseur explicite Interrogation Select Into Select 4

II.1. Les curseurs implicites Ils sont associés aux ordres SELECT, INSERT, DELETE et UPDATE. Ils sont déclarés automatiquement par ORACLE lors de l'exécution de la requête. Attention un seul enregistrement doit être résultat pour une requête SELECT 5

Exemple d un curseur implicite DECLARE V_deptno NUMBER(2); V_Loc VARCHAR2(15);... BEGIN SELECT deptno, loc INTO v_deptno, v_loc Obligatoire FROM dept WHERE upper(dname) = SALES ; END; 6

7

8 Exemple 2

Exception du select Condition Nom Exception Le SELECT identifie plus d une ligne Erreur Oracle Server ORA-01422 Le SELECT n identifie aucune ligne Erreur Oracle Server ORA-01403 TOO_MANY_ROWS NO_DATA_FOUND 9

Exemple 3 10

11 Exemple 4

Attributs du curseur implicite PL/SQL fournit des attributs permettant d évaluer le résultat d un curseur implicite : Attribut SQL%ROWCOUNT SQL%FOUND SQL%NOTFOUND SQL%ISOPEN Description Entier : Nombre de lignes affectées par le dernier ordre SQL Booléen : TRUE si le dernier ordre SQL affecte au moins une ligne Booléen : TRUE si le dernier ordre SQL n affecte aucune ligne Toujours FALSE pour les curseurs implicites. 12 Ces attributs sont utilisables comme des fonctions dans les ordres PL/SQL MAIS PAS dans les commandes SQL.

Exemple DECLARE V_Rows_Updated NUMBER; BEGIN UPDATE EMP SET sal = sal*1.1 WHERE deptno = 10; V_Rows_Updated := SQL%ROWCOUNT; -- SQL%ISOPEN est FALSE INSERT INTO History_Tab Values ( Dept 10, V_Rows_Updated, SYSDATE); END ; 13

II.2. Les curseurs explicites Un curseur est une zone mémoire de taille fixe, utilisée par le moteur SQL pour analyser et interpréter un ordre SQL Un curseur explicite, contrairement au curseur implicite est géré par l'utilisateur pour traiter un ordre Select qui ramène plusieurs lignes Tout curseur explicite géré dans la section exécution doit avoir été déclaré dans la section déclarative C est une commande SELECT pouvant ramener plusieurs lignes et qui est totalement à la charge du développeur. Un curseur explicite doit être explicitement : Déclaré dans la section DECLARE Géré par le développeur dans la section exécutable. La gestion d un curseur consiste à exécuter les opérations : ouverture du curseur, lecture et traitement des lignes, fermeture. 14

Motivation Besoin de consulter n-uplets issus d une ou de plusieurs tables de la base de données Effectuer des traitements en examinant chaque ligne individuellement Curseur explicite Est une commande Select déclaré et nommé Généralisation du curseur implicite d interrogation Possédant les quatre attributs suivants : %ISOPEN, %FOUND, %NOTFOUND et %ROWCOUNT. Exigences du curseur explicite Déclaration Ouverture Accès aux lignes du curseur Fermeture Section DECLARE Section EXECUTABLE 15

Déclaration d un curseur : Syntaxe CURSOR nom_curseur [(paramètre1, paramètre2, )] IS SELECT [FOR UPDATE [OF colonne1, colonne2, ] [NOWAIT]]; Où nom_curseur : est le nom du curseur Paramètre : est un paramètre formel décrit comme suit : FOR UPDATE [OF colonne1, colonne2, ] : place un verrou exclusif portant sur des n-uplets de la table du SELECT [OF colonne1, colonne2, ] : les colonnes à mettre à jour par le curseur sont verrouillées NOWAIT : pas d attente pour accéder aux n-uplets 16

Déclaration d un curseur : Exemples DECLARE CURSOR C1_Cher IS SELECT Cnom, Labno FROM chercheur WHERE Sal> 1200; -------------------------------------------------------------------------------- CURSOR C2_Cher (P_Labno IN NUMBER) IS -- IN est optionnel SELECT Grade, Cnom FROM chercheur WHERE Labno = P_Labno; ---------------------------------------------------------------------------------- CURSOR C3_CHER (P_Min NUMBER DEFAULT 0, P_Max NUMBER DEFAULT 99) IS SELECT. FROM. WHERE BETWEEN P_Min AND P_Max; 17

Ouverture d un curseur : Syntaxe OPEN nom_curseur [(paramètre_effectif, )]; Exemples OPEN C1_Cher; OPEN C2_Cher (10); V_Labno :=10; OPEN C2_Cher (V_Labno); Accès aux lignes d un curseur : Syntaxe FETCH nom_curseur INTO variable1, variable2, ; Fonctionnalités Ramène le contenu de la ligne courante Assigne les données dans les variables de INTO Déplace le pointeur vers la ligne suivante 18

Accès aux lignes d un curseur : Exemple DECLARE CURSOR C1_Cher IS SELECT Cnom, Labno FROM Chercheur WHERE Sal >1200; V_Cnom Chercheur.Cnom%TYPE; V_Labno Chercheur.Labno%TYPE; BEGIN OPEN C1_Cher;--Exécution du SELECT LOOP FETCH C1_Cher INTOV_Cnom, V_Labno; EXIT WHEN C1_Cher%NOTFOUND;--Test de sortie -- ici %FOUND est TRUE -- traitement de la ligne ramenée par FETCH END LOOP; END; --fin du bloc 19

Fermeture d un curseur Libération de l espace mémoire alloué Réouverture si nécessaire Syntaxe CLOSE nom_curseur; Remarque toute opération sur un curseur fermé (Fetch, %attribut) engendra l exception prédéfinie INVALID_CURSOR Attributs d un curseur explicite %FOUND : Cet attribut prend la valeurtrue lorsque uneligne est ramenée, sinon il prend la valeur FALSE %NOTFOUND : Cet attribut prend la valeur FALSE lorsque uneligne est ramenée, sinon il prend la valeurtrue %ISOPEN : Cet attribut prend la valeurtrue lorsque le curseur indiqué est ouvert, sinon il prend la valeur FALSE %ROWCOUNT : Cet attribut retourne le nombre de lignes impactées par la dernière instruction SQL 20

Curseur et enregistrement : Syntaxe Nom_enregistrement nom_curseur%rowtype; Exemple DECLARE CURSOR C1 IS SELECT Cnom, Sal FROM chercheur WHERE Labno=10; Rec1 C1%ROWTYPE;-- Rec1 de même schéma que C1 V_Cnom Chercheur.Cnom%TYPE; BEGIN OPEN C1; LOOP FETCH C1 INTO Rec1; EXIT WHEN C1%NOTFOUND OR C1%ROWCOUNT >5; END LOOP; Close C1; END; fin bloc 21

Boucle dédiée curseur PL/SQL offre une boucle FOR spéciale pour les curseurs explicites. Elle prend en charge toutes les opérations du curseur (OPEN, FETCH, EXIT et CLOSE) Syntaxe 1 : cas d un curseur nommé FOR nom_record IN nom_curseur [(paramètre, )] LOOP --traitement de la ligne courante END LOOP; 22

Boucle dédiée curseur : Exemple 1 DECLARE CURSOR C1 (P_DATEREC DATE) IS SELECT Cnom, Grade FROM Chercheur WHERE DATEREC < P_DATEREC; BEGIN FOR REC IN C1 ( 01-JAN-99 ) -- curseur ouvert LOOP -- ici une ligne est disponible -- traitement des lignes, une par itération END LOOP; /* Ici le curseur est automatiquement fermé les attributs ne sont pas utilisables Toute référence à REC est invalide*/ -- suite traitement END; 23

Boucle dédiée curseur PL/SQL offre une boucle FOR spéciale pour les curseurs explicites. Elle prend en charge toutes les opérations du curseur (OPEN, FETCH, EXIT et CLOSE) Syntaxe 1 : cas d un curseur nommé FOR nom_record IN nom_curseur [(paramètre, )] LOOP --traitement de la ligne courante END LOOP; Syntaxe 2 : cas d un curseur anonyme FOR nom_record IN (Commande_SELECT) LOOP --traitement de la ligne courante END LOOP; 24

Boucle dédiée curseur : Exemple 2 DECLARE BEGIN V_TOT_SAL NUMBER :=0; FOR REC IN (SELECT Cnom, Sal FROM Chercheur WHERE Labno=10) LOOP -- traitement de la ligne courante IF Rec.Sal > 1000 THEN END LOOP;. END; 25

N.B: Le seul ordre qui offre le choix entre curseur implicite et explicite est le SELECT lorsqu il ne ramène qu une seule ligne. Il n existe pas de curseur explicite de mise à jour Un curseur explicite ne peut être qu un SELECT : utiliser systématiquement des CE pour les ordres SELECT Inconvénients de CI par rapport au CE 26