1 / 26

Créer des packages

Créer des packages. Objectifs. A la fin de ce chapitre, vous pourrez : décrire des packages et répertorier leurs éventuels composants créer un package regroupant des variables, constantes, exceptions, procédures, fonctions et curseurs associés

tarala
Download Presentation

Créer des packages

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Créer des packages

  2. Objectifs A la fin de ce chapitre, vous pourrez : • décrire des packages et répertorier leurs éventuels composants • créer un package regroupant des variables, constantes, exceptions, procédures, fonctions et curseurs associés • désigner une structure de package comme publique ou privée • appeler une structure de package • décrire l'utilisation d'un package sans corps

  3. Présentation des packages Les packages : • regroupent des types PL/SQL, des éléments et des sous-programmes présentant une relation logique • sont constitués de deux éléments : • spécification • corps • ne peuvent pas être appelés, paramétrés ou imbriqués • permettent au serveur Oracle de lire simultanément plusieurs objets en mémoire

  4. Composants d'un package Variable publique Spécification du package Déclaration de la procédure A Procédure publique Variable privée Définition de la procédure B Procédure privée Corps du package Définition de la procédure A Procédure publique Variable locale

  5. Référencer des objets de package Spécification du package Déclaration de la procédure A Définition de la procédure B Corps du package Définition de la procédure A

  6. Développer un package Editeur Code 1 iSQL*Plus Chargement et exécution du fichierfile.sql 2 Code source Oracle Compilation Pseudo-code Exécution

  7. Développer un package • L'enregistrement du texte de l'instruction CREATEPACKAGE dans deux fichiers SQL distincts facilite les modifications ultérieures du package • Une spécification de package peut exister sans corps de package, mais l'inverse n'est pas vrai

  8. Créer la spécification du package Syntaxe: • L'option REPLACE supprime et recrée la spécification du package • Par défaut, la valeur NULL est affectée aux variables déclarées dans la spécification du package • Toutes les structures déclarées dans une spécification de package peuvent être visibles par les utilisateurs disposant de privilèges sur le package CREATE [OR REPLACE] PACKAGE package_name IS|AS public type and item declarations subprogram specifications END package_name;

  9. Déclarer des structures publiques PackageCOMM_PACKAGE G_COMM 1 Spécification du package Déclaration de la procédure RESET_COMM 2

  10. Exemple de création de spécification de package CREATE OR REPLACE PACKAGE comm_package IS g_comm NUMBER := 0.10; --initialized to 0.10 PROCEDURE reset_comm (p_comm IN NUMBER); END comm_package; / • G_COMM est une variable globale dont la valeur d'initialisation est 0,10. • RESET_COMM est une procédure publique implémentée dans le corps du package.

  11. Créer le corps du package Syntaxe: CREATE [OR REPLACE] PACKAGE BODY package_name IS|AS private type and item declarations subprogram bodies END package_name; • L'option REPLACE supprime et recrée le corps du package • Les identificateurs définis exclusivement dans le corps du package sont des structures privées. Ils ne sont pas visibles à l'extérieur du corps du package • Toutes les structures privées doivent être déclarées avant d'être utilisées dans les structures publiques

  12. Structures publiques et privées PackageCOMM_PACKAGE G_COMM 1 Spécification du package Déclaration de la procédure RESET_COMM 2 Définition de la fonction VALIDATE_COMM 3 Corps du package Définition de la procédure RESET_COMM 2

  13. CREATE OR REPLACE PACKAGE BODY comm_package IS FUNCTION validate_comm (p_comm IN NUMBER) RETURN BOOLEAN IS v_max_comm NUMBER; BEGIN SELECT MAX(commission_pct) INTO v_max_comm FROM employees; IF p_comm > v_max_comm THEN RETURN(FALSE); ELSE RETURN(TRUE); END IF; END validate_comm; ... Exemple de création de corps de package comm_pack.sql

  14. PROCEDURE reset_comm (p_comm IN NUMBER) IS BEGIN IF validate_comm(p_comm) THEN g_comm:=p_comm; --reset global variable ELSE RAISE_APPLICATION_ERROR(-20210,'Invalid commission'); END IF; END reset_comm; END comm_package; / Exemple de création de corps de package comm_pack.sql

  15. Appeler des structures de package Exemple 1: Appeler une fonction depuis une procédure du même package. CREATE OR REPLACE PACKAGE BODY comm_package IS . . . PROCEDURE reset_comm (p_comm IN NUMBER) IS BEGIN IF validate_comm(p_comm) THEN g_comm := p_comm; ELSE RAISE_APPLICATION_ERROR (-20210, 'Invalid commission'); END IF; END reset_comm; END comm_package;

  16. Appeler des structures de package Exemple 2: Appeler une procédure de package depuis iSQL*Plus. Exemple 3: Appeler une procédure de package dans un autre schéma. Exemple 4: Appeler une procédure de package dans une base de données distante. EXECUTE comm_package.reset_comm(0.15) EXECUTE scott.comm_package.reset_comm(0.15) EXECUTE comm_package.reset_comm@ny(0.15)

  17. CREATE OR REPLACE PACKAGE global_consts IS mile_2_kilo CONSTANT NUMBER := 1.6093; kilo_2_mile CONSTANT NUMBER := 0.6214; yard_2_meter CONSTANT NUMBER := 0.9144; meter_2_yard CONSTANT NUMBER := 1.0936; END global_consts; / EXECUTE DBMS_OUTPUT.PUT_LINE('20 miles = '||20* global_consts.mile_2_kilo||' km') Déclarer un package sans corps

  18. Référencer une variable publique depuis une procédure autonome Exemple: CREATE OR REPLACE PROCEDURE meter_to_yard (p_meter IN NUMBER, p_yard OUT NUMBER) IS BEGIN p_yard := p_meter * global_consts.meter_2_yard; END meter_to_yard; / VARIABLE yard NUMBER EXECUTE meter_to_yard (1, :yard) PRINT yard

  19. Supprimer des packages Utilisez la syntaxe suivante pour supprimer la spécification et le corps du package : Utilisez la syntaxe suivante pour supprimer le corps du package : DROP PACKAGE package_name; DROP PACKAGE BODY package_name;

  20. Règles relatives au développement des packages • Créer des structures de package pour une utilisation générale • Définir la spécification avant le corps du package • La spécification du package doit contenir uniquement les structures à rendre publiques • Placer les éléments dans la partie déclarative du corps du package, lorsqu'ils doivent être tenus à jour tout au long d'une session ou durant plusieurs transactions • En cas de modification de la spécification du package, chaque sous-programme y faisant référence doit être compilé • La spécification du package doit contenir le moins de structures possible

  21. Avantages liés aux packages • Modularité : encapsule les structures associées • Conception simplifiée des applications : la spécification et le corps sont codés et compilés séparément • Masquage d'informations : • seules les déclarations contenues dans la spécification du package sont visibles et accessibles aux applications • Les structures privées du corps du package sont masquées et inaccessibles • L'ensemble du code est masqué dans le corps du package

  22. Avantages liés aux packages • Fonctionnalité ajoutée : persistance des variables et des curseurs • Performances accrues : • l'ensemble du package est chargé en mémoire la première fois que celui-ci est référencé • une seule copie est chargée en mémoire pour l'ensemble des utilisateurs • la hiérarchie des dépendances est simplifiée • Surcharge : plusieurs sous-programmes portant le même nom

  23. Synthèse Ce chapitre vous a permis d'apprendre à : • optimiser l'organisation, la gestion, la sécurité et les performances en utilisant des packages • regrouper les procédures et les fonctions associées au sein d'un package • modifier un corps de package sans affecter sa spécification • définir un accès sécurisé à l'ensemble du package

  24. Synthèse Ce chapitre vous a permis d'apprendre à : • masquer le code source aux utilisateurs • charger l'ensemble du package en mémoire au premier appel • réduire les accès au disque pour les appels ultérieurs • fournir les identificateurs de la session utilisateur

  25. Synthèse Tâche Créer (ou modifier) une spécification de package existante Créer (ou modifier) un corps de package existant Supprimer la spécification et le corps du package Supprimer le corps du package uniquement Commande CREATE [ORREPLACE] PACKAGE CREATE [ORREPLACE] PACKAGEBODY DROP PACKAGE DROP PACKAGE BODY

  26. Présentation de l'exercice 5 Dans cet exercice, vous allez : • créer des packages • appeler des programmes de package

More Related