PL/SQL Présentation.

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.
Les Systèmes de Gestion de Bases de Données (SGBD) Les vues.
Vues.
PHP mySQL Extension php_mysql. Connexion à une base de données Établir une connexion mysql_connect(string server, string username, string password) –permet.
Programmation dapplication INT. 2 Bases de Données Plan du document Contexteslide 1 Programmer avec une BDslide 2 Client-Serveur SQL et architecture 3.
INTEGRITE ET BD ACTIVES
Faculté I&C, Claude Petitpierre, André Maurer Bases de données Javascript – SQL - LemanOS.
Année universitaire Système dinformation Le SQL (Structured Query Language) langage dinterrogation dune 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,
AYARI Mejdi Formation 2121 * ISD * 1 tructured uery Anguage 2006.
L’utilisation des bases de données
10 Copyright © Oracle Corporation, Tous droits réservés. Autres concepts relatifs aux déclencheurs.
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.
T ECHNOLOGIES O RACLE Manipulation des données © sebvita.com.
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
Gestion des erreurs Packages ©Alain Villeneuve, 1999
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
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.
Bases de Données Avancées - TP2: SQL
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
PHP & My SQL.
 CREATE TABLE  DROP TABLE  ALTER TABLE  INSERT  UPDATE  DELETE  SELECT interrogation 2 Instruction de mise à jour structure.
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 Transac SQL Intégrité des données.
Le Langage de BLOC PL/SQL
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.
Module 12 : Implémentation de procédures stockées.
(Procedural Language / Structured Query Language)
1 PHP 5 Notions fondamentales (cours #5) Formation continue – Cégep de Sainte-Foy.
Module 7 : Utilisation de requêtes élaborées
DEFINITION DES DONNEES : schéma conceptuel. Schéma conceptuel instructiondescription CREATE TABLEcréation d'une relation ALTER TABLEmodification de la.
6 Copyright © Oracle Corporation, Tous droits réservés. Autres concepts relatifs aux packages.
Variables et environnement utilisateur W. Barhoumi.
Module 13 : Implémentation de déclencheurs. Vue d'ensemble Présentation des déclencheurs Définition de déclencheurs Exemples de déclencheurs Performances.
 Formulaires HTML : traiter les entrées utilisateur
21/04/2015© Robert Godin. Tous droits réservés.1 6Gestion des contraintes d’intégrité en SQL n Contrainte d'intégrité statique – respectée pour chacun.
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
Conception de Site Webs Interactifs Cours 7 Patrick Reuter
Initiation au web dynamique Licence Professionnelle.
Cours 1 Introduction au PL/SQL
3 Copyright © Oracle Corporation, Tous droits réservés. Créer des fonctions.
4 Copyright © Oracle Corporation, Tous droits réservés. Gérer les sous-programmes.
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.
 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.
Définition des contraintes Vérification des contraintes Triggers
Le Langage de Contrôle de Données TRIGGERS
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
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.
Les bases de données Séance 8 Jointures.
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.
CHAPITRE 4 PL/SQL Langage SQL en mode procédural (PL/SQL):
Types de données composites
Nicolas Ribot Introduction aux triggers Nicolas Ribot - Licence GNU FDL - Version 1.1.
Cours n°2 Implémentation et exploitation
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.
Le Langage de Manipulation de Données LMD Module 6.
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.
Transcription de la présentation:

PL/SQL Présentation

Structure d’un programme PL/SQL DECLARE -- définition des variables BEGIN -- code du programme EXCEPTION -- code de gestion des erreurs END;

Déclaration, initalisation des variables Déclaration et initialisation Nom_variable type_variable := valeur; Initialisation Nom_variable := valeur;

Le type de variables VARCHAR2 NUMBER Longueur maximale : 32767 octets Syntaxe: Nom_variable VARCHAR2(30); Exemple: name VARCHAR2(30); name VARCHAR2(30) := ‘toto’; NUMBER Nom_variable NUMBER(long,dec); avec Long : longueur maximale Dec : longueur de la partie décimale Exemple: num_tel number(10); toto number(5,2)=142.12;

Le type de variables (2) DATE BOOLEAN Nom_variable DATE; Par défaut DD-MON-YY (18-DEC-02) Fonction TO_DATE Exemple : start_date := to_date(’29-SEP-2003’,’DD-MON-YYYY’); start_date := to_date(’29-SEP-2003:13:01’,’DD-MON-YYYY:HH24:MI’); BOOLEAN TRUE, FALSE ou NULL

Les principales commandes PL/SQL Les principales commandes

Test conditionnel IF-THEN IF-THEN-ELSE IF l_date > ’11-APR-03’ THEN l_salaire := l_salaire * 1.15; END IF; IF-THEN-ELSE ELSE l_salaire := l_salaire * 1.05;

Test conditionnel IF-THEN-ELSIF CASE IF l_nom = ’PAKER’ THEN l_salaire := l_salaire * 1.15; ELSIF l_nom = ‘ASTROFF’ THEN l_salaire := l_salaire * 1.05; END IF; CASE CASE sélecteur WHEN expression1 THEN résultat1 WHEN expression2 THEN résultat2 ELSE résultat3 END;

Test conditionnel Exemple : val := CASE city WHEN ‘TORONTO’ THEN ‘RAPTORS’ WHEN ‘LOS ANGELES’ THEN ‘LAKERS’ ELSE ‘NO TEAM’ END;

Les boucles LOOP instructions exécutables; END LOOP; Obligation d’utiliser la commande EXIT WHILE condition LOOP

Les boucles FOR variable IN val_deb..val_fin LOOP instructions; END LOOP;

Affichage Activer le retour écran Affichage set serveroutput on size 10000 Affichage dbms_output.put_line(chaîne); Utilise || pour faire une concaténation

Exemple n°1 DECLARE i number(2); BEGIN FOR i IN 1..5 LOOP dbms_output.put_line(‘Nombre : ’ || i ); END LOOP; END;

Exemple n°2 DECLARE compteur number(3); i number(3); BEGIN select count(*) into compteur from clients; FOR i IN 1..compteur LOOP dbms_output.put_line('Nombre : ' || i ); END LOOP; END;

Les curseurs DECLARE compteur number(3); i number(3); cursor get_nb_clients IS select count(*) from clients; BEGIN OPEN get_nb_clients; FETCH get_nb_clients INTO compteur; FOR i IN 1..compteur LOOP dbms_output.put_line('Nombre : ' || i ); END LOOP; CLOSE get_nb_clients; END;

Les curseurs (2) DECLARE nom varchar2(30); CURSOR get_nom_clients IS SELECT nom,adresse FROM clients; BEGIN FOR toto IN get_nom_clients LOOP dbms_output.put_line('Employé : ' || UPPER(toto.nom) ||' Ville : '|| toto.adresse); END LOOP; END;

Procédures et fonctions PL/SQL Procédures et fonctions

Les procédures create or replace procedure list_nom_clients IS BEGIN DECLARE nom varchar2(30); CURSOR get_nom_clients IS select nom,adresse from clients; FOR toto IN get_nom_clients LOOP dbms_output.put_line('Employé : ' || UPPER(toto.nom) ||' Ville : '|| toto.adresse); END LOOP; END;

Les procédures create or replace procedure list_nom_clients (ville IN varchar2, result OUT number) IS BEGIN DECLARE CURSOR get_nb_clients IS select count(*) from clients where adresse=ville; open get_nb_clients; fetch get_nb_clients INTO result; end;

Récupération des résultats Déclarer une variable SQL> variable nb number; Exécuter la fonction SQL> execute list_nom_clients('paris',:nb) Visualisation du résultat SQL> print Description des paramètres SQL> desc nom_procedure

Les fonctions create or replace function nombre_clients return number IS BEGIN DECLARE i number; CURSOR get_nb_clients IS select count(*) from clients; open get_nb_clients; fetch get_nb_clients INTO i; return i; end; Exécution: select nombre_clients() from dual

Procédures et fonctions Suppression de procédures ou fonctions DROP PROCEDURE nom_procedure DROP FUNCTION nom_fonction Table système contenant les procédures et fonctions : user_source

Exercices Réalisez une procédure list_tables qui donne le nom de toutes vos tables Réalisez une procédure UPDATENOM qui remplit correctement la colonne NOM_PIECE de clients par rapport à la table fournisseurs Réalisez une procédure UPDATEPRIX qui met à jour tous les prix de la table clients

Procédure LIST_TABLES create or replace procedure list_tables IS BEGIN DECLARE CURSOR get_nom IS select table_name from user_tables; FOR nom IN get_nom LOOP dbms_output.put_line('Nom de la table : ' || toto.table_name); END LOOP; END;

Procédure UPDATENOM CREATE OR REPLACE PROCEDURE updatenom IS BEGIN DECLARE nompiece varchar2(30); cursor toto IS SELECT distinct fournisseurs.reference, fournisseurs.nom_piece FROM fournisseurs; FOR nompiece IN toto LOOP UPDATE clients SET clients.nom_piece=nompiece.nom_piece WHERE clients.reference=nompiece.reference; END LOOP; END;

Procédure UPDATEPRIX CREATE OR REPLACE PROCEDURE updateprix IS BEGIN DECLARE prixunit number(5); CURSOR toto IS SELECT clients.nom, clients.adresse, fournisseurs.prix_piece_unite FROM fournisseurs,clients WHERE fournisseurs.reference=clients.reference; FOR prixunit IN toto LOOP UPDATE clients SET clients.prix=clients.quantite*prixunit.prix_piece_unite WHERE prixunit.nom=clients.nom and prixunit.adresse=clients.adresse; END LOOP; END;

Les déclencheurs (trigger) Automatiser des actions lors de certains événements du type : AFTER ou BEFORE et INSERT, DELETE ou UPDATE Syntaxe : CREATE OR REPLACE TRIGGER nom_trigger Evénement [OF liste colonne] ON nom_table WHEN (condition) [FOR EACH ROW] Instructions PL/SQL ou SQL

Accès aux valeurs modifiées Utilisation de new et old Si nous ajoutons un client dont le nom est toto alors nous récupérons ce nom grâce à la variable new.nom Dans le cas de suppression ou modification, les anciennes valeurs sont dans la variable old.nom

Exemple Archiver le nom de l’utilisateur, la date et l’action effectuée (toutes les informations) dans une table LOG_CLIENTS lors de l’ajout d’un clients dans la table CLIENTS Créer la table LOG_CLIENTS avec la même structure que CLIENTS Ajouter 3 colonnes USERNAME, DATEMODIF, TYPEMODIF

Exemple create or replace trigger logadd after insert on clients for each row begin insert into log_clients values (:new.nom,:new.adresse,:new.reference,:new.nom_piece, :new.quantite,:new.prix,:new.echeance, USER,SYSDATE,'INSERT'); end;

Exercices Ecrire un déclencheur de mise à jour automatique du prix lors de l’ajout d’un clients dans la table CLIENTS Ecrire un déclencheur de mise à jour automatique du nom de la pièce lors de l’ajout d’un clients dans la table CLIENTS Ecrire la mise à jour de la date d’échéance à 2 mois suivant la date courante (utilisation de la fonction add_months(date,nombre) )

Select … for update Select classique : non verrouillé Problème avec les curseurs Solution : Select … for update Résultat : verrouiller toutes les lignes jusqu’au prochain commit

Les exceptions et erreurs NO_DATA_FOUND Quand Select into ne retourne aucune ligne TOO_MANY_ROWS Quand Select into retourne plusieurs lignes OTHERS Toutes erreurs non interceptées RAISE_APPLICATION_ERROR Pour retourner une message d’erreur Numéro d’erreur entre -20000 et -20999