Oracle by Alex
|
Home
|
Blocs Fonctions et procédures Paquetages Déclencheurs Programmes externes 2.4.2. Programmation des méthodes. Fonction MAP Fonction ORDER 2.4.3. Vues objet-relationnelles.
2.4.1. Le langage PL/SQL. PL/SQL (Procedural Language / Structured Query Language) est utilisé par Oracle depuis sa version 6. Il permet de combiner des structures conditionnelles et répétitives avec les requêtes SQL dans un même programme. Blocs On peut regrouper un ensemble de requêtes SQL dans un bloc. Un bloc est
envoyé entièrement du client vers le serveur. Ainsi on limite les accès au réseau.
Les résultats intermédiaires sont traités sur le serveur et un seul résultat
est renvoyé au client. Il est possible d'imbriquer les blocs. - Un bloc est composé de trois sections :
- PL/SQL dispose des structures de contrôle suivantes :
- Les exceptions sont de trois types :
Fonctions et procédures Il est possible de définir des fonctions ou procédures sur des tables. Elles prennent des arguments qui peuvent être des champs des tables et peuvent retourner une valeur dans le cas des procédures. On les déclare par les instructions :
Les fonctions et procédures cataloguées sont des routines PL/SQL qui sont compilées et stockées dans le dictionnaire de données. Si un objet du dictionnaire de données a été modifié dans le code, le noyau recompile le programme. Cette manière de faire présente 4 avantages : AVANTAGE : Sécurité : les droits d'accès ne
portent plus sur des objets mais sur des programmes stockés (instruction
GRANT). Paquetages Un paquetage ("package") permet de regrouper des structures de données et des programmes au sein d'un module unique. On peut y inclure des variables, des constantes, des curseurs, des procédures, des fonctions et des exceptions. Un paquetage est composé de deux parties :
Déclencheurs Les déclencheurs ("trigger") lancent l'exécution de programmes en fonction d'événements particuliers. Dans un contexte objet-relationnel, les déclencheurs aident à la programmation de l'encapsulation et du comportement des objets. Chaque déclencheur est associé à une table. Il se compose de deux parties : une partie qui décrit l'événement qui va réveiller le déclencheur et une partie qui décrit les traitements à effectuer le cas échéant. Les déclencheurs sont de deux types :
Un déclencheur de type "row" peut avoir accès aux valeurs avant et après modification des données de la BD. Enfin, on peut regrouper des déclencheurs selon le type d'événement les produisant (INSERT, UPDATE, DELETE) grâce à des clauses adaptées.
AVANTAGE : Mécanisme intéressant pour les
applications qui mettent en oeuvre des BD distribuées. Il est désormais
possible de gérer des informations réparties. Programmes externes Dans Oracle 8, on a ajouté la possibilité de faire appel à des programmes
externes. On peut utiliser des routines d'un langage de troisième génération
tel que C ou Cobol (voilà un langage qui a de l'avenir :-), stockées dans une
librairie dynamique .DLL (win) ou .SO (unix). AVANTAGE : Pour des raisons de sécurité, elle
s'exécute dans un espace séparé de celui de la base. En C, on est en effet
beaucoup plus proche de la machine...
2.4.2. Programmation des méthodes. On peut programmer des fonctions ou des procédures à inclure dans la définition d'un type pour être appliquées à des objets de ce type. On les déclare dans la clause CREATE TYPE et on les implémente dans la clause CREATE TYPE BODY. Une telle méthode ne peut être déclarée publique ou privée, contrairement aux fonctions ou procédures dans les paquetages. Dans une session multi-utilisateur, on peut interdire l'utilisation d'un type à un utilisateur, donc l'accès aux méthodes de ce type, mais on ne peut pas interdire l'utilisation de certaines méthodes seulement. La restriction de la vue des méthodes à l'extérieur est directement liée à la vue externe des types. Cette manière de faire est moins flexible qu'en Java ou en C++ qui utilisent des mots-clefs spécifiques (private, protected, friend,...) dont la portée s'étend à une méthode au moins. La granularité est plus fine. La surcharge est permise pour une méthode de type : tant au niveau du nombre de paramètres que de leur type. Deux fonctions particulières peuvent être implémentées pour permettre la comparaison d'objets d'un type créé par l'utilisateur : Fonction MAP. Cette fonction sera appelée implicitement lors d'une comparaison entre deux objets r1 et r2 du type (r1 > r2) par exemple. Fonction ORDER. Cette fonction à un paramètre compare l'objet en paramètre à l'objet instance de type qui appelle cette fonction. (SELF joue le rôle de this en Java). CREATE TYPE machin_type AS OBJECT (.... CREATE TYPE BODY machin_type AS On l'appelera comme suit : DECLARE
2.4.3. Vues objet-relationnelles. Les différences avec une vue relationnelle sont :
Pour créer une vue objet-relationnelle de tables relationnelles, on peut utiliser la clause MAKE_REF qui crée une référence à un objet d'une table. On peut utiliser une clause CAST qui transforme un type en un autre. Bref, pour définir une vue objet-relationnelle, il faut :
|