Plan du cours - Bases de données objet : objectifs, principe, mise en oeuvre sous Oracle - Aspect système des bases de données : fichiers, index et hachage.

Slides:



Advertisements
Présentations similaires
REFERENTIEL DE LA SERIE STG
Advertisements

Bases de Données Avancées: Bases de Données Relationnelles
Chap. 4 Recherche en Table
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.
Le modèle Relationnel Objet d'Oracle
Bases de données orientées-objets
Oracle: OO.
Structures et unions types énumérés Qu'est-ce qu'une structure
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,
1 ARCHITECTURE DACCÈS la méthode générale modèle de données définitions module daccès / modules métiers construction des modèles les modules daccès, les.
Les contraintes d’integrité
Développement d’applications web
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
AYARI Mejdi Formation 2121 * ISD * 1 tructured uery Anguage 2006.
Structures de données linéaires
Contrôles d'accès aux données
L’utilisation des bases de données
Rappel sur les bases de données et le vocabulaire
Initiation à la conception de systèmes d'information
Chap 4 Les bases de données et le modèle relationnel
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
L’utilisation des bases de données
SQL Partie 3 : (LID : Langage d'interrogation de données)
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 Procédures stockées CPI-SQLServer.
Les concepts et les méthodes des bases de données
Christine Bonnet SOURCES : « Samples » dOracle, « Oracle 8 » R. Chapuis PRO*C – C ++
LE LANGAGE DE REQUETES SQL2
Bases de données orientées objets SGBD relationnels-objets
Bases de données orientées objets Illustration sur ORACLE
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.
Cours n°4M2. ESCE (S. Sidhom) Séminaire ( 6-12 Février 2007 ) Promo. M2 ESCE-Tunis 2006/07 Conception d’un système d'information sur Internet Architecture.
JDBC L'API JDBC est utilisée pour utilisée pour intéragir avec une base de données.
Créer des packages.
1 BDs Orientées Objets Witold LITWIN. 2 Pourquoi ? F Les BDs relationnelles ne sont pas adaptées aux applications CAD/CAM, cartes géo... F le problème.
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
1 PHP 5 Notions fondamentales (cours #5) Formation continue – Cégep de Sainte-Foy.
DEFINITION DES DONNEES : schéma conceptuel. Schéma conceptuel instructiondescription CREATE TABLEcréation d'une relation ALTER TABLEmodification de la.
Module 4 : Implémentation de l'intégrité des données.
6 Copyright © Oracle Corporation, Tous droits réservés. Autres concepts relatifs aux packages.
Sélection de colonnes (la projection)
Cours LCS N°4 Présenté par Mr: LALLALI
Quinio1 Bases de données : modèlisation et SGBD Séance 3 B Quinio.
Création et Gestion de Tables
3 Copyright © Oracle Corporation, Tous droits réservés. Créer des fonctions.
Cours n°4M1.ist-ie (S. Sidhom) UE 203 Promo. M1 IST-IE 2006/07 Conception d’un système d'information sur Internet Architecture trois-tiers : technologies.
Les vues Une vue: c’est une relation virtuelle. Définie par:
 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.
Cours Access TuanLoc NGUYEN. Contact Nguyen TuanLoc Tél: Web:
Bases de Données Avancées - TP2: SQL
1 Structure en MC Principes Stockage des données dans la mémoire volatile d’un ordinateur Problèmes Stockage temporaire «Petits» volumes de données Langages.
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 SQL.
Séance /10/2004 SGBD - Approches & Principes.
Initiation aux bases de données et à la programmation événementielle
NIVEAU LOGIQUE Vues. Fenêtre dynamique sur la base Ses données proviennent d'autres tables ou d'autres vues.
INTRODUCTION AUX BASES DE DONNEES Base et métabase
Cours n°2 Implémentation et exploitation
Introduction Module 1.
Le Langage de Manipulation de Données LMD Module 6.
Le langage SQL LA Plan 1. Introduction Rappels sur le modèle relationnel Les caractéristiques du langage SQL 2. Le Langage d'Interrogation des.
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,
Les bases de données Séance 4 Construction du Modèle Physique (la BDD)
Bases de données : modèlisation et SGBD Séance 3.
1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 4 Support de cours rédigé par Bernard COFFIN Université.
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:

Plan du cours - Bases de données objet : objectifs, principe, mise en oeuvre sous Oracle - Aspect système des bases de données : fichiers, index et hachage - Organisation et administration d'un SGBD - PL/SQL

Rappels sur le modèle relationnel Structure conceptuelle simple et visuelle - Le schéma définit la structure de la table - les n-uplets représentent les différents éléments Les tables respectent des propriétés définies sur les dépendances fonctionnelles

Rappels sur le modèle relationnel Avantage du modèle relationnel - organisation structurée et cohérente des données - permanence des données - accessibilité par des utilisateurs concurrents le modèle le plus utilisé dans l'industrie

Rappels sur le modèle relationnel Faiblesse du modèle relationnel - Absence de pointeurs visibles ( sans jointure à calculer )‏ - non-support de domaine composés (FN1)‏ (ex : adresse), des objets multimédia Mauvais support pour CAO, BD géographique,... qui gèrent des données : - de structures complexes - multimédia

Rappels sur le modèle relationnel On veut donc un SGBD qui permet de traiter : - des éléments de structure complexe - des opérations sur ces éléments - des pointeurs reliant les éléments (peut permettre l'héritage Pour traiter ce genre d'information, il nous faut des SGBD objets

L'objet et les BD Deux manières d'utiliser l'objet avec les BD On part de langages objet dans lequels on intégre les caractéristique des SGBD --> SGBD orientés objet : O2(basé sur C++),Objet Store On part de SGBD relationnels dans lesquels on insère des objets --> SGBD Relationnels Objet : Oracle (SQL3), Informix Universal Server,...

L'objet et les BD Constat les SGBDOO sont les plus 'propres' et les mieux adaptés pour traiter les objets mais ils sont très peu introduits dans l'industrie Les SGBDRO sont basés sur des SGBD robustes et éprouvés qui sont très répondus dans l'industrie mais qui ne sont pas du tout prévus pour l'objet

SGBDRO

On veut un modèle qui intègre des objets complexes dans un modèle relationnel

Exemple de table et de n-uplet N constat Pers. Photo 111 Carla 379 Jean Nom Age Carla 41 Jean 22 Elysée, Paris N.Sarkozy12345 AccidentsConducteursAdresseNomN°contrat 1 n-uplet de la base On a moins besoin ‘d’aplatir’ les données On a donc besoin de moins de jointure

Bases de données Objet 2 types sont utilisés dans les BD objet : Types de base standard (Char,Varchar,Number(p,s),date…)‏ Types utilisateurs l’utilisateur peut définir des types qui seront ensuite utilisés comme des types standard  Types Objets contiennent une structure complexe et éventuellement des opérations et des méthodes

Exemple de création de type utilisateur CREATE TYPE t-adresse AS OBJECT ( no NUMBER, rue VARCHAR(50), ville VARCHAR(30), codepostale CHAR(5)‏ );

Utilisation des types dans une table objet-relationnelle Une table objet-relationnelle est une table qui contient des éléments ayant un type-objet. Les éléments sont des objets et peuvent être identifiés par leur OID (Object Identifier)‏

Utilisation des types dans une table objet-relationnelle CREATE TABLE adresses OF t_adresse ; CREATE TABLE adresses OF t_adresse (ville DEFAULT 'Angers'); On peut définir des contraintes

Insertion dans une table objet- relationnelle L’insertion peut se faire de 2 manières : –Soit en utilisant le constructeur de type (Vision d’une table d’objets)‏ –Soit en insérant les valeurs des attributs de l’objet (Vision d’une table relaionnelle standard)‏

Insertion dans une table objet- relationnelle INSERT INTO adresses VALUES (t_adresse(2,'bd Lavoisier','Angers','49045')) ; INSERT INTO adresses VALUES (2,'bd Lavoisier','Angers','49045') ; Objet particulier à ajouter à la table Valeurs des attributs à ajouter à la table

Interrogation dans une table objet-relationnelle (1)‏ SELECT a.no, a.rue, a.ville, a.cp FROM adresses a ;  Pour accéder aux valeurs des attributs des objets norue villeCP 2Bd LavoiAngers49045 Comme pour le relationnel standard Utiliser des alias pour les noms des tables

Intérrogation dans une table objet-relationnelle (2)‏ SELECT Value (a) FROM adresses a ;  Pour accéder aux objets value (a) (no,rue,ville, cp)‏ t_adresse(2,'bdLavoisier','Angers','49045')‏ Pour récupérer les objets

Intérrogation dans une table objet-relationnelle (3)‏ SELECT REF (a) FROM adresses a ;  Pour accéder aux OID pour récuperer les OID des objets On récupère des références sous forme de suite de lettres et de chiffres

Utilisation d'un type objet CREATE TABLE employes (num NUMBER, dept NUMBER, salaire NUMBER, adresse t_adresse) ; dans une table relationnelle : pour définir une relation CREATE TYPE t_etudiant AS OBJECT (ine VARCHAR(10), nom VARCHAR(50), adresse t_adresse) ; dans un autre type objet : pour définir d’autres types objet

Insertion dans une table relationnelle dont l'un des attributs est un type utilisateur INSERT INTO emloyes VALUES (15, 'Info', 2000, t_adresse(2,'bd Lavoisier','Angers','49045') ; ici on ajoute un objet donc on utilise le constructeur de type

Intérrogation d'une table relationnelle comportant des objets SELECT * FROM employes ; SELECT e.adr FROM employes e; SELECT e.adr.no FROM employes e;

Remarques (1)‏ Ici, il s'agit d'une table relationnelle standard et pas d'une table objet-relationnelle donc les objets n'ont pas d'OID, ce qui entraine que REF (e.adr) ou value (e.adr) n'ont pas de signification.

Remarques (2)‏ Si on veut utiliser des objets qui sont utilisés à plusieurs endroits (dans plusieurs tables), le mieux est de les conserver dans une table objet-relationnelle à part et de faire référence à ces objets (à l'aide des OID) à partir des tables qui les utilisent ABC259 OID d'une adresse dans la table adresse qui est une table objet-relationnelle

Utilisation d'un type objet par l'intermédiaire des pointeurs Si on déclare un type objet, on peut créer des tables qui contiennent non pas l'objet tout entier mais une référence à cet objet (on ne conserve que l'OID)‏ Lors de l'interrogation, ça fonctionne de la même manière que si l'objet était physiquement présent dans la table mais ça permet de ne pas perdre inutilement de place de stokage et ça évite les redondances

Exemple de définition de types utilisant des pointeurs CREATE TYPE t_ville AS OBJECT (nom VARCHAR(30), population NUMBER); CREATE TYPE t_pays AS OBJECT (nom VARCHAR(30), capitale REF t_ville population NUMBER); CREATE TABLE pays OF t_pays ; En créant un autre type objet CREATE TABLE pays (nom VARCHAR(30), capitale REF t-ville, population Number);

Insertion dans les tables utilisant des pointeurs CREATE TABLE villes OF t_ville; INSERT INTO villes VALUES t-ville('Paris', ); INSERT INTO villes VALUES t-ville('Rome', ); INSERT INTO pays(nom,population) VALUES (France, ); Ville Pays OID1 OID2 OIDI

Insertion dans les tables utilisant des pointeurs Pour insérer la capitale de la France, On veut modifier le n-uplet qui correspond à la France Pays OIDI OIDII UPDATE pays SET capitale = (SELECT REF(v) FROM villes v WHERE v.nom ='Paris') WHERE nom =”FRANCE” Pour insérer l'objet qui correspond à l'italie INSERT INTO pays SELECT 'Italie', REF(v), ' ' FROM villes v WHERE v.nom ='Roma')

Interrogation dans les tables utilisant des pointeurs Les données sont intérrogées comme si les valeurs était effectivement conservées dans la table Select * From pays; JYX35…Italie ABC129XY…France PopulationCapitaleNom Select p.nom, p.population, p.capitale.nom From pays p; Italie France PopulationNom Rome Paris Capitale.nom

La fonction DEREF et REF La fonction REF renvoie une référence à partir d'un objet La fonction DEREF renvoie un objet à partir de sa référence

Types incomplets Un objet peut référencer un objet du même type CREATE TYPE t_employe AS OBJECT (nom VARCHAR(10), prenom VARCHAR(50), superieur t_employé) ; Par contre, on ne peut pas créer un type qui utilise un type qui n‘est pas encore crée

Types incomplets CREATE TYPE tville AS OBJECT ; Pour créer, par exemple, un type ville qui pointe vers le type pays et un type pays qui pointe sur le type ville CREATE TYPE tpays AS OBJECT ( ---- ref tville) ; CREATE TYPE tville AS OBJECT ( ---- ref tpays) ;

Types incomplets Même problème avec la suppression, on ne peut pas supprimer un type utilisé par un autre type ou une table On utilise la commande DROP.... FORCE

Simulation de l'héritage ds les BDRO Comme les SGBDR ne sont pas initialement prévus pour gérer les objets, il faut le faire “manuellement” dans les SGBDRO

Collections Pour représenter une colonne multivaluée, on peut utiliser les collections : ensembles (au sens mathématiques ; pas de doublons)‏ sacs (avec des doublons)‏ listes (ordonnées et indexées par un entier)‏

les Collections imbriquées Il existe 2 types de collections imbriquées : les tables imbriquées dont on ne connait pas la taille a priori (NESTED TABLE)‏ les tablaux fixes (VARRAY)‏ Ces tables contiennent des élements de même type. Elles correspondent à des associations 1-N Une table imbriquées est une collection illimitée, non ordonnée d'éléments de même type Sous Oracle, on ne peut avoir qu'un niveau de table imbriquée

Déclaration de type et de tables utilisant des tables imbriquées (1)‏ Create type temploye AS OBJECT (noine varchar(20), nom varchar(30), age Number); Create TYPE templyes AS Table of temploye Create Table departement (numdep Number, budget Number, employes temployes); NESTED TABLE employes STORE AS tabemp; Création de tables relationnelles Précise le nom physique de la table imbriquée

Déclaration de type et de tables utilisant des tables imbriquées (2)‏ Tabemp conserve l'ensemble des éléments de toutes les tables imbriquées mais on ne l'interrogera jamais telle quelle puisqu'on considère qu'on a affaire à des tables différentes pour chacun des n-uplets Departements

Déclaration de type et de tables utilisant des tables imbriquées (3)‏ Create TYPE departement AS OBJECT (numdep Number, budget Number, employes temployes); Create TABLE departements of departement NESTED TABLE employes STORE AS tabemp; Création de tables objet-relationnelles

Insertion dans une table utilisant des tables imbriquées INSERT into departements Values (1, , temploye(12345,'toto',25), temploye(2222,'titi',28)); INSERT into departements Values (2, , temploye()); INSERT into departements Values (4, ); Departements

Insertion dans une table imbriquée La commande THE INSERT INTO THE (SELECT employes FROM departements WHERE nomdep =1)‏ VALUES (789,'toto',20) Insérer dans une table imbriquée l'élément que l'on veut insérer

Insertion dans une table imbriquée INSERT INTO THE (SELECT employes FROM departements WHERE nomdep =2)‏ VALUES (5432,'mimi',27) ça marche : on ajoute un élément à la liste vide existante

Insertion dans une table imbriquée INSERT INTO THE (SELECT employes FROM departements WHERE nomdep =4)‏ VALUES (978,'nono',50) ça ne marche pas : la liste n'existe pas UPDATE departements SET emloyes = temployes() where numdep =4; puis écrire la requête d'insertion UPDATE departements SET emloyes = temployes( temploye(987,'nono',50)) where numdep =4;

Interrogation de la table relationnelle SELECT * FROM departements; On obtient la table relationnelle avec les tables imbriqées sous forme de constructeur de type

Interrogation de la table imbriquée SELECT e.nom FROM THE (SELECT employes FROM depatement WHERE numdep =1) e; On ne peut sélectionner qu'une seule table imbriquée. Il faut donc que la requête à l'interieur du THE ne corresponde qu'à un seul n-uplet, sinon il y a une erreur d'exécution

La commande CURSOR SELECT d.numdep, CURSOR ( SELECT e.nom FROM TABLE (employes) e) FROM depatement d; On peut utiliser le THE dans une commande de suppression (DELETE) ou de mise à jour (UPDATE° de la même façon que pour les interrogations et les insertions CURSOR...TABLE(employes) pour dire que à chaque n-uplet de département, on veut afficher les information venant de la table imbriquée employes

Remarque (1)‏ Attention, un seul niveau d'imbrication est permis dans les tables imbriquées. Comment faire si on veut une table de pays dont chaque pays contient un ensemble de régions et chaque région un ensemble de villes ?

Remarque (2)‏ Le système stocke les tables imbriquées dans des tables qui comportent un seul attribut appelé COLUMN_VALUE. Pour interroger une table imbriquée d'objets, on travaille directement sur les noms des attributs de l'objet. Pour interroger une table imbriquée de références sur les objets, il faut péciser l'attribut COLUMN_VALUE pour accéder aux champs

tableau fixe Un tableau fixe (VARRAY) est une collection limitée et ordonées d'éléments de même type Un tableau fixe permet plusieurs niveaux d'imbrication (contrairement aux NESTED TABLE qui nécessite l'utilisation de références)‏ On ne peux pas accéder à un élément particulier du VARRAY dans une requête SQL et il faut utiliser un bloc de programme PL/SQL (language procédural qui intégre les requête SQL)‏ (contrairement à la NESTED TABLE qui se comporte comme une table relationnelle standard en utilisant THE

Déclaration d'un VARRAY CREATE TYPE tvadresses AS VARRAY(2) Of tadresse; On peut utiliser le VARRAY dans une table relationnelle ou objet- relationnelle Comme c'est une collection limitée d'éléments, on doit déclarer la taille maximale du tableau fixe CREATE TYPE etudiants (noine varchar(10), nom varchar(30), adrs tvadresses);

Manipulation des VARRAY On peut les manipuler de 2 manières : dans une requête SQL, on peut manipuler le VARRAY complet (comme on le ferait d'un attribut simple)‏ dans un bolc PL/SQL, on peut manipuler chaque élément

Insertion dans un VARRAY On utilise le constructeur de type soit sans paramètres, soit avec tous les paramètres (i.e en précisant tous les éléments du VARRAY et en complétant avec NULL si besoin)‏ INSERT INTO etudiants VALUES ('12345', 'titi', tvadresses()); INSERT INTO etudiants VALUES('98789','toto', tvadresses(tadresse(2,bd Lavoisier,Angers), null));

Modification dans un VARRAY Pour modifier ou effacer un VARRAY dans une requête SQL, on doit travailler sur tout le VARRAY UPDATE etudiants SET adrs = tvadresses(tadresse(1,'rue rennes','Angers'),null)‏ WHERE noine='12345'; Pour modifier un seul élément du VARRAY, il faut utiliser un bloc PL/SQL

Modification dans un VARRAY DECLARE lesadrs tvadresses; --> partie déclaration de variable (1)‏ BEGIN SELECT adrs INTO lesadrs FROM etudiants WHERE noine ='98789' lesadrs(2) := tadresse(15,bd Foch,'Angers'); (2)‏ UPDATE etudiants SET adrs = lesadrs WHERE noine ='98789'; (3)‏ END Mots clès pour définir un bloc PL/SQL (1) initialiser la variable lesadrs (on récupère les informations avec un select)‏ (2) On peut travailler sur les éléments particuliers du VARRAY (ici, on ajoute une 2ème adresse)‏ (3) On répercute les modifications dans la base de données

Exemple INSERT INTO etudiants VALUES ('555555','Pop',tvadresses()); DECLARE ad tvadresses; BEGIN SELECT adrs INTO ad FROM etudiants WHERE nom='Pop'; ad(1) := tadresse(10,bd Carnot,'Angers'); UPDATE etudiants SET adrs = ad WHERE nom='Pop'; END; insertion d'un nouvel élément dans un VARRAY ça ne marche pas : le VARRAY est vide donc ad(1) n'existe pas

Exemple INSERT INTO etudiants VALUES ('555555','Pop',tvadresses()); DECLARE ad tvadresses; BEGIN SELECT adrs INTO ad FROM etudiants WHERE nom='Pop'; ad.extend; // on ajoute un élément au VARRAY ad ad(1) := tadresse(10,bd Carnot,'Angers'); UPDATE etudiants SET adrs = ad WHERE nom='Pop'; END; 2 solutions pour résoudre ce problème On met à jour l'attribut adrs dans une requête sql (en donnant un VARRAY contenant des élément null) puis on exécute le bloc pl/sql On utilise la fonction prédéfinie EXTEND qui ajoute un élément au VARRAY

Fonctions prédéfinies Il existe plusieurs opérations prédéfinies sur les tableaux fixes. Attention : on ne peut utiliser ces opérations que dans des blocs PL/SQL pas dans des requêtes standards COUNT : nombre d'élément du tableau limit : nombre max d'un varray last : indice du dernier élément du tableau extend : ajout d'un élément au tableau extend(x) : ajout de x éléments au tableau

Exemple DECLARE ad tvadresses; BEGIN SELECT adrs INTO ad FROM etudiants WHERE nom='lulu'; ad.extend; ad(ad.last) := tadresse(10,bd Foch,'Angers'); UPDATE etudiants SET adrs = ad WHERE nom='lulu'; END; ajouter une nouvelle adresse à un varray sans savoir combien d'adresses existent

Les méthodes : Rappel Un objet peut être vu comme un triplet Référence l'identifiant de l'objet l'ensemble des valeurs des attributs de l'objet La classe est la catégorie à laquelle sont associés une structure et des opérations Valeurs du n- uplet Type Informellement une opération est une action exécutable sur un objet

Méthodes : définition Définition : Une opération (ou méthode) est la modélisation d'une action applicable sur un objet caracterisée par un en-tête appelé Signature définissant son nom, ses paramètres d'appel et ses paramètres de retour et permettant de modifier l'état de l'objet ou de renvoyer une valeur En relationnel-objet, les types peuvent admettre des méthodes qui sont soit des fonctions soit des procédures. Pour déclarer une méthode dans un type objet, on peut : - soit la déclarer lors de la création du type - soit l'ajouter plus tard avec la commande ALTER TYPE Le corps de la méthode peut faire référence à l'objet SELF de type le type objet considéré et qui représente l'objet courant sur lequel on applique la méthode

Les fonctions Création d'un type utilisant une fonction CREATE TYPE tpersonne AS OBJECT (nom VARCHAR(10), datenaiss DATE, MEMBER FUNCTION age RETURN NUMBER Pour définir une fonction Type du résultat Nom de la fonction ici pas de paramètre

Implémentation des méthodes définies dans le type CREATE TYPE BODY tpersonne IS MEMBER FUNCTION age RETURN NUMBER IS n NUMBER; BEGIN n:= TRUNC ((SYSDAT – SELF.datenaiss)/365); REURN n; // retour du résultat calculé END age; // fin de la fonction END; // fin du corps de l'implémentation des méthodes

Fonctions Une fonction peut s'utiliser dans une requête SQL ou dans un bloc PL/SQL CREATE TABLE personnes OF tpersonne; INSERT INTO personnes SELECT p.age() FROM personne p; Pour afficher l'âge des personnes insérées dans la table

Protection de la BD Quand on crée des fonctions, Oracle demande de préciser l'influence de la fonction sur la BD (pour s'assurer qu'on ne modifie rien). Il faut donc rajouter dans la déclaration da la fonction une interaction en ce sens CREATE TYPE tpersonne AS OBJECT (nom VARCHAR(10), datenaiss DATE, MEMBER FUNCTION age RETURN NUMBER; PRAGMA RESTRICT-REFERENCES (age,WNDS))‏ Pour préciser l'influence de la fonction Pas de modification de la base

Protection de la BD La méthode ne lit pas les variables des paquetage RNDS Reads No Package State La méthode n’interroge pas la base de données RNDS Reads No Data base State La méthode ne modifie pas les variables des paquetage WNPS Writes No Package State La méthode ne modifie pas l’état de la base de données WNDS Writes No Database State InterprétationOption

Les procédures Les procédures sont définies de la même manière que les fonctions soit les créer lors de la définition du type soit les ajouter après la déclaration ALTER TYPE tpersonne AS OBJECT (nom VARCHAR(10), datenaiss DATE, MEMBER FUNCTION age RETURN NUMBER; PRAGMA RESTRICT-REFERENCES (age,WNDS)‏ MEMBER PROCEDURE modifnaiss (nouvdate in date)‏ Remarque : pas de PRAGMA RESTRICT-REFERENCES pour les procédures, elle peuvent modifier les BD

Les procédures : implémentation CREATE TYPE BODY tpersonne IS MEMBER FUNCTION age RETURN NUMBER IS n NUMBER; BEGIN n:= TRUNC ((SYSDAT – SELF.datenaiss)/365); REURN n; // retour du résultat calculé END age; // fin de la fonction MEMBER PROCEDURE modifnaiss (nouvdate in date) is BEGIN SELF.datenaiss = nouvdate; END modifnaiss; END; // fin du corps de l'implémentation des méthodes CREATE TABLE personnes of tpersonne

L'appel d'une procédure :exemple ex : pour changer la date de naissance de Jacques ('14-JUL-1900' declare toto t_personne; BEGIN SELECT values(p) into toto FROM personne p WHERE p.nom =J'acques'; toto.modifnaiss('29-Nov-1930'); delete FROM personnes WHERE nom ='Jacques'; INSERT INTO personnes VALUES(toto); END; Initialiser la variable toto modifier la date de naissance

Exemple (2)‏ Pour éviter les mises à jour dans le bloc pl/sql, c'est dans la déclaration de la procédure que l'on précise que l'on veut modifier la table en changeant la date de l'élément courant. Dans le bloc pl/sql, on appelle la procédure avec les paramètres

Exemple (2)‏ Alter type tpersonne REPLACE as object (....); Create OR Replace TYPE body is member procedure modifnaiss(nouvdate IN date) IS begin UPDATE personnes p set datnaiss = nouvdate Where value(p)=SELF. end modifnaiss; end; declare toto t_personne; BEGIN SELECT values(p) into toto FROM personne p WHERE p.nom =J'acques'; toto.modifnaiss('29-Nov-1930'); END; on modifie la table dans le corps de la procédure

La surcharge On peut définir une même méthodes avec des paramètres différents CREATE TYPE tetudiant AS OBJECT (noine NUMBER, nom VARCHAR(10), MEMBER procedure modif(nouvnumero Number), MEMBER procedure modif(nouvnumero Varchar(10)); CREATE TYPE BODY tetudiant IS MEMBER PROCEDURE modif (nouvnumero in Number) is BEGIN SELF.noine = nouvnumero; END modif; MEMBER PROCEDURE modif (nouvnom in Varchar) is BEGIN SELF.nom = nouvnom; END modif; END; On a une surcharge pour la procédure modif qui, selon les paramètres, modifie le numéro de l'étudiant ou son nom