TD/TME - Schéma objet-relationnel
Questions fréquentes sur SQL3
- mot réservés : les mots suivants sont des mots-clé du langage: table, type, or, ...
- commentaire : les deux tirets (--) qui indiquent une ligne de commentaire doivent être positionnés en début de ligne.
erreur de casse. Le compilateur SQL3 n'est pas sensible à la casse. Un attribut et son type ne peuvent pas être le même mot. Exemple d'erreur de casse :
- create type X as object (adresse Adresse ); est faux car "adresse" (en minuscule) et "Adresse" (avec A majuscule) sont considérés comme le même mot.
- nom d'attribut trop long : choisir un nom d'attribut plus court (longueur maxi: ...)
- création d'une table pour stocker les objets. Ne pas compiler l'ordre de création de table.
table imbriquée: les tables imbriquées sont déclarées dans l'ordre de création de la table principale. Exemple, la table T contient les objets X dont les attributs x1 et x2 sont ensemblistes.
- create type Y as table of number(3), create type X as object ( x1 Y, x2 Y);
- create table T of X nested table x1 store as T1, nested table x2 store as T2;
erreur lors de la suppression d'un type : forcer la suppression d'un type utlisé dans la définition d'autre types
- drop type Personne force;
signature d'une méthode : type des paramètres. Ne pas indiquer la taille des types.
- Ex: signature fausse: f(a in number(5), b in varchar2(30)), signature correcte: f(a in number, b in varchar2)
- insertion : La commande insert insère un seul tuple (ou un seul objet). Ne pas oublier les parenthèses après le mot clé values( ... ): Ne pas oublier le constructeur (=nom du type) pour insérer un objet.
déréférencement: Contrairement à SQL, PL/SQL ne supporte pas les expressions de chemins avec traversée de références. Pour contourner ce manque, écrire une requête pour déréférencer explicitement chaque référence. Exemple pour obtenir le nom de la matière d'une pièce de base :
- n varchar(30);
- begin
- incorrect: n := self.est_en.nom;
- correct: select deref(self.est_en).nom into n from dual;