Object-PL/SQL

Un article de Wikipédia, l'encyclopédie libre.

Object-PL/SQL (Object-Procedural Language/Structured Query Language ou tout simplement O-PL/SQL) est une méthode d'usage de l'extension procédurale pour le langage SQL dans la Base de Données Oracle[1]. Les particularités additionnelles de la version 7 au-delà d'autres améliorations ultérieures sont orientées vers l'usage du paradigme de la base de données orientée objet[2].

Bien que la syntaxe générale du langage PL/SQL ressemble à celle du Pascal et de l'Ada, il y a eu beaucoup d'améliorations, qui incluent surtout le code java intégré[3] et la syntaxe orientée objet[4] dans le SQL.

L'intégration de déclencheurs et de procédures stockées constituent conjointement une des plus grandes percées qui ont favorisé l'usage du PL/SQL dans un paradigme orienté objet[5]. L'inclusion pour le syntaxe SQL de déclarations comme [class].[object], et aussi l'implementation de l'objet type[6] (similaire à presque tous les langages OO), ont complété le minimum d'articles nécessaires pour la démarche d'une extension du SQL sans l'usage d'aucun logiciel particulier de projection ou persistence framework[7].

Autonomie, notoriété et importance de l'O-PL/SQL[modifier | modifier le code]

L'O-PSL/SQL n'est pas simplement l'usage d'une version d'un langage de programmation, mais c'est le modus faciendi qui définit l'autonomie du thème[8] Chacune des versions du PL/SQL, en débutant de la 7e, apporte de si nombreuses innovations que c'est impossible de traiter ces usages-ci de sub-thèmes du PL/SQL. Il y a eu une vraie révolution qui a établi la frontière entre le langage usé jadis et l'aspect orienté objet dans ce nouveau langage. C'est précisément cet abord qui a provoqué l'emploi à large échelle de l'O-PL/SQL[9].

Une confusion d'objets[modifier | modifier le code]

On ne doit pas confondre les notions d'objet de base de données avec celles-là d'objet de classe. Il faut, en chaque situation, identifier qu'est-ce que c'est un objet dans un contexte donné.

Objet de base de données est un concept qui concerne la base de données relationnelle ou séquentielle et qui est utilisé dans les nouveaux modèles. Tables, déclencheurs, colonnes, indices sont des exemples d'objets de base de données[6] qui sont rencontrés dans Object-PL/SQL, mais les mêmes éléments peuvent être traités dans l'autre contexte, de la notion des objets Java, spécifiquement un élément d'un ensemble dont le début de son existence se passe à partir de l'instanciation d'une classe.

The PL/SQL[modifier | modifier le code]

le PL/SQL est le langage SQL étendu utilisé par la Base de données Oracle.

PL/SQL est disponible dans l'Oracle (depuis version 7) et dans l'IBM Db2 (depuis version 9.7)[10].

O-PL/SQL permet de définir des classes et les instancier comme objets, de créer des types de données définis par l'utilisateur (programmateur) et constructeurs, au-delà d'écrire des procédures stockées et des déclencheurs en Java, et aussi de la création de types user-defined et de constructeurs.

Exemples d'usage de la syntaxe de l'O-PL/SQL[modifier | modifier le code]

Il y a ici un petit ensemble d'exemples extraites de la documentation officielle[11] et d'autres sources:

Exemple 1[modifier | modifier le code]

Un exemple simple d'object-oriented PL/SQL[12]

create or replace type base_type as object (
  a number,
  constructor function base_type return self as result,
  member function  func return number,
  member procedure proc (n number)
) instantiable not final;
/

Maintenant, la codification du type est accomplie. Donc, il est défini comment se conduisent-ils les fonctions de type, les procédures et les constructeurs:

create or replace type body base_type as 
  constructor function base_type return self as result is
  begin
    a:=0;
    return;
  end base_type;

  member function func return number is
  begin
    return a;
  end func;

  member procedure proc (n number) as
  begin
    a:=n;
  end proc;
end;
/

On est prêt à dériver de base_type. Le mot-clé under est utilisé pour la dérivation. Le type dérivé definit un nouveau attribut (nommé m), qui superpose func.

create or replace type deriv_type under base_type (
  m number,
  overriding member function func return number
);
/

Bien comme les types bases, il faut codifier les méthodes superposées au type dérivé:

create or replace type body deriv_type as
  overriding member function func return number is
  begin
    return m*a;
  end;
end;
/

Les types créés peuvent être instanciés et les méthodes peuvent être demandées:

declare
  b1 base_type :=base_type();
  b2 base_type :=base_type(4);
  d1 deriv_type:=deriv_type(5,6);
  d2 deriv_type:=deriv_type(5,6);
begin
  dbms_output.put_line(b1.func);
  dbms_output.put_line(b2.func);

  d1.proc(4);
  dbms_output.put_line(d1.func);
  dbms_output.put_line(d2.func);
end;
/

Résultats

  • 0
  • 4
  • 24
  • 30

Les types créés sont devenus des types réels et on les peut utiliser pour attributs dans tables:

create table table_base (
  b base_type
);
declare
  base  base_type := base_type();
  deriv deriv_type:= deriv_type(8,9);
begin
  insert into table_base values(base);
  insert into table_base values(deriv);
end;
/
select t.b.func() from table_base t;
T.B.FUNC()

Résultats :

  • 0
  • 72
select avg(t.b.func()) from table_base t;
AVG(T.B.FUNC())

Résultat :

  • 36

Exemple 2[modifier | modifier le code]

Un autre exemple de procédure stockée en Java intégré est rencontré dans Oracle Documentation[13].

Bibliographie[modifier | modifier le code]

Articles connexes[modifier | modifier le code]

Sources[modifier | modifier le code]

Notes et références[modifier | modifier le code]

  1. Lassan, Alan R., Due, Jacob Steen, « Experiences with Object Oriented Development in PL/SQL », The danish National Center for IT Research, (consulté le )
  2. Cunningham, Lewis, « PL/SQL Features by Release », Burleson Consulting (consulté le )
  3. « When Should you use Java procédures stockées with an Oracle Database, what are the Drawbacks? », Stack Overflow (consulté le )
  4. « Oracle's Object-Oriented Features », etutorial.org (consulté le )
  5. Benett, 2002:144
  6. a et b Shubho, Al-Farooque, « Optimize Database Files and Apply Partitioning », The Code Project, (consulté le )
  7. Bales, 2007:107-209
  8. « Use Object PL/SQL », java2s.com (consulté le )
  9. Feuerstein, 2009
  10. « DB2 10: Run Oracle applications on DB2 10 for Linux, UNIX, and Windows », IBM (consulté le )
  11. « Oracle Documentation », Oracle (consulté le )
  12. « Object Oriented Oracle, example 1 », René Nyffenegger's collection of things on the web (consulté le )
  13. « Calling Java Methods in Oracle Database », Oracle (consulté le )

Liens externes[modifier | modifier le code]