La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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

Présentations similaires


Présentation au sujet: "Oracle - PL / SQL (Procedural Language / Structured Query Language)"— Transcription de la présentation:

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

2 Problématique posée par SQL Mise en place dun 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. Les développeurs ont besoin dassembler des données et de les traiter ligne par ligne. Solution apportée par Oracle à partir de la version 6 SQL est un langage non procédural, répondant à la question QUOI ? Mais pas au COMMENT ?

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

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

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

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

7 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 :.

8 PARTIE DECLARATIVE BLOC PL/SQL TypeSyntaxeRemarques / Exemple NUMBERNUMBER [(total [, Décimal])]Total est max égal à 38. Salaire NUMBER(7,2) CHARCHAR [(longueur)]Nom CHAR(15) VARCHAR2VARCHAR2 [(longueur)]Le type chaîne le plus efficace sous Oracle DATE Date_Naiss DATE RAWRAW (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 Types classiques

9 PARTIE DECLARATIVE BLOC PL/SQL Types propres à PL/SQL TypeSyntaxeRemarques / Exemple BINARY_INTEGER -2 E 31-1 à +2 E à PLS_INTEGER à BOOLEAN Les valeurs : TRUE, FALSE, NULL Remarques Les types BINARY_INTEGER et PLS_INTEGER requièrent moins despaces que les types NUMBER.

10 PARTIE DECLARATIVE BLOC PL/SQL Conversion de types Conversion implicite : effectuée par PL/SQL Conversion explicites par les fonctions. BINARY_ INTEGER CHARVARCHAR2LONGNUMBERPLS_INT EGER DATERAWROWID BINARY_ INTEGEROUI CHAROUI VARCHAR2OUI LONGOUI NUMBEROUI PLS_INTEGEROUI DATEOUI RAWOUI ROWIDOUI Conversion explicites : TO_CHAR, TO_NUMBER, TO_DATE, TO_LOB, CHARTOROWID TO_SINGLE_BYTE, …

11 PARTIE DECLARATIVE BLOC PL/SQL Déclaration de variables Initialisation Dans la partie DECLARE Syntaxe1 : ; Avec opérateur daffectation := Par le mot clé DEFAULT (à la place de :=) Par la clause INTO de lordre SELECT Par le biais dun curseur Syntaxe2 : %TYPE ; Syntaxe2 : %TYPE ;

12 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 logiqueBOOLEAN; trouve logique%TYPE DEFAULT FALSE; nNUMBER :=-5; carreNUMBER :=n**2; -- Exemple 2 DECLARE nom_empVARCHAR2(35) NOT NULL :="BENOIT"; chaine VARCHAR2(25) DEFAULT 6; -- Conversion implicite nombreNUMBER(3) :=5; -- Conversion implicite piCONSTANT NUMBER :=3.14; -- Déclaration d'une constante -- Exemple 3 DECLARE sal employe.salaire%TYPE :=0;-- Même type que la colonne salaire de la table employe. Remarque La contrainte NOT NULL dune colonne ne sapplique sur la variable.

13 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 lattribut : %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 BEGIN SELECT nom,dt_entree -- Sélection de certains champs INTO agent.nom, agent.dt_entree FROM employe WHERE nom=DUMAS'; END;

14 PARTIE DECLARATIVE BLOC PL/SQL LES TYPES STRUCTURES - RECORD Syntaxe de déclaration du type TYPE IS RECORD (, … ); Utilisation. := ; Déclaration des variables de type record, … ; 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;

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

16 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;

17 PARTIE DECLARATIVE BLOC PL/SQL TABLEAUX – Primitives de manipulation des indices - PrimitivesRôle EXISTS(n)Retourne TRUE si l'élément d'indice n existe. COUNTRetourne le nombre d'éléments du tableau. FIRST & LASTLa 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. DELETESupprime 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.

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

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

20 PARTIE EXECUTABLE IF THEN -- Séquence1 instructions; ELSIF THEN -- Séquence2 Instructions; ELSIF THEN -- Séquence3 Instructions; … ELSIF THEN -- SéquenceN Instructions; ELSE -- Séquence_else Instructions; END IF; IF THEN -- Séquence1 instructions; ELSE -- Séquence2 instructions; END IF; IF THEN -- Séquence1 instructions; END IF; STRUCTURES CONDITIONNELLES

21 PARTIE EXECUTABLE FOR 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). WHILE LOOP … ; END LOOP ; [

22 PARTIE EXECUTABLE LES CURSEURS 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 IMPLICITES générés et gérés par le noyau Oracle pour chaque ordre SQL EXPLICITES Déclaré par l'user dans la section DECLARE d'un bloc PLS

23 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

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

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

26 TRAITEMENT DES LIGNES DU CURSEUR FETCH … INTO LES CURSEURS EXPLICITES Syntaxe BEGIN … ; FETCH INTO { | }; … ; END; 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;

27 FERMETURE D'UN CURSEUR CLOSE … LES CURSEURS EXPLICITES Syntaxe BEGIN … ; CLOSE ; … ; 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;

28 ATTRIBUTS DES CURSEURS LES CURSEURS EXPLICITES AttributTypeSyntaxeRôle %NOTFOUNDBooléen { }%ATTRIBUT Retourne TRUE si la dernière commande FETCH n'a pas ramené de lignes. %FOUNDBooléenRetourne TRUE si la dernière commande FETCH a ramené une ligne. %ROWCOUNTNumériqueRetourne le nombre de lignes ramenées par la commande FETCH. %ISOPENBooléenRetourne TRUE si le curseur est ouvert et FALSE sinon.

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

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


Télécharger ppt "Oracle - PL / SQL (Procedural Language / Structured Query Language)"

Présentations similaires


Annonces Google