L3 Info : SGBD
 
◃  Ch. 9 Retour sur DDL  ▹
 

ARRAY un type SQL (non atomique !)

  • Il n'y a pas qu'avec la gestion de NULL que les SGBDR prennent des libertés avec le modèle relationnel !
  • Le type ARRAY est prévu dans le standard SQL mais n'est quasiment pas implémenté
  • PostgreSQL permet de définir des tableaux typés avec les habituels []
    • https://www.postgresql.org/docs/current/arrays.html
    • Usage :
      CREATE TABLE Personne (
      nom VARCHAR(50),
      prenoms VARCHAR(50)[]
      ) ;
      INSERT INTO Personne VALUES ('Dumbledore', ARRAY ['Albus', 'Percival', 'Wulfric', 'Brian']);
      -- ou bien 
      INSERT INTO Personne VALUES ('Dumbledore', '{Albus, Percival, Wulfric, Brian}');
      SELECT * FROM personne ;
      nom     |            prenoms             
      ------------+--------------------------------
      Dumbledore | {Albus,Percival,Wulfric,Brian}
      (1 row)
      SELECT prenoms[2] AS "2e_prenom" FROM Personne;
      2e_prenom 
      -----------
      Percival
      (1 row)
    • De nombreuses fonctions et opérateurs sont disponibles pour manipuler les tableaux : array_length(), array_append(), array_remove(), ...
    • https://www.postgresql.org/docs/18/functions-array.html
  • MySQL : pas de type ARRAY disponible (usage alternatif de JSON possible)
  • ORACLE met à disposition VARRAY et TABLE
    • VARRAY est destiné au tableaux de tailles fixe, nécessite la définition d'un type
    • Usage :
      CREATE TYPE type_prenoms AS VARRAY(4) OF VARCHAR(50);
      CREATE TYPE Personne (
      nom VARCHAR(50),
      prenoms type_prenoms
      ) ;
      INSERT INTO Personne VALUES ('Dumbledore', type_prenoms('Albus', 'Percival', 'Wulfric', 'Brian'));
    • Mais, l'accès direct à un élément nécessite l'utilisation de PL/SQL ! (ou via une syntaxe délirante...)