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

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

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

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

TP Contraintes - Triggers

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

Devoir Data WareHouse

Bases de Données Avancées PL/SQL

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

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

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

Présentation du PL/SQL

Introduction au PL/SQL Oracle. Alexandre Meslé

Le langage procédural PL-PGSQL

Corrigés détaillés des exercices

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

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

Algorithmique & programmation

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

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

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

TD : Requêtes SQL (BDR.TD2-1) INSA 3IF

CREATION WEB DYNAMIQUE

Génie Logiciel avec Ada. 4 février 2013

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

Mysql avec EasyPhp. 1 er mars 2006

Arbres binaires de recherche

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Programmer en JAVA. par Tama

Présentation Windows Azure Hadoop Big Data - BI

A QUOI SERVENT LES BASES DE DONNÉES?

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

Attaques applicatives

MS SQL Express 2005 Sauvegarde des données

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

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

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

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

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

1. Base de données SQLite

Quelques aspects du Relationnel-Objet du SGBD Oracle

PRÉAMBULE... 2 CRÉATION DE LA BASE DE DONNÉES...

Gestion de base de données

NIVEAU D'INTERVENTION DE LA PROGRAMMATION CONCURRENTE

Corrigé des TD 1 à 5

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

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

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

Création et Gestion des tables

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

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

Le prototype de la fonction main()

Introduction aux Bases de Données 2004/2005

4. Groupement d objets

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

Examen Médian - 1 heure 30

Olivier Mondet

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

CATALOGUE FORMATIONS DOMAINE Bases de données

Structure fonctionnelle d un SGBD

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

Exercices sur SQL server 2000

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

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)

Optimisation SQL. Quelques règles de bases

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

Propagation sur réseau statique et dynamique

Développement d applications avec les bases de données

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Application BdD et JDBC. Introduction 1/28. I Dans tout les cas, une seule problématique. I Quelques alternatives :

Gestion de stock pour un magasin

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

as Architecture des Systèmes d Information

Les bases de données

Plan. Bases de Données. Sources des transparents. Bases de SQL. L3 Info. Chapitre 4 : SQL LDD Le langage de manipulation de données : LMD

PROJET 1 : BASE DE DONNÉES REPARTIES

Comment Connecter une Base de Données MySQL via un Driver JDBC Avec OpenOffice.org

Intégrité des données

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

Groupe 11 TABLE DES MATIERES

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Introduction au langage C

Java Licence Professionnelle CISII,

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

Durée estimée :1 journée Date de la réalisation : Description Fournisseur Référence Nombre PU HT LM35CZ, LM35AZ LM35DZ

Administration des bases de données

Utilitaires méconnus de StrataFrame

Sage 100 CRM - Guide de la Fusion Avancée Version 8. Mise à jour : 2015 version 8

1 Position du problème

T. BLOTIN Lycée Paul-Eluard SAINT-DENIS

PHP. PHP et bases de données

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Modernisation, développement d applications et DB2 sous IBM i Technologies, outils et nouveautés Volubis.fr

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

Transcription:

Cours Bases de données 2ème année IUT Cours 3 : PL/SQL : ou comment faire plus avec ORACLE 1ère partie Anne Vilnat http://www.limsi.fr/individu/anne/cours

Plan 1 Introduction 2 Structure d un programme 3 Les Variables Les types simples les types complexes 4 les instructions Affectation Condition : IF Boucles : LOOP, FOR, WHILE 5 Les curseurs

Pourquoi PL/SQL? L utilisation de PL/SQL est indiquée : Pour effectuer des traitements de données qui impliquent des transactions complexes (plusieurs requêtes et manipulations de données liées). Pour effectuer un contrôle d intégrité des données (dans des triggers par exemple). Pour stocker dans la base de données les opérations fréquentes. (Packages et procédures stockées.) Pour minimiser le temps d interaction entre la base de données et la portion interface. Pour minimiser l impact des mises à jour sur une application avec un grand nombre de postes clients.

Structure d un programme Un programme ou une procédure PL/SQL est constitué d un ou plusieurs blocs. Description d un bloc 3 sections : Déclaration des structures et des variables utilisées dans le bloc (facultative) Corps qui contient les instructions (obligatoire) Traitement des erreurs : pour gérer les erreurs. (facultative)

Syntaxe d un bloc Syntaxe d un bloc anonyme DECLARE Partie déclaration... BEGIN Partie code... EXCEPTION Partie gestion des exceptions levées dans le code.... END;

Exemple d un bloc : la déclaration On veut rechercher combien de réalisateurs ont joué dans leurs propres films, et l afficher proprement DECLARE nbrealact NUMBER(5); singulierexception EXCEPTION;

Exemple d un bloc : le corps DECLARE nbrealact NUMBER(5); singulierexception EXCEPTION; BEGIN SELECT COUNT(distinct A.numIndividu) INTO nbrealact FROM Film F, Acteur A WHERE A.numIndividu = realisateur AND F.numFilm=A.numFilm; IF nbrealact = 1 THEN RAISE singulierexception; END IF; DBMS OUTPUT.PUT LINE(nbRealAct réalisateurs ont joué dans leur film );

Exemple d un bloc DECLARE nbrealact NUMBER(5); singulierexception EXCEPTION; BEGIN SELECT COUNT(distinct A.numIndividu) INTO nbrealact FROM Film F, Acteur A WHERE A.numIndividu = realisateur AND F.numFilm=A.numFilm; IF nbrealact = 1 THEN RAISE singulierexception; END IF; DBMS OUTPUT.PUT LINE(nbRealAct réalisateurs ont joué dans leur film ); EXCEPTION WHEN singulierexception THEN DBMS OUTPUT.PUT LINE( Un seul réalisateur a joué dans son film ); END;

Les Variables Déclaration d une variable nom variable [CONSTANT] type [[NOT NULL] := expression] CONSTANT : le bloc ne changera pas la valeur expression : pour initialiser la variable NOT NULL impose une initialisation type : le type de la variable simple : nombre, chaîne,... composé : tableau, enregistrement,,... faisant référence à une autre type

Les types de variables (1) Types simples numériques : NUMBER[(e,d)], BINARY INTEGER, BINARY FLOAT alphanumériques : CHAR, VARCHAR2, LONG,... date : DATE, TIMESTAMP (heures),... booléen : BOOLEAN une adresse d une ligne dans une table : ROWID

Les types de variables (1) Types simples numériques : NUMBER[(e,d)], BINARY INTEGER, BINARY FLOAT alphanumériques : CHAR, VARCHAR2, LONG,... date : DATE, TIMESTAMP (heures),... booléen : BOOLEAN une adresse d une ligne dans une table : ROWID Exemple nbacteurs NUMBER(5); nomacteur VARCHAR2(20);

Les types de variables (2) Types dérivés référence à une colonne ou à un type existant nomvariable nomtable.nomcolonne%type nomvariable nomvariableref%type référence à une ligne d une table ou d un curseur nomvariable nomtable%rowtype nomvariable nomcurseur%rowtype

Les types de variables (2) Types dérivés référence à une colonne ou à un type existant nomvariable nomtable.nomcolonne%type nomvariable nomvariableref%type référence à une ligne d une table ou d un curseur nomvariable nomtable%rowtype nomvariable nomcurseur%rowtype Exemple Quel est le format de nomindividu dans la table Individu? Quels sont les formats des attributs de la table Film? nomacteur Individu.NomIndividu%TYPE; film Film%ROWTYPE;

Les types de variables (3) Types définis sous-type d un type existant, avec SUBTYPE type complexe : TABLE, RECORD, VARRAY, avec TYPE

Les types de variables (3) Types définis sous-type d un type existant, avec SUBTYPE type complexe : TABLE, RECORD, VARRAY, avec TYPE Exemples les sous-types : SUBTYPE chainecourte IS VARCHAR2(20); SUBTYPE nompersonne IS Individu.NomIndividu%TYPE; SUBTYPE film IS Film%ROWTYPE; les types complexes : TYPE tablenombres IS TABLE OF NUMBER; TYPE tablefilms IS TABLE OF film;

Les instructions : l affectation Affectation simple : nomvariable := valeur par un SELECT... INTO quand le SELECT ne retourne qu une ligne Syntaxe SELECT listeattributs INTO listevariables FROM... SELECT listeattributs INTO nomstructure FROM... Exemple : SELECT * INTO film FROM Film WHERE NumFilm=1;

Les instructions : la condition Syntaxe IF condition THEN instructions; [ELSIF condition THEN instructions;] [ELSE instructions;] END IF;

Les instructions : la boucle Syntaxe LOOP instructions; IF condition THEN EXIT; instructions; END LOOP; ou : LOOP instructions; EXIT WHEN condition ; instructions; END LOOP;

Les instructions : la boucle FOR Syntaxe FOR variableboucle IN [REVERSE] borneinf.. bornesup LOOP instructions; END LOOP; avec ; variableboucle : variable locale à la boucle, non déclarée borneinf et bornesup : variables déclarées et initialisées ou constantes pas de boucle fixe à 1, éventuellement en décrement si REVERSE

Les instructions : la boucle WHILE Syntaxe WHILE condition LOOP instructions; END LOOP; Les instructions sont répétées tant que la condition est vraie...

Les curseurs: définition Quand une instruction SELECT peut renvoyer plusieurs lignes, il faut utiliser un curseur. Un curseur est une structure qui contient les informations suivantes : le texte source de l instruction SQL, le texte compilé de l instruction SQL, un tampon qui contiendra une ligne du résultat, le statut du curseur (cursor status), des informations de travail, des informations de contrôle.

Les curseurs : usage Déclaration CURSOR nomcurseur IS <texte requete>; Ouverture OPEN nomcurseur ; Utilisation FETCH nomcurseur INTO <liste variable> <nomstructure> ; Fermeture CLOSE nomcurseur ;

Les curseurs : exemple On veut afficher les titres des comédies. La déclaration : DECLARE monnumero ens2004.film.numfilm%type; montitre ens2004.film.titre%type; Cursor moncurseur IS SELECT f.numfilm, titre FROM ens2004.film f, ens2004.genrefilm g WHERE f.numfilm=g.numfilm AND codegenre= CO ;

Les curseurs : exemple suite DECLARE monnumero ens2004.film.numfilm%type; montitre ens2004.film.titre%type; Cursor moncurseur IS SELECT f.numfilm, titre FROM ens2004.film f, ens2004.genrefilm g WHERE f.numfilm=g.numfilm AND codegenre= CO ; BEGIN OPEN moncurseur ; LOOP FETCH moncurseur INTO monnumero, montitre; EXIT WHEN moncurseur%notfound; DBMS OUTPUT.PUT LINE( Son Numéro : monnumero SonTitre : montitre) ; END LOOP; DBMS OUTPUT.PUT LINE( Voici le nombre total de comédies : moncurseur%rowcount); CLOSE MonCurseur; END;

Les curseurs : exemple suite, autre formulation DECLARE cpt NUMBER:=0; Cursor moncurseur IS SELECT f.numfilm, titre FROM ens2004.film f, ens2004.genrefilm g WHERE f.numfilm=g.numfilm AND codegenre= CO ; BEGIN FOR lignecurseur IN moncurseur ; LOOP DBMS OUTPUT.PUT LINE( Son Numéro : lignecurseur.numfilm cpt:=cpt+1; SonTitre : lignecurseur.titre) ; END LOOP; DBMS OUTPUT.PUT LINE( Voici le total des comédies : cpt) END;