Oracle Types d'objets PL/SQL : CREATE TYPE avec exemples

โšก Rรฉsumรฉ intelligent

Les types d'objets en PL/SQL apportent la programmation orientรฉe objet ร  OracleCes types permettent de modรฉliser des entitรฉs du monde rรฉel dotรฉes d'attributs et de mรฉthodes. Ils prennent en charge les constructeurs, l'hรฉritage et la comparaison d'รฉgalitรฉ, ce qui permet ร  un seul type au niveau du schรฉma de stocker et de traiter des donnรฉes structurรฉes.

  • ๐Ÿงฑ Composants de type objet : Un type d'objet combine des attributs qui stockent des donnรฉes et des membres, ou mรฉthodes, qui dรฉfinissent sa logique de traitement.
  • ???? Crรฉer un objet : Les types d'objets sont crรฉรฉs au niveau du schรฉma avec CREATE TYPE, et leurs mรฉthodes sont dรฉfinies dans un corps CREATE TYPE sรฉparรฉ.
  • ๐Ÿ”ง Constructeurs: Chaque type d'objet possรจde un constructeur implicite portant le nom du type, et vous pouvez dรฉfinir un constructeur explicite pour dรฉfinir des valeurs par dรฉfaut.
  • ๐Ÿงฌ hรฉritage: Un type parent NOT FINAL est รฉtendu avec UNDER, de sorte qu'un sous-type hรฉrite de tous les attributs et membres du parent.
  • ๏ธ ร‰galitรฉ: La fonction membre ORDER compare deux instances d'objet et renvoie un nombre nรฉgatif, nul ou positif.
  • ๐Ÿค– Assistance IA : Les assistants IA tels que GitHub Copilot rรฉdigent des dรฉfinitions de type CREATE, des constructeurs et des mรฉthodes ORDER ร  partir d'un commentaire.

Oracle Types d'objets PL/SQL illustrant CREATE TYPE avec attributs et mรฉthodes

Quโ€™est-ce que le type dโ€™objet en PL/SQL ?

La programmation orientรฉe objet est particuliรจrement adaptรฉe ร  la crรฉation de composants rรฉutilisables et d'applications complexes. Les programmes sont organisรฉs autour d'ยซ objets ยป plutรดt que d'ยซ actions ยป ; autrement dit, ils sont conรงus pour interagir avec un objet entier et non avec une action isolรฉe. Cette approche permet au programmeur de renseigner et de manipuler les dรฉtails au niveau de l'entitรฉ objet.

L'image ci-dessous illustre un exemple de type d'objet oรน un compte bancaire est traitรฉ comme une entitรฉ objet. Les attributs de l'objet contiennent des valeurs (pour un compte bancaire, il s'agit du numรฉro de compte, du solde, etc.), tandis que les mรฉthodes de l'objet dรฉcrivent des actions telles que le calcul du taux d'intรฉrรชt ou la gรฉnรฉration d'un relevรฉ bancaire, chacune nรฉcessitant un traitement.

Compte bancaire modรฉlisรฉ comme un type objet avec des attributs et des mรฉthodes en PL/SQL

In PL / SQLLa programmation orientรฉe objet repose sur les types d'objets. Un type d'objet peut reprรฉsenter n'importe quelle entitรฉ du monde rรฉel. Les sections suivantes explorent les types d'objets, leurs composants, ainsi que la maniรจre de les crรฉer et de les utiliser.

Composants des types d'objet

Un type d'objet PL/SQL contient principalement deux composants.

  1. Attributs
  2. Membres/Mรฉthodes

Attributs

Les attributs sont les colonnes ou les champs dans lesquels les donnรฉes sont stockรฉes. Chaque attribut est associรฉ ร  un type de donnรฉes qui dรฉfinit son traitement et son stockage. Un attribut peut รชtre de n'importe quel type valide. Type de donnรฉes PL/SQL, ou il peut s'agir d'un autre type d'objet.

Membres/Mรฉthodes

Les membres, ou mรฉthodes, sont sous-programmes Ces membres sont dรฉfinis au sein du type objet. Ils ne servent pas ร  stocker des donnรฉes ; ils dรฉfinissent plutรดt le traitement effectuรฉ au sein du type objet, par exemple la validation des donnรฉes avant leur insertion dans lโ€™objet. Ils sont dรฉclarรฉs dans la spรฉcification du type objet et dรฉfinis dans son corps. Le corps est facultatif : si aucun membre nโ€™est prรฉsent, le type objet nโ€™a pas de corps.

Crรฉer un objet dans Oracle

Un type d'objet ne peut รชtre crรฉรฉ qu'au niveau du schรฉma et non au niveau d'un sous-programme. Une fois dรฉfini dans le schรฉma, il peut รชtre utilisรฉ dans les sous-programmes. La crรฉation du type d'objet s'effectue ร  l'aide de l'instruction ยซ CREATE TYPE ยป, et son corps ne peut รชtre crรฉรฉ qu'aprรจs la crรฉation du type d'objet.

Les captures d'รฉcran ci-dessous montrent la syntaxe CREATE TYPE pour la spรฉcification de l'objet et la syntaxe CREATE TYPE BODY qui dรฉfinit ses mรฉthodes.

Syntaxe CREATE TYPE dรฉfinissant une spรฉcification d'objet avec des attributs dans Oracle Syntaxe CREATE TYPE BODY dรฉfinissant les mรฉthodes d'un type d'objet PL/SQL

CREATE TYPE<object_type_name> AS OBJECT
(
<attribute_l><datatype>,
.
.
);
/
CREATE TYPE BODY<object_type_name> AS OBJECT
(
MEMBER[PROCEDURE|FUNCTION]<member_name> 
IS
<declarative section>
BEGIN
<execution part>
END;
.
.
);
/

Explication de la syntaxe :

  • La syntaxe ci-dessus illustre la crรฉation d'un OBJET avec des attributs et d'un CORPS D'OBJET avec des mรฉthodes.
  • Les mรฉthodes peuvent รฉgalement รชtre surchargรฉes dans le corps de l'objet.

Initialisation de la dรฉclaration du type d'objet

Comme les autres composants de PL/SQL, les types d'objets doivent รชtre dรฉclarรฉs avant d'รชtre utilisรฉs dans un programme. Une fois le type d'objet crรฉรฉ, il peut รชtre utilisรฉ dans la section dรฉclarative d'un sous-programme pour dรฉclarer une variable de ce type.

Lorsqu'une variable est dรฉclarรฉe comme un objet, une nouvelle instance de cet objet est crรฉรฉe ร  l'exรฉcution et cette instance est rรฉfรฉrencรฉe par le nom de la variable. Ainsi, un mรชme objet peut stocker plusieurs valeurs dans diffรฉrentes instances.

La capture d'รฉcran ci-dessous montre une variable dรฉclarรฉe comme un type objet ร  l'intรฉrieur d'un Bloc PL/SQL.

Dรฉclaration d'une variable de type objet dans une section dรฉclarative d'un bloc PL/SQL

DECLARE
<variable_name> <object_type_name>;
BEGIN
.
.
END;
/

Explication de la syntaxe :

  • La syntaxe ci-dessus montre la dรฉclaration d'un variable en tant que type d'objet dans la section dรฉclarative.

Une fois dรฉclarรฉe comme objet dans un sous-programme, la variable est atomiquement nulle ; lโ€™objet lui-mรชme est nul. Elle doit รชtre initialisรฉe avec des valeurs avant de pouvoir รชtre utilisรฉe dans le programme. Lโ€™initialisation des objets se fait ร  lโ€™aide de constructeurs.

Les constructeurs sont les mรฉthodes implicites d'un objet auxquelles on peut faire rรฉfรฉrence en utilisant le mรชme nom que le type de l'objet. La capture d'รฉcran ci-dessous illustre l'initialisation d'une instance de type objet.

Initialisation d'une instance de type objet ร  null ร  l'aide de son constructeur

DECLARE
<variable_name> <object_type_name>; 
BEGIN
<variable_name>:=<object_type_name>();
END;
/

Explication de la syntaxe :

  • La syntaxe ci-dessus illustre l'initialisation d'une instance de type objet avec une valeur nulle.
  • L'objet lui-mรชme n'est plus nul une fois initialisรฉ, mais les attributs qu'il contient restent nuls jusqu'ร  ce que des valeurs leur soient attribuรฉes.

Constructeurs

Un constructeur est une mรฉthode implicite d'un objet, accessible par son nom identique ร  celui de son type. Lors de la premiรจre utilisation de l'objet, ce constructeur est appelรฉ implicitement.

Vous pouvez รฉgalement initialiser des objets ร  l'aide de ces constructeurs. Un constructeur peut รชtre dรฉfini explicitement en dรฉfinissant un membre dans le corps du type d'objet portant le mรชme nom que le type d'objet.

Exemple 1: Dans l'exemple suivant, nous utilisons le membre de type objet pour insรฉrer des enregistrements dans la table `emp` avec les valeurs `('RRR', 1005, 20000, 1000)` et `('PPP', 1006, 20000, 1001)`. Une fois les donnรฉes insรฉrรฉes, nous les affichons ร  l'aide du membre de type objet. Nous utilisons รฉgalement un constructeur explicite pour initialiser l'identifiant du responsable avec la valeur par dรฉfaut 1001 pour le deuxiรจme enregistrement.

Nous procรฉdons en suivant les รฉtapes suivantes.

  • ร‰tape 1 : Crรฉer le type dโ€™objet et le corps du type dโ€™objet.
  • ร‰tape 2 : Crรฉez un bloc anonyme pour appeler le type d'objet via le constructeur implicite pour emp_no 1005.
  • ร‰tape 3 : Crรฉez un bloc anonyme pour appeler le type d'objet via le constructeur explicite pour emp_no 1006.

ร‰tape 1) Crรฉer un type d'objet et un corps de type d'objet.

La capture d'รฉcran ci-dessous montre la crรฉation de la spรฉcification de type d'objet emp_object avec ses attributs et ses membres.

Crรฉation de la spรฉcification du type d'objet emp_object avec des attributs et des membres

CREATE TYPE emp_object AS OBJECT(
emp_no NUMBER,
emp_name VARCHAR2(50),
salary NUMBER,
manager NUMBER,
CONSTRUCTOR FUNCTION emp_object(p_emp_no NUMBER, p_emp_name VARCHAR2,
p_salary NUMBER) RETURN SELF AS RESULT),
MEMBER PROCEDURE insert_records,
MEMBER PROCEDURE display_records);
/

La capture d'รฉcran ci-dessous montre la crรฉation du corps de type emp_object avec le constructeur explicite et les procรฉdures membres.

Dรฉfinition du corps du type emp_object avec un constructeur explicite et des procรฉdures membres

CREATE OR REPLACE TYPE BODY emp_object AS
CONSTRUCTOR FUNCTION emp_object(p_emp_no NUMBER,p_emp_name VARCHAR2,
p_salary NUMBER)
RETURN SELF AS RESULT
IS
BEGIN
Dbms_output.put_line('Constructor fired..');
SELF.emp_no:=p_emp_no;
SELF.emp_name:=p_emp_name;
SELF.salary:=p_salary;
SELF.manager:=1001;
RETURN;
END;
MEMBER PROCEDURE insert_records
IS
BEGIN
INSERT INTO emp VALUES(emp_no,emp_name,salary,manager);
END;
MEMBER PROCEDURE display_records
IS
BEGIN
Dbms_output.put_line('Employee Name:'||emp_name);
Dbms_output.put_line('Employee Number:'||emp_no);
Dbms_output.put_line('Salary:'||salary);
Dbms_output.put_line('Manager:'||manager);
END;
END;
/

Code Explication

  • Code lignes 1-9 : Crรฉation du type d'objet ยซ emp_object ยป avec 4 attributs et 3 membres. Il contient la dรฉfinition d'un constructeur avec seulement 3 paramรจtres. (Le constructeur implicite rรฉel possรจde autant de paramรจtres que d'attributs prรฉsents dans le type d'objet.)
  • Code ligne 10: Crรฉation du corps du type.
  • Code lignes 11-21 : Dรฉfinition du constructeur explicite. Attribution des valeurs des paramรจtres aux attributs et attribution de la valeur par dรฉfaut ยซ 1001 ยป ร  lโ€™attribut ยซ manager ยป.
  • Code lignes 22-26 : Dรฉfinition du membre 'insert_records', dans lequel les valeurs des attributs sont insรฉrรฉes dans la table 'emp'.
  • Code lignes 27-34 : Dรฉfinition du membre 'display_records', qui affiche les valeurs des attributs de type objet.

Sortie :

Type crรฉรฉ

Corps de type crรฉรฉ

ร‰tape 2) Crรฉation d'un bloc anonyme pour appeler le type d'objet crรฉรฉ via le constructeur implicite pour emp_no 1005.

La capture d'รฉcran ci-dessous montre le bloc anonyme qui appelle emp_object via le constructeur implicite.

Bloc anonyme appelant emp_object via le constructeur implicite pour emp_no 1005

DECLARE
guru_emp_det emp_object;
BEGIN
guru_emp_det:=emp_object(1005,'RRR',20000,1000);
guru_emp_det.display_records;
guru_emp_det.insert_records;
COMMIT;
END;

Code Explication

  • Code lignes 37-45 : Insertion des enregistrements via le constructeur implicite. L'appel au constructeur contient le nombre rรฉel de valeurs d'attributs.
  • Code ligne 38: Dรฉclare 'guru_emp_det' comme type d'objet 'emp_object'.
  • Code ligne 41: L'instruction 'guru_emp_det.display_records' appelle le membre 'display_records' et les valeurs des attributs sont affichรฉes.
  • Code ligne 42: L'instruction 'guru_emp_det.insert_records' appelle le membre 'insert_records' et les valeurs des attributs sont insรฉrรฉes dans la table. Le bloc effectue ensuite la validation. transaction.

Sortie :

Nom de l'employรฉ : RRR

Numรฉro d'employรฉ : 1005

Salaire: 20000

Gestionnaire : 1000

ร‰tape 3) Crรฉation d'un bloc anonyme pour appeler le type d'objet crรฉรฉ via le constructeur explicite pour emp_no 1006.

La capture d'รฉcran ci-dessous montre le bloc anonyme qui appelle emp_object via le constructeur explicite avec trois arguments.

Bloc anonyme appelant emp_object via le constructeur explicite pour emp_no 1006

DECLARE
guru_emp_det emp_object;
BEGIN
guru_emp_det:=emp_object(1006,'PPP',20000);
guru_emp_det.display_records;
guru_emp_det.insert_records;
COMMIT;
END;
/

Sortie

Employee Name:PPP 
Employee Number:1006 
Salary:20000 
Manager:1001

Code Explication:

  • Code lignes 46-53 : Insertion de l'enregistrement ร  l'aide du constructeur explicite.
  • Code ligne 46: Dรฉclare 'guru_emp_det' comme type d'objet 'emp_object'.
  • Code ligne 50: L'instruction 'guru_emp_det.display_records' appelle le membre 'display_records' et les valeurs des attributs sont affichรฉes.
  • Code ligne 51: L'instruction ยซ guru_emp_det.insert_records ยป appelle la mรฉthode ยซ insert_records ยป et les valeurs des attributs sont insรฉrรฉes dans la table. Comme seuls trois arguments sont fournis, le constructeur explicite attribue ร  l'identifiant du responsable sa valeur par dรฉfaut, 1001.

Hรฉritage dans le type d'objet

La propriรฉtรฉ d'hรฉritage permet ร  un sous-type d'objet d'accรฉder ร  tous les attributs et membres du super-type d'objet, ou type d'objet parent.

Le type sous-objet est appelรฉ type d'objet hรฉritรฉ, et le type super-objet est appelรฉ type d'objet parent. La syntaxe ci-dessous illustre la crรฉation des types d'objets parent et hรฉritรฉ. La capture d'รฉcran ci-dessous montre la syntaxe du type parent (SUPER), marquรฉe comme NON Dร‰FINITIVE.

Syntaxe CREATE TYPE pour un type d'objet parent NOT FINAL utilisรฉ dans l'hรฉritage

CREATE TYPE <object_type_name_parent> AS OBJECT
(
<attribute_l><datatype>,
.
.
)NOT FINAL;
/

Explication de la syntaxe :

  • La syntaxe ci-dessus illustre la crรฉation du type SUPER. La clause NOT FINAL autorise l'hรฉritage de ce type.

La capture d'รฉcran ci-dessous montre la syntaxe du type hรฉritรฉ (SUB) crรฉรฉe avec le mot-clรฉ UNDER.

Syntaxe CREATE TYPE UNDER pour un sous-type d'objet qui hรฉrite d'un parent

CREATE TYPE<object_type_name_sub>UNDER<object_type_name_parent>
(
<attribute_l><datatype>,
.
);
/

Explication de la syntaxe :

  • La syntaxe ci-dessus illustre la crรฉation du type SUB. Il contient tous les membres et attributs du type d'objet parent.

Exemple 1: Dans l'exemple ci-dessous, nous utilisons la propriรฉtรฉ d'hรฉritage pour insรฉrer un enregistrement avec l'identifiant de gestionnaire ยซ 1002 ยป pour l'enregistrement (ยซ RRR ยป, 1007, 20000). Nous exรฉcutons le programme en suivant les รฉtapes suivantes.

  • ร‰tape 1 : Crรฉer le type SUPER.
  • ร‰tape 2 : Crรฉez le type SUB et le corps.
  • ร‰tape 3 : Crรฉez un bloc anonyme pour appeler le type SUB.

ร‰tape 1) Crรฉer un type SUPER ou un type parent.

La capture d'รฉcran ci-dessous montre la crรฉation du supertype emp_object avec la clause NOT FINAL.

Crรฉation du supertype NOT FINAL emp_object pour l'exemple d'hรฉritage

CREATE TYPE emp_object AS OBJECT(
emp_no NUMBER,
emp_name VARCHAR2(50),
salary NUMBER,
manager NUMBER,
CONSTRUCTOR FUNCTION emp_object(p_emp_no NUMBER,p_emp_name VARCHAR2(50),
p_salary NUMBER)RETURN SELF AS RESULT),
MEMBER PROCEDURE insert_records,
MEMBER PROCEDURE display_records)NOT FINAL;
/

Code Explication:

  • Code lignes 1-9 : Crรฉation du type objet ยซ emp_object ยป avec 4 attributs et 3 membres. Il contient la dรฉfinition d'un constructeur avec seulement 3 paramรจtres. Dรฉclarรฉ comme ยซ NOT FINAL ยป, il s'agit d'un type parent.

ร‰tape 2) Crรฉez un sous-type sous le type SUPER.

La capture d'รฉcran ci-dessous montre le type hรฉritรฉ sub_emp_object et son corps en cours de crรฉation.

Crรฉation du type hรฉritรฉ sub_emp_object et de son corps avec insert_default_mgr

CREATE OR REPLACE TYPE sub_emp_object 
UNDER emp_object
(default_manager NUMBER,MEMBER PROCEDURE insert_default_mgr);
/


CREATE OR REPLACE TYPE BODY sub_emp_object 
AS
MEMBER PROCEDURE insert_default_mgr 
IS
BEGIN
INSERT INTO emp
VALUES(emp_no,emp_name,salary,manager);
END;
END;
/

Code Explication:

  • Code lignes 10-13 : Crรฉation de 'sub_emp_object' en tant que type hรฉritรฉ avec un attribut supplรฉmentaire 'default_manager' et une dรฉclaration de procรฉdure membre.
  • Code ligne 14: Crรฉation du corps pour le type d'objet hรฉritรฉ.
  • Code lignes 16-21 : Dรฉfinition de la procรฉdure membre qui insรจre des enregistrements dans la table ยซ emp ยป avec les valeurs du type d'objet SUPER, ร  l'exception de la valeur du responsable. Pour cette derniรจre, elle utilise ยซ default_manager ยป du type SUB.

ร‰tape 3) Crรฉation d'un bloc anonyme pour appeler le type SUB.

La capture d'รฉcran ci-dessous montre le bloc anonyme qui appelle le type SUB et insรจre l'identifiant du gestionnaire par dรฉfaut.

Bloc anonyme appelant le type sub_emp_object pour insรฉrer un identifiant de gestionnaire par dรฉfaut

DECLARE
guru_emp_det sub_emp_object;
BEGIN
guru_emp_det:= sub_emp_object(1007,'RRR',20000,1000,1002);
guru_emp_det.insert_default_mgr;
COMMIT;
END;
/

Code Explication:

  • Code ligne 25: Dรฉclaration de 'guru_emp_det' comme type 'sub_emp_object'.
  • Code ligne 27: Initialisation de l'objet avec le constructeur implicite. Ce constructeur possรจde 5 paramรจtres (4 attributs du type PARENT et 1 attribut du type SUB). Le dernier paramรจtre (1002) dรฉfinit la valeur de l'attribut default_manager.
  • Code ligne 28: Appel de la fonction membre 'insert_default_mgr' pour insรฉrer l'enregistrement avec l'identifiant du gestionnaire par dรฉfaut passรฉ dans le constructeur.

ร‰galitรฉ des objets PL/SQL

Les instances d'objets appartenant au mรชme type peuvent รชtre comparรฉes afin de dรฉterminer leur รฉgalitรฉ. Pour ce faire, le type d'objet requiert une mรฉthode spรฉcifique appelรฉe mรฉthode ORDER.

Cette mรฉthode ORDER doit รชtre une fonction qui renvoie un type numรฉrique. Elle prend deux paramรจtres en entrรฉe (premier paramรจtre : lโ€™identifiant de lโ€™instance de lโ€™objet lui-mรชme ; deuxiรจme paramรจtre : lโ€™identifiant dโ€™une autre instance dโ€™objet).

Les identifiants des deux instances d'objet sont comparรฉs, et le rรฉsultat est renvoyรฉ sous forme de nombre.

  • Une valeur positive indique que l'instance de l'objet SELF est supรฉrieure ร  l'autre instance.
  • Une valeur nรฉgative indique que l'instance de l'objet SELF est infรฉrieure ร  l'autre instance.
  • Zรฉro indique que l'instance de l'objet SELF est รฉgale ร  l'autre instance.
  • Si l'une des deux instances est nulle, la fonction renvoie null.

La capture d'รฉcran ci-dessous illustre la syntaxe de la fonction membre ORDER qui doit รชtre incluse dans le corps du type pour la vรฉrification d'รฉgalitรฉ.

Syntaxe de la fonction membre ORDER utilisรฉe pour comparer l'รฉgalitรฉ des instances d'objets

CREATE TYPE BODY<object_type_name_ 1>AS OBJECT
(
  ORDER MEMBER FUNCTION match(<parameter> object_type_name_ 1)
  RETURN INTEGER IS
  BEGIN
    IF <attribute_name>parameter <attribute_name>THEN
      RETURN -1; --any negative number will do
    ELSIF id>c.id THEN
      RETURN 1; --any positive number will do
    ELSE
      RETURN 0;
    END IF;
  END;
  .
  .
);
/

Explication de la syntaxe :

  • La syntaxe ci-dessus montre la fonction ORDER qui doit รชtre incluse dans le corps du type pour la vรฉrification d'รฉgalitรฉ.
  • Le paramรจtre de cette fonction doit รชtre une instance du mรชme type d'objet.
  • La fonction peut รชtre appelรฉe comme ยซ obj_instance_1.match(obj_instance_2) ยป, et cette expression renvoie la valeur numรฉrique indiquรฉe, oรน obj_instance_1 et obj_instance_2 sont des instances du type d'objet.

Exemple 1: Dans l'exemple suivant, nous comparons deux objets. Nous crรฉons deux instances et comparons leur attribut ยซ salaire ยป. Cette opรฉration se dรฉroule en deux รฉtapes.

  • ร‰tape 1 : Crรฉer le type dโ€™objet et le corps.
  • ร‰tape 2 : Crรฉer le bloc anonyme pour comparer les instances dโ€™objet.

ร‰tape 1) Crรฉation du type d'objet et du corps.

Les captures d'รฉcran ci-dessous montrent la spรฉcification emp_object_equality et son corps, qui dรฉfinit la fonction ORDER qui compare l'attribut salary.

Crรฉation de la spรฉcification de type d'objet emp_object_equality avec une fonction ORDER Dรฉfinition du corps de type emp_object_equality qui compare l'attribut de salaire

CREATE TYPE emp_object_equality AS OBJECT(
salary NUMBER,
ORDER MEMBER FUNCTION equals(c emp_object_equality)RETURN INTEGER);
/
CREATE TYPE BODY emp_object_equality AS
ORDER MEMBER FUNCTION equals(c emp_object_equality)RETURN INTEGER 
IS
BEGIN
IF salary<c.salary
THEN RETURN -1;
ELSIF salary>c.salary
THEN RETURN 1;
ELSE
RETURN 0;
END IF;
END;
END;
/

Code Explication:

  • Code lignes 1-4 : Crรฉation du type d'objet 'emp_object_equality' avec 1 attribut et 1 membre.
  • Code lignes 6-16 : Dรฉfinition de la fonction ORDER qui compare l'attribut ยซ salaire ยป de l'instance SELF et de l'instance du paramรจtre. Elle renvoie une valeur nรฉgative si le salaire de SELF est infรฉrieur, une valeur positive s'il est supรฉrieur, et 0 si les salaires sont รฉgaux.

Code Sortie :

Type crรฉรฉ

ร‰tape 2) Crรฉation du bloc anonyme pour comparer les instances d'objet.

La capture d'รฉcran ci-dessous montre le bloc anonyme qui compare deux instances de emp_object_equality par salaire.

Bloc anonyme comparant deux instances de emp_object_equality par salaire

DECLARE
l_obj_1 emp_object_equality;
l_obj_2 emp_object_equality;
BEGIN
l_obj_1:=emp_object_equality(15000); 
l_obj_2:=emp_object_equality(17000);
IF l_obj_1.equals(l_obj_2)>0
THEN
Dbms_output.put_line('Salary of first instance is greater');
ELSIF l_obj_1.equals(l_obj_2)<0
THEN
Dbms_output.put_line('Salary of second instance is greater'); 
ELSE
Dbms_output.put_line('Salaries are equal');
END IF;
END;
/

Sortie

Salary of second instance is greater

Code Explication:

  • Code ligne 20: Dรฉclaration de 'l_obj_1' de type 'emp_object_equality'.
  • Code ligne 21: Dรฉclaration de 'l_obj_2' de type 'emp_object_equality'.
  • Code ligne 23: Initialisation de 'l_obj_1' avec la valeur du salaire '15000'.
  • Code ligne 24: Initialisation de 'l_obj_2' avec la valeur du salaire '17000'.
  • Code lignes 25-33 : Impression du message en fonction du numรฉro renvoyรฉ par la fonction ORDER.

FAQ

Un type objet modรฉlise une entitรฉ unique du monde rรฉel dotรฉe d'attributs et de mรฉthodes. collection Un tableau associatif (VARRAY) contient plusieurs รฉlรฉments d'un mรชme type de donnรฉes. Les types d'objets dรฉcrivent la structure et le comportement, tandis que les collections stockent plusieurs valeurs.

Les deux comparent des instances d'objets. Une mรฉthode MAP renvoie une seule valeur scalaire qui Oracle La mรฉthode `sort` sert ร  trier ou comparer des objets, tandis que la mรฉthode `ORDER` compare directement deux instances et renvoie un nombre nรฉgatif, nul ou positif. Un type ne peut dรฉfinir que l'une ou l'autre.

Oui. Vous pouvez crรฉer une table d'objets oรน chaque ligne est une instance d'objet, ou utiliser un type objet comme type de donnรฉes d'une colonne de la table. Cela permet Oracle Stocker les objets structurรฉs directement dans la base de donnรฉes plutรดt que uniquement en mรฉmoire.

Un type NON INSTANTIABLE ne peut pas crรฉer d'objets directement ; il agit comme un type absolu.tracIl s'agit d'une base dont รฉtendent d'autres types. Combinรฉ ร  NOT FINAL, il dรฉfinit un supertype dont les sous-types fournissent l'implรฉmentation concrรจte de ses mรฉthodes dรฉclarรฉes.

Utilisez ALTER TYPE pour ajouter ou supprimer des attributs et des mรฉthodes, en ajoutant CASCADE pour mettre ร  jour les objets dรฉpendants, et DROP TYPE pour supprimer le type. Un type encore utilisรฉ par des tables ou d'autres types ne peut รชtre supprimรฉ tant que ces dรฉpendances n'ont pas รฉtรฉ traitรฉes.

Interrogez les vues du dictionnaire de donnรฉes USER_TYPES et ALL_TYPES pour obtenir les noms de types, et USER_TYPE_ATTRS et USER_TYPE_METHODS pour leurs attributs et mรฉthodes. Ces vues permettent d'auditer un modรจle objet existant sans avoir ร  consulter le code source.

Oui. Copilote GitHub brouillons de spรฉcifications CREATE TYPE, mรฉthodes TYPE BODY, constructeurs et fonctions ORDER ร  partir d'un commentaire. RevExaminez les types de donnรฉes des attributs, les paramรจtres du constructeur et les clauses d'hรฉritage avant de dรฉployer le type gรฉnรฉrรฉ.

Les assistants IA analysent vos tables et suggรจrent des types d'objets et des cartes d'attributs.pinget les hiรฉrarchies d'hรฉritage. Cette analyse par apprentissage automatique repรจre les attributs redondants, les constructeurs manquants et l'hรฉritage trop profond avant que le modรจle objet ne soit mis en production, amรฉliorant ainsi sa maintenabilitรฉ.

Rรฉsumez cet article avec :