Tutoriel sur les types d'objets Oracle PL / SQL avec EXEMPLES

Table des matières:

Anonim

Qu'est-ce que le type d'objet dans PL / SQL?

La programmation orientée objet est particulièrement adaptée à la création de composants réutilisables et d'applications complexes. Ils sont organisés autour d '«objets» plutôt que d' «actions», c'est-à-dire que les programmes sont conçus pour travailler et interagir avec l'objet entier plutôt que l'action unique. Ce concept permet au programmeur de renseigner et de manipuler les détails au niveau des entités objet.

L'image ci-dessous illustre un exemple du type d'objet dans lequel un compte bancaire est considéré comme une entité objet. Les attributs d'objet incluent des éléments qui contiennent des valeurs d'attribut, par exemple dans le compte bancaire; il s'agit du numéro de compte, du solde bancaire, etc., tandis que les méthodes d'objet décrivent des choses comme le calcul du taux d'intérêt, la génération d'un relevé bancaire, etc., ce qui nécessite l'exécution d'un certain processus.

En PL / SQL, la programmation orientée objet est basée sur des types d'objets.

Un type d'objet peut représenter n'importe quelle entité du monde réel. Nous allons discuter de plus de types d'objets dans ce chapitre.

Dans ce tutoriel - vous apprendrez,

  • Composants des types d'objets
  • Créer un objet dans Oracle
  • Initialisation de la déclaration du type d'objet
  • Constructeurs
  • Héritage dans le type d'objet
  • Égalité des objets PL / SQL

Composants des types d'objets

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

  1. Les attributs
  2. Membres / Méthodes

Les attributs

Les attributs sont la colonne ou le champ dans lequel les données sont stockées. Chaque attribut sera mappé au type de données qui définit le type de traitement et de stockage pour cet attribut. L'attribut peut être de n'importe quel type de données PL / SQL valide, ou il peut être d'un autre type d'objet.

Membres / Méthodes

Les membres ou les méthodes sont des sous-programmes définis dans le type d'objet. Ils ne sont pas utilisés pour stocker des données. Ils sont principalement utilisés pour définir le processus à l'intérieur du type d'objet. Pour des exemples de validation des données avant de renseigner le type d'objet. Ils sont déclarés dans la section de type d'objet et définis dans la section de corps de type d'objet du type d'objet. La section de corps dans le type d'objet est une partie facultative. Si aucun membre n'est présent, un type d'objet ne contiendra aucune partie du corps.

Créer un objet dans Oracle

Un type d'objet ne peut pas être créé au niveau du sous-programme, ils ne peuvent être créés qu'au niveau du schéma. Une fois le type d'objet défini dans le schéma, le même peut être utilisé dans les sous-programmes. Le type d'objet peut être créé à l'aide de 'CREATE TYPE'. Le corps du type ne peut être créé qu'après avoir créé son type d'objet.

CREATE TYPE AS OBJECT(,… );/CREATE TYPE BODY AS OBJECT(MEMBER[PROCEDURE|FUNCTION]ISBEGINEND;‭… ‬);/

Explication de la syntaxe:

  • La syntaxe ci-dessus montre la création de 'OBJECT' avec des attributs et 'OBJECT-BODY' 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 également être déclarés avant de les utiliser dans le programme.

Une fois le type d'objet créé, il peut être utilisé dans la section déclarative du sous-programme pour déclarer une variable de ce type d'objet.

Chaque fois qu'une variable est déclarée dans le sous-programme comme type d'objet, au moment de l'exécution, une nouvelle instance du type d'objet sera créée, et cette instance nouvellement créée peut être référencée au nom de la variable. De cette manière, un seul type d'objet peut stocker plusieurs valeurs sous différentes instances.

DECLARE ;BEGIN… END;/

Explication de la syntaxe:

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

Une fois que la variable est déclarée comme type d'objet dans un sous-programme, elle sera atomiquement nulle, c'est-à-dire que l'objet entier lui-même sera nul. Il doit être initialisé avec des valeurs pour les utiliser dans le programme. Ils peuvent être initialisés à l'aide de constructeurs.

Les constructeurs sont la méthode implicite d'un objet qui peut être référencée avec le même nom que celui du type d'objet. La syntaxe ci-dessous montre l'initialisation du type d'objet.

DECLARE ;BEGIN:=();END;/

Explication de la syntaxe:

  • La syntaxe ci-dessus montre l'initialisation de l'instance de type d'objet avec une valeur nulle.
  • Maintenant, l'objet lui-même n'est pas nul car il a été initialisé, mais les attributs à l'intérieur de l'objet seront nuls car nous n'avons attribué aucune valeur à ces attributs.

Constructeurs

Les constructeurs sont la méthode implicite d'un objet qui peut être référencée avec le même nom que celui du type d'objet. Chaque fois que l'objet est référencé pour la première fois, ce constructeur sera appelé implicitement.

Nous pouvons également initialiser les objets à l'aide de ces constructeurs. Le constructeur peut être défini explicitement en définissant le membre dans le corps du type d'objet avec le même nom du type d'objet.

Exemple 1 : Dans l'exemple suivant, nous allons utiliser le membre de type d'objet pour insérer l'enregistrement 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 allons afficher la même chose en utilisant le membre de type objet. Nous allons également utiliser le constructeur explicite pour renseigner l'ID du gestionnaire par défaut avec la valeur 1001 pour le deuxième enregistrement.

Nous allons l'exécuter dans les étapes ci-dessous.

  • Étape 1:
    • Créer un type d'objet
    • Corps du type d'objet
  • Étape 2: Création d'un bloc anonyme pour appeler le type d'objet créé via le constructeur implicite pour emp_no 1005.
  • Étape 3: Création d'un bloc anonyme pour appeler le type d'objet créé via le constructeur explicite pour emp_no 1006.

Étape 1) Créer un type d'objet et un corps de type d'objet

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);/
CREATE OR REPLACE TYPE BODY emp_object ASCONSTRUCTOR FUNCTION emp_object(p_emp_no NUMBER,p_emp_name VARCHAR2,p_salary NUMBER)RETURN SELF AS RESULTISBEGINDbms_output.put_line(’Constructor fired… ');SELF.emp_no:=p_emp_no;|SELF.emp_name:=p_emp_name;SELF.salary:=p_salary;SELF.managerial:=1001;RETURN;END:MEMBER PROCEDURE insert_recordsISBEGININSERT INTO emp VALUES(emp_noemp_name,salary,manager);ENDMEMBER PROCEDURE display_recordsISBEGINDbms_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:/

Explication du code

  • Ligne de code 1-9 : Création du type d'objet 'emp_object' avec 4 attributs et 3 membres. Il contient la définition des constructeurs avec seulement 3 paramètres. (Le constructeur implicite réel contiendra le nombre de paramètres égal au nombre d'attributs présents dans le type d'objet)
  • Ligne de code 10 : création du corps du type.
  • Ligne de code 11-21 : Définition du constructeur explicite. Attribution de la valeur de paramètre aux attributs et attribution de la valeur de l'attribut «manager» avec la valeur par défaut «1001».
  • Ligne de code 22-26 : Définition du membre 'insert_records' dans lequel les valeurs d'attributs sont insérées dans la table 'emp'.
  • Ligne de code 27-34 : Définition du membre 'display_records' dans lequel afficher les valeurs des attributs de type d'objet.

Production

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

DECLAREguru_emp_det emp_object;BEGINguru_emp_det:=emp_object(1005,’RRR',20000,1000);guru_emp_det.display_records;guru_emp_det.insert_records;COMMIT;END;

Explication du code

  • Ligne de code 37-45 : insertion des enregistrements à l'aide du constructeur implicite. L'appel au constructeur contient le nombre réel de valeurs d'attributs.
  • Ligne de code 38 : Déclare le guru_emp_det comme type d'objet de 'emp_object'.
  • Ligne de code 41 : Instruction 'guru_emp_det.display_records' appelée la fonction membre 'diplay_records' et les valeurs des attributs sont affichées
  • Ligne de code 42 : L'instruction 'guru_emp_det.insert_records' a appelé la fonction membre 'insert_records' et les valeurs d'attributs sont insérées dans la table.

Production

Nom de l'employé: RRR

Numéro d'employé: 1005

Salaire: 20000

Directeur: 1000

Étape 3) Création d'un bloc anonyme pour appeler le type d'objet créé via un constructeur explicite pour emp_no 1006

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

Production

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

Explication du code:

  • Ligne de code 46-53 : insertion des enregistrements à l'aide du constructeur explicite.
  • Ligne de code 46 : Déclare le guru_emp_det comme type d'objet de 'emp_object'.
  • Ligne de code 50 : Instruction 'guru_emp_det.display_records' appelée la fonction membre 'display_records' et les valeurs des attributs sont affichées
  • Ligne de code 51 : Instruction 'guru_emp_det.insert_records' appelée la fonction membre 'insert_records' et les valeurs d'attributs sont insérées dans la table.

Héritage dans le type d'objet

La propriété d'héritage permet au type de sous-objet d'accéder à tous les attributs et membres du type de super objet ou du type d'objet parent.

Le type de sous-objet est appelé type d'objet hérité et le type de super objet est appelé type d'objet parent. La syntaxe ci-dessous montre comment créer un type d'objet parent et hérité.

CREATE TYPE  AS OBJECT(,… )NOT FINAL;/

Explication de la syntaxe:

  • La syntaxe ci-dessus montre la création du type SUPER.
CREATE TYPEUNDER(,.);/

Explication de la syntaxe:

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

Exemple 1: Dans l'exemple ci-dessous, nous allons utiliser la propriété d'héritage pour insérer l'enregistrement avec l'ID de gestionnaire comme '1002' pour l'enregistrement suivant ('RRR', 1007, 20000).

Nous allons exécuter le programme ci-dessus dans les étapes suivantes

  • Étape 1: Créez le type SUPER.
  • Étape 2: Créez le type et le corps SUB.
  • Étape 3: Création d'un bloc anonyme pour appeler le type SUB.

Étape 1) Créez le type SUPER ou le type Parent.

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;/

Explication du code:

  • Ligne de code 1-9 : Création du type d'objet 'emp_object' avec 4 attributs et 3 membres. Il contient la définition des constructeurs avec seulement 3 paramètres. Il a été déclaré comme «NON FINAL», il est donc de type parent.

Étape 2) Créez le type SUB sous le type SUPER.

CREATE OR REPLACE TYPE sub_emp_objectUNDER emp_object(default_manager NUMBER,MEMBER PROCEDURE insert_default_mgr);/CREATE OR REPLACE TYPE BODY sub_emp_objectASMEMBER PROCEDURE insert_default_mgrISBEGININSERT INTO empVALUES(emp_no,emp_name:salary,manager):END;END;/

Explication du code:

  • Ligne de code 10-13 : Création du sub_emp_object comme type hérité avec un attribut supplémentaire 'default_manager' et une déclaration de procédure membre.
  • Ligne de code 14 : création du corps du type d'objet hérité.
  • Ligne de code 1 6 -21 : Définition de la procédure membre qui insère les enregistrements dans la table "emp" avec les valeurs du type d'objet "SUPER", à l'exception de la valeur du gestionnaire. Pour la valeur de gestionnaire, il utilise le type «default_manager» du type «SUB».

Étape 3) Création d'un bloc anonyme pour appeler le type SUB

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

Explication du code:

  • Ligne de code 25 : Déclarer 'guru_emp_det' comme type 'sub_emp_object'.
  • Ligne de code 27 : Initialisation de l'objet avec le constructeur implicite. Le constructeur a 5 paramètres (4 attributs de type PARENT et 2 attributs de type SUB). Le dernier paramètre (1002) définit la valeur de l'attribut default_manager
  • Ligne de code 28 : Appel du membre 'insert_default_mgr' pour insérer les enregistrements avec l'ID de gestionnaire par défaut passé dans le constructeur.

Égalité des objets PL / SQL

L'instance d'objet qui appartient aux mêmes objets peut être comparée pour l'égalité. Pour cela, nous devons avoir la méthode spéciale dans le type d'objet appelée méthode 'ORDER'.

Cette méthode 'ORDER' doit être la fonction qui renvoie le type numérique. Il prend deux paramètres en entrée, (premier paramètre: id de l'instance de self-objet, second paramètre: id d'une autre instance d'objet).

L'identifiant de l'instance de deux objets est comparé et le résultat est renvoyé sous forme numérique.

  • Une valeur positive indique que l'instance d'objet SELF est supérieure à une autre instance.
  • La valeur négative indique que l'instance d'objet SELF est inférieure à une autre instance.
  • Zéro signifie que l'instance d'objet SELF est égale à une autre instance.
  • Si l'une des instances est nulle, cette fonction retournera null.
CREATE TYPE BODYAS OBJECT(ORDER MEMBER FUNCTION match(
 object_type_name_ 1)RETURN INTEGER IS BEGINIF parameter THENRETURN -1; --any negative number will doELSIF id>c.id THENRETURN 1; -any positive number will doELSERETURN 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 ci-dessus peut être appelée comme "obj_instance_1.match (obj_instance_2)" et cette expression renverra la valeur numérique comme indiqué, où obj_instance_1 et obj_instance_2 sont l'instance de object_type_name.

Exemple 1 : Dans l'exemple suivant, nous allons voir comment comparer deux objets. Nous allons créer deux instances et nous allons comparer l'attribut «salaire» entre elles. Nous allons faire en deux étapes.

  • Étape 1: création du type et du corps de l'objet.
  • Étape 2: création du bloc anonyme à appeler compare l'instance d'objet.

Étape 1) Création du type et du corps de l'objet.

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 ASORDER MEMBER FUNCTION equals(c emp_object_equality)RETURN INTEGERISBEGIN‭ ‬IF salaryc.salaryTHEN RETURN 1;ELSERETURN 0;END IF:‭ ‬END;END;/

Explication du code:

  • Ligne de code 1-4: Création du type d'objet 'emp_object_equality' avec 1 attributs et 1 membre.
  • Ligne de code 6-16 : Définition de la fonction ORDER qui compare l'attribut 'salaire' de l'instance SELF et le type d'instance de paramètre. Il renvoie négatif si le salaire SELF est inférieur ou positif si le salaire SELF est supérieur et 0 si les salaires sont égaux.

Sortie de code:

Type créé

Étape 2) Création du bloc anonyme à appeler compare l'instance d'objet.

DECLAREl_obj_l emp_object_equality;l_obj_2 emp_object_equality;BEGINl_obj_l:=emp_object_equality(15000);l_obj_2:=emp_object_equality(17000);IF l_obj_1.equalS(l_obj_2)>0THENDbms_output.put_line(’Salary of first instance is greater’):ELSIF l_obj_l.equalS(l_obj_2)<0THENDbms_output.put_line(’Salary of second instance is greater’);ELSEDbms_output.put_line(’Salaries are equal’);END IF;END;/

Production

Salary of second instance is greater

Explication du code:

  • Ligne de code 20 : Déclaration du l_obj_1 de type emp_object_equality.
  • Ligne de code 21 : Déclaration du l_obj_2 de type emp_object_equality.
  • Ligne de code 23 : Initialisation de l_obj_1 avec la valeur de salaire '15000'
  • Ligne de code 24 : Initialisation de l_obj_1 avec la valeur de salaire '17000'
  • Ligne de code 25-33 : Imprimez le message en fonction du numéro de retour de la fonction ORDER.

Résumé

Dans ce chapitre, nous avons vu le type d'objet et ses propriétés. Nous avons également discuté des constructeurs, des membres, des attributs, de l'héritage et de l'égalité dans les objets PL / SQL.