Chapitre 6.2 Les curseurs Cours SGBD 3A Mme hkimi Jihène

Slides:



Advertisements
Présentations similaires
PL/SQL : Le Langage PL/SQL est une extension du SQL, qui offre
Advertisements

Les Systèmes de Gestion de Bases de Données (SGBD) PL-SQL.
Portée des variables VBA & Excel
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
SQL - Subtilités.
Gestion de FICHIERS.
PHP mySQL Extension php_mysql. Connexion à une base de données Établir une connexion mysql_connect(string server, string username, string password) –permet.
Oracle: OO.
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
Jérôme CUTRONA PHP et bases de données Jérôme CUTRONA 01:07:51 Programmation Web
Les sous-programmes Chapitre n° 5: Objectifs : Activité:
1 ARCHITECTURE DACCÈS la méthode générale modèle de données définitions module daccès / modules métiers construction des modèles les modules daccès, les.
Les requêtes La Requête est une méthode pour afficher les enregistrements qui répondent à des conditions spécifiques. La requête est donc un filtre.
Récursivité.
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
Connexion en mode application. Bases de données - Yann Loyer2 Connexion en mode application Pour tout type dutilisateurs : –passif, actif, gérant Permettre.
Ecole Supérieure Privée de ingénierie et de technologie année universitaire :2013/2014 Cross-Plateform Cours JavaScript.
T ECHNOLOGIES O RACLE Manipulation des données © sebvita.com.
Copyright Oracle Corporation, Tous droits réservés. 9 Écriture de Sous- Interrogations Synchronisées.
Les instructions PHP pour l'accès à une base de données MySql
L’utilisation des bases de données
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
Gestion des erreurs Packages ©Alain Villeneuve, 1999
P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD.
Complément Le diagramme des classes
PL / SQL Schedule: Timing Topic 45 minutes Lecture 30 minutes Practice
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 Procédures stockées CPI-SQLServer.
PLSQL ORACLE 8i Connecter VB à BD Oracle Les collections Question de révision Les blocs anonymes Les triggers REVISION Par : Joël Huot.
SQL: Contraintes et Triggers
1 PHP 1.Langage PHP 1.1. Types de base, variables et constantes 1.2. Opérateurs et expressions 1.3. Instructions 1.4. Fonctions 2.Accès aux bases de données:
MySQL Création des sites dynamiques
Bases de Données Avancées - TP2: SQL
PL/SQL Noreddine GHERABI 1.
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Christine Bonnet SOURCES : « Samples » dOracle, « Oracle 8 » R. Chapuis PRO*C – C ++
OPTIMISATION DE BASE DE DONNEES ORACLE
Chapitre 3 Les bibliothèques de balises JSP et la JSTL
Procédures Stockées Schedule: Timing Topic 60 minutes Lecture
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 SQL jointure PHILIPPE BANCQUART.
Limiter et trier des données
Introduction.
IUPm3- Université de Nantes
 CREATE TABLE  DROP TABLE  ALTER TABLE  INSERT  UPDATE  DELETE  SELECT interrogation 2 Instruction de mise à jour structure.
8 Copyright © Oracle Corporation, Tous droits réservés. Manipuler des objets de grande taille.
Gérer la sécurité des mots de passe et les ressources
Le Langage de BLOC PL/SQL
JDBC L'API JDBC est utilisée pour utilisée pour intéragir avec une base de données.
Les Composants de l’architecture Oracle
Créer des déclencheurs de base de données
Créer des packages.
Module 12 : Implémentation de procédures stockées.
Packages fournis par Oracle
(Procedural Language / Structured Query Language)
Manipulation des Données
Sous-Interrogations.
Les Contraintes.
 Formulaires HTML : traiter les entrées utilisateur
Introduction  Langage propre à Oracle basé sur ADA  Offre une extension procédurale à SQL  PL/SQL permet d’utiliser un sous-ensemble du langage SQL.
Révision du langage PL/SQL
Copyright  Oracle Corporation, Tous droits réservés. 2 Sélection et Tri des Lignes Retournées par un SELECT.
3 Copyright © Oracle Corporation, Tous droits réservés. Créer des fonctions.
02/06/2015© Robert Godin. Tous droits réservés.1 5 Interface entre SQL et un programme n SQL incomplet n Défaut d'impédance (impedance mismatch) – modèle.
PL/SQL Présentation.
Note: Les nombres écrits en gras renvoie à des leçons entières. Symbole %FOUND 6-13 %ISOPEN 6-13 %NOTFOUND 6-13 %ROWCOUNT 6-13 %ROWTYPE 5, 6-17 %TYPE 1-20.
Procédures Stockées Fonctions Paquetages
Les bases de données Séance 8 Jointures.
CHAPITRE 4 PL/SQL Langage SQL en mode procédural (PL/SQL):
Types de données composites
Introduction au langage PL/SQL
Les exceptions Une exception est un identificateur PL/SQL détecté pendant la phase d’exécution. Comment est-elle déclenchée ? À la suite d’une erreur.
Transcription de la présentation:

Chapitre 6.2 Les curseurs Cours SGBD 3A Mme hkimi Jihène Année universitaire : 2011/2012

Introduction ‰Nous avons vu que vous pouvez inclure des instructions SQL qui renvoient une ligne unique dans un bloc PL/SQL. Les données extraites par l'instruction SQL doivent être stockées dans des variables à l'aide de la clause INTO. ‰Le serveur Oracle alloue une zone de mémoire privée appelée zone de contexte pour le traitement des instructions SQL. L'instruction SQL est analysée (parse) et traitée dans cette zone. Les informations requises pour le traitement et les informations extraites après le traitement sont toutes stockées dans cette zone

Introduction Etant donné que cette zone est gérée en interne par le serveur Oracle, vous ne pouvez pas la contrôler. Un curseur est un pointeur vers la zone de contexte. Cependant, ce curseur est un curseur implicite, géré automatiquement par le serveur Oracle. Lorsque le bloc exécute une instruction SQL, le compilateur PL/SQL crée un curseur implicite.

Introduction Il existe deux types de curseur : Curseurs implicites : les curseurs implicites sont créés et gérés par le serveur Oracle. Vous n'y avez pas accès. Le serveur Oracle crée un tel curseur lorsqu'il doit exécuter une instruction SQL. Curseurs explicites : Ils sont créés et gérés par l'utilisateur pour traiter un ordre Select qui ramène plusieurs lignes. Le traitement du select se fera ligne par ligne.

Contrôler les curseurs explicites 1 Ouverture du curseur Pointeur de curseur 2 Extraction (fetch) d'une ligne Pointeur de curseur Pointeur de curseur 3 Fermeture du curseur

Déclaration d’un curseur DECALRE CURSOR nom_curseur IS instruction select; EXEMPLES DECLARE CURSOR emp_curseur IS SELECT employee_id, last_name FROM employees; CURSOR dept_curseur IS SELECT * FROM department ORDER BY departement_id; Vous déclarez ces curseurs dans la section déclarative d'un bloc PL/SQL. Rappelez-vous que vous pouvez également déclarer les variables et les exceptions dans la section déclarative.

Ouverture d’un curseur OPEN nom_curseur; Ouvre le curseur pour exécuter la requête et identifier l’ensemble des lignes. Si la requête ne retourne pas de ligne, aucune exception n’est signalée. Utilisez les attributs du curseur pour tester le résultat après l’affectation; EXEMPLE DECLARE CURSOR emp_curseur IS SELECT employee_id, last_name FROM employees; BEGIN OPEN emp_curseur; END; /

Ramener les données à partir d’un curseur FETCH nom_curseur INTO [variable1, variable2, … | record_name]; Charger les valeurs de la ligne courante dans des variables de sortie. Prévoir le même nombre de variables. Tester si le curseur contient des lignes.

Ramener des lignes à partir d’un curseur :Exemple DECLARE v_empno employees.employee_id%type; v_ename employees.last_name%type; CURSOR emp_curseur IS SELECT employee_id, last_name FROM employees; BEGIN IF NOT emp_curseur%ISOPEN THEN OPEN emp_curseur; END IF; FETCH emp_curseur INTO v_empno, v_ename; WHILE emp_curseur%FOUND LOOP dbms_output.put_line (v_empno ||' '|| v_ename); END LOOP; CLOSE emp_curseur; END; /

Attributs des curseurs Obtenir les informations d'état concernant un curseur : Attribut Type Description %ISOPEN Booléen Prend la valeur TRUE si le curseur est ouvert %NOTFOUND Booléen Prend la valeur TRUE si la dernière extraction (fetch) ne renvoie pas de ligne %FOUND Booléen Prend la valeur TRUE si la dernière extraction renvoie une ligne ; complément de %NOTFOUND %ROWCOUNT Nombre Prend la valeur correspondant au nombre total de lignes renvoyées jusqu'à présent

Attributs des curseurs:%isopen Utilisez l’attribut du curseur : %ISOPEN avant de réaliser une affectation, pour tester si le curseur est ouvert. EXEMPLE DECLARE CURSOR emp_curseur IS SELECT employee_id, last_name FROM employees; BEGIN IF NOT emp_curseur%ISOPEN THEN OPEN emp_curseur; END IF; END; /

Attributs des curseurs:%found / %notfound DECLARE v_empno emp.empno%type; v_ename emp.ename%type; CURSOR emp_curseur IS SELECT employee_id, last_name FROM employees; BEGIN IF NOT emp_curseur%ISOPEN THEN OPEN emp_curseur; END IF FETCH emp_curseur INTO v_empno, v_ename; WHILE emp_curseur%FOUND … END; /

Attributs des curseurs:%rowcount DECLARE CURSOR emp_curseur IS SELECT employee_id, last_name FROM employees; v_empno employees.employee_id%type; v_ename employees.last_name%type; BEGIN IF NOT emp_curseur%ISOPEN THEN OPEN emp_curseur; END IF; FETCH emp_curseur INTO v_empno, v_ename; WHILE emp_curseur%FOUND LOOP dbms_output.put_line(emp_curseur%rowcount); END LOOP; CLOSE emp_curseur; END; /

Fermeture d’un curseur CLOSE nom_curseur; EXEMPLE DECLARE CURSOR emp_curseur IS SELECT employee_id, last_name FROM employees; BEGIN OPEN emp_curseur; …. CLOSE emp_curseur; END; /

Utilisation simplifiée des curseurs(1) La simplification déclare implicitement une structure dont les éléments sont de même type que les colonnes retournées par le curseur. DECLARE CURSOR CUR_EMP IS SELECT EMPLOYEE_ID,LAST_NAME FROM EMPLOYEES; STRUCTURE_EMP CUR_EMP%ROWTYPE; Pour utiliser les colonnes de la structure : STRUCTURE_EMP.last_name La structure est renseignée par le fetch. Fetch CUR_EMP into STRUCTURE_EMP;

Utilisation simplifiée des curseurs(2) For..IN La syntaxe FOR IN est encore plus consise,elle évite de déclarer le curseur dans la partie declare. -- pas de déclaration du curseur dans la partie declare Begin For rec_emp in (select employee_id,last_name,job_id from employees) Loop -- ouverture automatique du curseur -- fetch automatique -- condition de sortie automatique Traitement …. …. End loop; -- fermeture automatique du curseur End;

Utilisation simplifiée des curseurs(2) For..IN Avec la version simplifiée ,l’exemple précédent devient: -- pas de déclaration du curseur -- pas de déclaration de structure Begin For emp_struct in (select employee_id,last_name,job_id from employees); Loop Traitement… On utilise les variables par: emp_struct.employee_id… End loop; -- Fermeture automatique End;

Curseurs paramétrés Un curseur paramétré peut servir plusieurs fois avec des valeurs des paramètres différentes. On doit fermer le curseur entre chaque utilisation de paramètres différents (sauf si on utilise « for » qui ferme automatiquement le curseur) Declare Cursor Nom_cur (param 1 type, param 2 type, …) is Nom_ordre_select ;

Curseurs paramétrés Begin Open Nom_cur(val1,val2..); …. Close Nom_cur; End; Le passage des valeurs des paramètres s’effectue lors de l’ouverture du curseur.

Curseurs paramétrés :exemple declare cursor cur(p_dept integer) is select department_id, last_name from employees where department_id= p_dept; begin for employee in cur(10) loop Dbms_output.put_line(employee.last_name); end loop; for employee in cur(20) loop end;