créer des packages
Post on 20-Mar-2016
38 Views
Preview:
DESCRIPTION
TRANSCRIPT
5Copyright © Oracle Corporation, 2001. Tous droits réservés.
Créer des packages
5-2 Copyright © Oracle Corporation, 2001. Tous droits réservés.
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
5-3 Copyright © Oracle Corporation, 2001. Tous droits réservés.
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
5-4 Copyright © Oracle Corporation, 2001. Tous droits réservés.
Composants d'un package
Déclaration de la procédure A
Définition de la procédure A
Définition de la procédure B
Variable publique
Variable privée
Procédure publique
Procédure privée
Procédure publique
Variable locale
Spécification du package
Corps du package
5-5 Copyright © Oracle Corporation, 2001. Tous droits réservés.
Référencer des objets de package
Spécification du package
Corps du package
Déclaration de la procédure A
Définition de la procédure B
Définition de la procédure A
5-6 Copyright © Oracle Corporation, 2001. Tous droits réservés.
Exécution
Développer un package
iSQL*PlusCode
Editeur
Chargement et exécution du fichier file.sql2
Code source
Pseudo-code
CompilationOracle
1
5-7 Copyright © Oracle Corporation, 2001. Tous droits réservés.
Développer un package
• L'enregistrement du texte de l'instruction CREATE PACKAGE 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
5-8 Copyright © Oracle Corporation, 2001. Tous droits réservés.
CREATE [OR REPLACE] PACKAGE package_nameIS|AS public type and item declarations subprogram specificationsEND package_name;
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
5-9 Copyright © Oracle Corporation, 2001. Tous droits réservés.
Package COMM_PACKAGE
G_COMM
Spécification du package
1
Déclarer des structures publiques
Déclaration de la procédure RESET_COMM
2
5-10 Copyright © Oracle Corporation, 2001. Tous droits réservés.
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.
5-11 Copyright © Oracle Corporation, 2001. Tous droits réservés.
Créer le corps du package
Syntaxe:
CREATE [OR REPLACE] PACKAGE BODY package_nameIS|AS private type and item declarations subprogram bodiesEND 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
5-12 Copyright © Oracle Corporation, 2001. Tous droits réservés.
Déclaration de la procédure RESET_COMM
Définition de la fonction VALIDATE_COMM
Spécification du package
Corps du package
1
3
2Définition de la procédure RESET_COMM
Package COMM_PACKAGE
Structures publiques et privées
G_COMM
2
5-13 Copyright © Oracle Corporation, 2001. Tous droits réservés.
Exemple de création de corps de package
CREATE OR REPLACE PACKAGE BODY comm_packageIS 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;...
comm_pack.sql
5-14 Copyright © Oracle Corporation, 2001. Tous droits réservés.
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
5-15 Copyright © Oracle Corporation, 2001. Tous droits réservés.
Appeler des structures de package
Exemple 1: Appeler une fonction depuis une procéduredu 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;
5-16 Copyright © Oracle Corporation, 2001. Tous droits réservés.
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)
5-17 Copyright © Oracle Corporation, 2001. Tous droits réservés.
Déclarer un package sans corps
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')
5-18 Copyright © Oracle Corporation, 2001. Tous droits réservés.
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)ISBEGIN p_yard := p_meter * global_consts.meter_2_yard;END meter_to_yard;/VARIABLE yard NUMBEREXECUTE meter_to_yard (1, :yard)PRINT yard
5-19 Copyright © Oracle Corporation, 2001. Tous droits réservés.
Utilisez la syntaxe suivante pour supprimer laspécification et le corps du package :
Utilisez la syntaxe suivante pour supprimer le corps du package :
DROP PACKAGE package_name;
Supprimer des packages
DROP PACKAGE BODY package_name;
5-20 Copyright © Oracle Corporation, 2001. Tous droits réservés.
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
5-21 Copyright © Oracle Corporation, 2001. Tous droits réservés.
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
5-22 Copyright © Oracle Corporation, 2001. Tous droits réservés.
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
5-23 Copyright © Oracle Corporation, 2001. Tous droits réservés.
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
5-24 Copyright © Oracle Corporation, 2001. Tous droits réservés.
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
5-25 Copyright © Oracle Corporation, 2001. Tous droits réservés.
Commande
CREATE [OR REPLACE] PACKAGE
CREATE [OR REPLACE] PACKAGE BODY
DROP PACKAGE
DROP PACKAGE BODY
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
Synthèse
5-26 Copyright © Oracle Corporation, 2001. Tous droits réservés.
Présentation de l'exercice 5
Dans cet exercice, vous allez :• créer des packages• appeler des programmes de package
top related