(Procedural Language / Structured Query Language)

Slides:



Advertisements
Présentations similaires
Prmt For imbriqués.
Advertisements

Bases de Données Avancées: Bases de Données Relationnelles
PL/SQL : Le Langage PL/SQL est une extension du SQL, qui offre
Les Systèmes de Gestion de Bases de Données (SGBD) PL-SQL.
Formation C débutant. Notion de compilation source.c executable Phase de compilation Fichier de texte brut, inexploitable directement par la machine Fichier.
Programmation dapplication INT. 2 Bases de Données Plan du document Contexteslide 1 Programmer avec une BDslide 2 Client-Serveur SQL et architecture 3.
Georges Gardarin 1 LE LANGAGE DE REQUETES SQL l Origines et Evolutions l SQL1 86: la base l SQL1 89: l'intégrité l SQL2 92: la nouvelle norme l SQL3 98:
High Frequency Trading Introduction. Séminaires de 30 minutes, une fois par semaine (8 en tout) Sujets abordés – Définition dun algorithme et introduction.
Connexion base de données
LE LANGAGE SQL : LDD La création de tables L’ordre CREATE CREATE TABLE nom_de_table (Nom_colonne Type_colonne, Nom_colonne Type_colonne,
LMD: Langage de Manipulation de Données
Langage Définition des
CYCLE 3 : Alternatives Faire des choix dans un programme en C 1- AIGUILLAGE SIMPLE sur CONDITION : if-else 2-AIGUILLAGE MULTIPLE sur CONDITIONS if-else.
10 Copyright © Oracle Corporation, Tous droits réservés. Autres concepts relatifs aux déclencheurs.
Présentation du langage SQL / ORACLE
T ECHNOLOGIES O RACLE Manipulation des données © sebvita.com.
Le PHP – la base Les commentaires */ ?>. Le PHP – le terminateur dinstruction Le point virgule Le point virgule est utilisé pour terminer une"; echo instruction.
TRANSACTION : confirmation, annulation. transactions : début transactionSET TRANSACTION SAVEPOINT annulerROLLBACK fin transactionCOMMIT.
1 Développement des Applications des Bases de Données Chapitre 6, Sections
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.
Cours N°2 Base de Données & Langage SQL
Algorithme et programmation
1 LE LANGAGE DE REQUETES SQL Origines et Evolutions SQL1 86: la base SQL1 89: l'intégrité.
PLSQL ORACLE 8i Connecter VB à BD Oracle Les collections Question de révision Les blocs anonymes Les triggers REVISION Par : Joël Huot.
Principes de programmation
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 SQL: Contraintes et Triggers Chapitre 5,
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 Développement des Applications des Bases de Données Chapitre 6, Sections
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
PL/SQL Noreddine GHERABI 1.
Christine Bonnet SOURCES : « Samples » dOracle, « Oracle 8 » R. Chapuis PRO*C – C ++
Les transactions.
Procédures Stockées Schedule: Timing Topic 60 minutes Lecture
LANGAGE PASCAL Introduction rapide….
23/03/05SE Info2 - S. L'haire UNIGE1 TP 7 PROCEDURE Inserer(VAR a, crt : AgendaPtr; j, h : INTEGER; IN s : Chaine); VAR nouveau, temp : AgendaPtr; BEGIN.
27/02/2006L3 MIAGE - GLO ADA1 Les Paquetages Permettent d’encapsuler un groupe d’entités logiquement reliées. Comme toute unité de programme, le paquetage.
SQL Partie 2. SQL est un Langage de Manipulation de Données SQL est un langage de manipulation de données (LMD), cela signifie qu'il permet de sélectionner,
Le langage SQL LDD : Langage de Définition de Données
IUPm3- Université de Nantes
Chap 4.5 : SQL (LDD) LDD : Langage de définition de données Réfs : Manuel p105.
 CREATE TABLE  DROP TABLE  ALTER TABLE  INSERT  UPDATE  DELETE  SELECT interrogation 2 Instruction de mise à jour structure.
Le Langage de BLOC PL/SQL
SQL (deuxième partie) Langage de manipulation de données (LMD) Chap 4.6 p 107.
Créer des déclencheurs de base de données
Chapitre 6.2 Les curseurs Cours SGBD 3A Mme hkimi Jihène
Créer des packages.
Un survol du language C.
(Procedural Language / Structured Query Language)
DEFINITION DES DONNEES : schéma conceptuel. Schéma conceptuel instructiondescription CREATE TABLEcréation d'une relation ALTER TABLEmodification de la.
Gérer les rôles.
Cours LCS N°4 Présenté par Mr: LALLALI
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
Création et Gestion de Tables
3 Copyright © Oracle Corporation, Tous droits réservés. Créer des fonctions.
 L’information est conservée sous forme de tables  Contient: ◦ Un nom ◦ Une clé primaire ◦ Une liste de colonnes ◦ Les informations/données (sous forme.
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.
Structured Query Language 1/34. SQL Types de données Langage de Définition de Données (LDD) Langage de Manipulation de Données (LDM) Langage de Contrôle.
Le Langage de Manipulation de Données LMD. 2 Les ordres SQL de manipulation INSERT –Insertion (ajout) de ligne(s) dans une table –Utiliser SQL*LOAD pour.
Types de données composites
Le langage SQL.
Nicolas Ribot Introduction aux triggers Nicolas Ribot - Licence GNU FDL - Version 1.1.
Introduction au langage PL/SQL
Le Langage de Manipulation de Données LMD Module 6.
CONCEPTS BD - Synthèse journée 1 :
SQL Partie 2. SQL est un langage de manipulation de données SQL est un langage de manipulation de données (LMD), cela signifie qu'il permet de sélectionner,
1 Les bases de données Séance 5 -- Le Langage de Définition de Données ou la manœuvre de la structure de la base -- Le Langage de Manœuvre de Données.
Manipulation D’Une Base De Données
Transcription de la présentation:

(Procedural Language / Structured Query Language) Oracle - PL / SQL (Procedural Language / Structured Query Language)

Problématique posée par SQL SQL est un langage non procédural, répondant à la question QUOI ? Mais pas au COMMENT ? Les développeurs ont besoin d’assembler des données et de les traiter ligne par ligne. Solution apportée par Oracle à partir de la version 6 Mise en place d’un langage de traitement procédural qui facilite la tâche des développeurs et qui permet de pallier aux carences du langage SQL : PL/SQL.

Oracle APPLICATION (PGI) Présentation du langage PL/SQL D Noyau DICTIONNAIRE DONNEES SQL DEVELOPPER DESIGNER Oracle APPLICATION (PGI) PL/SQL

Présentation du langage PL/SQL SQL STATEMENT EXECUTOR Intégré au noyau RDBMS. PROCEDURAL STATEMENT EXECUTOR Intégré au noyau et aux outils (Forms, Rports, OAS, …) REGLES Déclarations possibles des variables. Intégration de la majorité des ordres SQL.. Traitements séquentiels. Exécution conditionnelle de blocs d’instructions. Traitements répétitifs (boucles). Gestion des exceptions.

LID LMD TRANSACTION FONCTIONS Intégrés Non intégrés SQL & PL/SQL SELECT INSERT UPDATE DELETE LOCK TABLE COMMIT ROLLBACK SAVEPOINT SET TRANSACTION SUM DECODE MOD UPPER SYSDATE TO_CHAR … Non intégrés CREATE ALTER DRPO GRANT REVOKE ALTER SESSION SET ROLE ALTER SYSTEM EXPLAIN PLAN

BLOC PL/SQL DECLARE BEGIN … END EXCEPTION STRUCRURE D’UN BLOC PL/SQL BLOC PL/SQL Partie déclarative (optionnelle) Partie exécutable (obligatoire) Partie exception (optionnelle) DECLARE BEGIN … END EXCEPTION Chaque instruction se termine par un point virgule. Les commentaires sont possibles /* */. Possibilité d’imbrication des blocs.

PARTIE DECLARATIVE BLOC PL/SQL LES VARIABLES & LES TYPES Les variables locales : Elles ne sont pas visibles dans tous les blocs. Elles peuvent être simples ou structurées. Les variables globales : elles sont déclarées dans la partie commune à tous les blocs. Elles peuvent être simples ou structurées. Les variables externes (bind variables) : elles sont externes à tous les blocs. (variables sql+, variables pro*, champs dans les forms). Remarque Les variables externes sont précédées de :.

PARTIE DECLARATIVE BLOC PL/SQL Types classiques Type Syntaxe Remarques / Exemple NUMBER NUMBER [(total [ , Décimal])] Total est max égal à 38. Salaire NUMBER(7,2) CHAR CHAR [(longueur)] Nom CHAR(15) VARCHAR2 VARCHAR2 [(longueur)] Le type chaîne le plus efficace sous Oracle DATE Date_Naiss DATE RAW RAW (longueur) Géré comme le VARCHAR2, mais pas affichable. Seq RAW(100) LONG Permet de stocker des chaînes d'une longueur max de 2 Go. Texte LONG LONG RAW Stockage de fichiers binaires comme les images, son et de la vidéo. Longueur max est 2Go Photo LONG RAW

PARTIE DECLARATIVE BLOC PL/SQL Types propres à PL/SQL Type Syntaxe Remarques / Exemple BINARY_INTEGER -2E31-1 à +2E31-1 -2.147.483.647 à + 2.147.483.647 PLS_INTEGER BOOLEAN Les valeurs : TRUE, FALSE, NULL Remarques Les types BINARY_INTEGER et PLS_INTEGER requièrent moins d’espaces que les types NUMBER.

PARTIE DECLARATIVE BLOC PL/SQL Conversion de types Conversion implicite : effectuée par PL/SQL Conversion explicites par les fonctions. BINARY_ INTEGER CHAR VARCHAR2 LONG NUMBER PLS_INTEGER DATE RAW ROWID OUI Conversion explicites : TO_CHAR, TO_NUMBER, TO_DATE, TO_LOB, CHARTOROWID TO_SINGLE_BYTE, …

Déclaration de variables PARTIE DECLARATIVE BLOC PL/SQL Dans la partie DECLARE Déclaration de variables Syntaxe1 : <nom_var> <type> <initialisation> ; Syntaxe2 : <nom_var> <nom_var_ref>%TYPE <init> ; Syntaxe2 : <nom_var> <nom_table.nom_var_ref>%TYPE <init> ; Avec opérateur d’affectation := Initialisation Par le mot clé DEFAULT (à la place de :=) Par la clause INTO de l’ordre SELECT Par le biais d’un curseur

PARTIE DECLARATIVE BLOC PL/SQL Exemples de déclarations -- Exemple 1 DECLARE num_emp NUMBER(10); date_jour DATE :=SYSDATE; -- Initialisée à la date du jour logique BOOLEAN; trouve logique%TYPE DEFAULT FALSE; n NUMBER :=-5; carre NUMBER :=n**2; -- Exemple 2 nom_emp VARCHAR2(35) NOT NULL :="BENOIT’"; chaine VARCHAR2(25) DEFAULT 6; -- Conversion implicite nombre NUMBER(3) :=‘5’; -- Conversion implicite pi CONSTANT NUMBER :=3.14; -- Déclaration d'une constante -- Exemple 3 sal employe.salaire%TYPE :=0; -- Même type que la colonne salaire de la table employe. Remarque La contrainte NOT NULL d’une colonne ne s’applique sur la variable.

PARTIE DECLARATIVE BLOC PL/SQL Les variables référencées à une table de la base Elles sont liées à des tables au niveau de la base. On les déclare par l’attribut : %ROWTYPE Exemples DECLARE agent employe%ROWTYPE -- employe est la table employe de la base. Au niveau traitement, on pourra écrire : BEGIN SELECT * -- Sélection de tous les champs INTO agent FROM employe WHERE nom=‘DUMAS’; END; Ou SELECT nom,dt_entree -- Sélection de certains champs INTO agent.nom, agent.dt_entree WHERE nom=‘DUMAS';

PARTIE DECLARATIVE BLOC PL/SQL Syntaxe de déclaration du type TYPE <nom_type_record> IS RECORD ( <membre1 > <type1>, <membre2 > <type2>, … <membren > <typen> ); LES TYPES STRUCTURES - RECORD 1 2 Déclaration des variables de type record <nom_type_record> <nom_variable>, … ; Exemple DECLARE TYPE emp_type_rec IS RECORD (num employe.empno%TYPE, service e_service.nom%TYPE, salaire NUMBER(11,2), date_jour DATE :=SYSDATE); var_emp1 emp_type_rec; var_emp2 emp_type_rec; v_emp1.num:=2550; v_emp1.nom:='LAROUSSI' v_emp2:=v_emp1; 4 3 Utilisation <nom_variable>.<membre> := <expression>;

PARTIE DECLARATIVE BLOC PL/SQL Syntaxe de déclaration du type TYPE <nom_type_tableau> IS TABLE OF <type_simple>| <type_record>|<Colonne_Table> … INDEX BY BINARY_INTEGER ; LES TYPES STRUCTURES - TABLEAUX 1 2 Remarques La valeur de l'indice varie de : -2.147.483.647 à + 2.147.483.647. Les lignes intermédiaires existent potentiellement mais n'occupent aucun espace. Déclaration des variables de type tableau <nom_type_tableau> <var_tableau> ; 3 Accès aux données <var_tableau>(<indice>) := <expression> ;

PARTIE DECLARATIVE BLOC PL/SQL LES TYPES STRUCTURES - TABLEAUX Exemple DECLARE TYPE t_tab_salaire TABLE OF NUMBER(11,3); tab1 t_tab_salaire; BEGIN tab1(-100) := 2500; tab1(-50) := 1500; tab1(15) :=2000; END;

PARTIE DECLARATIVE BLOC PL/SQL TABLEAUX – Primitives de manipulation des indices - Primitives Rôle EXISTS(n) Retourne TRUE si l'élément d'indice n existe. COUNT Retourne le nombre d'éléments du tableau. FIRST & LAST La plus petite et la plus grande valeur de l'indice du tableau. PRIOR(n) Valeur de l'indice qui précède n. NEXT(n) Valeur de l'indice qui suit n. DELETE Supprime tous les éléments du tableau. DELETE(n) Supprime le nième élément du tableau. DELETE(m,n) Supprime les éléments de m à n.

Opérateurs PARTIE EXECUTABLE Type Rôle ARITHMETIQUES + , - , * , ** , / RELATIONNELS <> , != , < , > , = , IS NOT NULL , IN , LIKE , AND , OR , BETWEEN , … AUTRES OPERATEURS ( ) , ; , , , . , := , || , /* .. */ , Remarques Un système de priorité est respecté pour l'évaluation des expressions ( ) , ** , * / , + - .

PARTIE EXECUTABLE STRUCTURES CONDITIONNELLES STRUCTURES REPETITIVES DE CONTROLE STRUCTURES CONDITIONNELLES STRUCTURES REPETITIVES IF… THEN … END IF LOOP … END LOOP IF … THEN … ELSE … END IF WHILE … LOOP … END LOOP FOR … LOOP … END LOOP IF … THEN … ELSIF … ELSE … END IF

PARTIE EXECUTABLE STRUCTURES CONDITIONNELLES IF <condition1> THEN -- Séquence1 instructions; ELSIF <condition2> THEN -- Séquence2 Instructions; ELSIF <condition3> THEN -- Séquence3 Instructions; … ELSIF <conditionN> THEN -- SéquenceN Instructions; ELSE -- Séquence_else Instructions; END IF; IF <condition> THEN -- Séquence1 instructions; END IF; IF <condition> THEN -- Séquence1 instructions; ELSE -- Séquence2 instructions; END IF;

PARTIE EXECUTABLE STRUCTURES REPETITIVES FOR <compteur> IN [REVERSE] b_inf..b_sup LOOP … ; END LOOP; Compteur est déclarée implicitement. Interdiction de modification de compteur dans la boucle. La notion de pas n'existe pas (pas=1 ou -1). [<label<] LOOP … ; EXIT [label] [ WHEN <condition>] ; … END LOOP [label] ; WHILE <condition> LOOP … ; END LOOP ;

LES CURSEURS PARTIE EXECUTABLE CURSEURS EXPLICITES IMPLICITES Une zone mémoire de taille fixe contenant le résultat d'une requête. Utilisée pour interpréter et analyser les ordres SQL. Le nombre de curseurs ouverts simultanément est défini par le paramètre OPEN_CURSORS . dans le PFILE de la base. CURSEURS EXPLICITES Déclaré par l'user dans la section DECLARE d'un bloc PLS IMPLICITES générés et gérés par le noyau Oracle pour chaque ordre SQL

LES CURSEURS EXPLICITES Étapes de création d'un CURSEUR explicite DECLARATION DU CURSEUR CURSOR … IS OUVERTURE DU CURSEUR OPEN ACCES AU CURSEUR FETCH … INTO FERMETURE DU CURSEUR CLOSE

LES CURSEURS EXPLICITES Syntaxe DECLARE CURSOR <nom_curseur> IS SELECT col1, col2, col3, … FROM tab1, tab2, tab3, … WHERE <condition>; … ; DECLARATION DU CURSEUR CURSOR … IS Exemple DECLARE CURSOR c_employe IS SELECT empno, ename, salaire FROM employe WHERE salaire BETWEEN 1000 AND 2500 ;

LES CURSEURS EXPLICITES Syntaxe BEGIN … ; OPEN <nom_curseur>; END; OUVERTURE D'UN CURSEUR OPEN … Exemple DECLARE CURSOR c_employe IS SELECT empno, ename, salaire FROM employe WHERE salaire BETWEEN 1000 AND 2500 ; BEGIN OPEN c_employe; … ; END;

LES CURSEURS EXPLICITES Syntaxe BEGIN … ; FETCH <nom_cur> INTO {<liste_var> |<var_record>}; END; TRAITEMENT DES LIGNES DU CURSEUR FETCH … INTO Exemple DECLARE no employe.empno%TYPE; -- Variables programmes name employe.ename%TYPE; CURSOR c_employe IS -- Curseur SELECT empno, ename FROM employe WHERE salaire BETWEEN 1000 AND 2500 ; BEGIN OPEN c_employe; FETCH c_employe INTO no,ename; -- Accès aux lignes du cruseur DBMS_OUTPUT.PUT_LINE(no,ename) ; END;

LES CURSEURS EXPLICITES FERMETURE D'UN CURSEUR CLOSE … Syntaxe BEGIN … ; CLOSE <nom_curseur>; END; Exemple DECLARE CURSOR c_employe IS SELECT empno, ename, salaire FROM employe WHERE salaire BETWEEN 1000 AND 2500 ; BEGIN OPEN c_employe; … ; CLOSE c_employe; END;

LES CURSEURS EXPLICITES ATTRIBUTS DES CURSEURS Attribut Type Syntaxe Rôle %NOTFOUND Booléen {<nom_cursor>}%ATTRIBUT Retourne TRUE si la dernière commande FETCH n'a pas ramené de lignes. %FOUND Retourne TRUE si la dernière commande FETCH a ramené une ligne. %ROWCOUNT Numérique Retourne le nombre de lignes ramenées par la commande FETCH. %ISOPEN Retourne TRUE si le curseur est ouvert et FALSE sinon.

LES CURSEURS EXPLICITES Parcours des lignes d'un curseur En passant par la boucle LOOP … END LOOP BEGIN LOOP FETCH … ; INTO … ; IF <curseur>%FOUND THEN … ELSE EXIT ; END IF END LOOP; En utilisant la boucle FOR enreg IN <nom_curseur> LOOP … END LOOP; Exemple FOR enreg IN c_employe LOOP … END LOOP;

LES CURSEURS PARAMETRES Il est possible de paramétrer un curseur pour une utilisation commune à plusieurs traitements. Syntaxe déclaration DECLARE CURSOR <nom_curseur> (p1 type_p1 [,p2 type_p2 [, …]) IS SELECT … FROM … WHERE <condition qui utilisent les paramètres> …; Utilisation du curseur paramétrer BEGIN OPEN <nom_cur>(val1,[,val2 [,…]); FETCH <nom_cur> INTO …; CLOSE <nom_cur>; END;