26
5 Copyright © Oracle Corporation, 2001. Tous droits réservés. Créer des packages

Créer des packages

  • Upload
    tarala

  • View
    34

  • Download
    1

Embed Size (px)

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

Page 1: Créer des packages

5Copyright © Oracle Corporation, 2001. Tous droits réservés.

Créer des packages

Page 2: 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

Page 3: Créer des packages

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

Page 4: Créer des packages

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

Page 5: Créer des packages

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

Page 6: Créer des packages

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

Page 7: Créer des packages

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

Page 8: Créer des packages

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

Page 9: Créer des packages

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

Page 10: Créer des packages

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.

Page 11: Créer des packages

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

Page 12: Créer des packages

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

Page 13: Créer des packages

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

Page 14: Créer des packages

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

Page 15: Créer des packages

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;

Page 16: Créer des packages

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)

Page 17: Créer des packages

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')

Page 18: Créer des packages

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

Page 19: Créer des packages

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;

Page 20: Créer des packages

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

Page 21: Créer des packages

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

Page 22: Créer des packages

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

Page 23: Créer des packages

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

Page 24: Créer des packages

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

Page 25: Créer des packages

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

Page 26: Créer des packages

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