Recherche…


Syntaxe

  • CREATE [OU REPLACE] PACKAGE nom_package

    [AUTHID {CURRENT_USER | DEFINER}]

    {IS | COMME}

    [PRAGMA SERIALLY_REUSABLE;]

    [collection_type_definition ...]

    [record_type_definition ...]

    [sous-type_definition ...]

    [collection_declaration ...]

    [const_declaration ...]

    [exception_declaration ...]

    [object_declaration ...]

    [record_declaration ...]

    [variable_declaration ...]

    [curseur_spec ...]

    [function_spec ...]

    [procedure_spec ...]

    [call_spec ...]

    [PRAGMA RESTRICT_REFERENCES (assertions) ...]

    END [nom_package];

  • CREATE OR REPLACE PACKAGE PackageName IS

    FUNCTION FunctionName (paramètre1 IN VARCHAR2, paramètre 2 EN NUMBER) RETURN VARCHAR2;

    END PackageName;

  • CREATE [OU REPLACE] PACKAGE BODY nom_package

    {IS | COMME}

    [PRAGMA SERIALLY_REUSABLE;]

    [collection_type_definition ...]

    [record_type_definition ...]

    [sous-type_definition ...]

    [collection_declaration ...]

    [const_declaration ...]

    [exception_declaration ...]

    [object_declaration ...]

    [record_declaration ...]

    [variable_declaration ...]

    [cursor_body ...]

    [function_spec ...]

    [procedure_spec ...]

    [call_spec ...]

    END [nom_package];

  • CREATE OR REPLACE PODAGE BODY PackageName EST

    FUNCTION FunctionName (paramètre1 IN VARCHAR2, paramètre 2 EN NUMBER) RETURN VARCHAR2 IS

    déclarations

    COMMENCER

    déclarations à exécuter

    Variable varchar2

    END FunctionName;

    END PackageName;

Utilisation du paquet

Les packages dans PLSQL sont un ensemble de procédures, de fonctions, de variables, d'exceptions, de constantes et de structures de données. Généralement, les ressources d'un package sont liées entre elles et accomplissent des tâches similaires.

Pourquoi utiliser des packages

  • La modularité
  • Meilleure performance / Funtionality

Parties d'un paquet

Spécification - Parfois appelé en-tête de package. Contient des déclarations de variables et de types et les signatures des fonctions et des procédures qui sont dans le paquet qui sont publiques à appeler de l' extérieur du paquet.

Package Body - Contient le code et les déclarations privées .

La spécification du package doit être compilée avant le corps du package, sinon la compilation du corps du package signalera une erreur.

Surcharge

Les fonctions et les procédures des packages peuvent être surchargées. Le package suivant TEST a deux procédures appelées print_number , qui se comportent différemment selon les paramètres avec lesquels elles sont appelées.

create or replace package TEST is
  procedure print_number(p_number in integer);
  procedure print_number(p_number in varchar2);
end TEST;
/
create or replace package body TEST is

  procedure print_number(p_number in integer) is
  begin
    dbms_output.put_line('Digit: ' || p_number);    
  end;
  
  procedure print_number(p_number in varchar2) is
  begin
    dbms_output.put_line('String: ' || p_number);    
  end;

end TEST;
/

Nous appelons les deux procédures. Le premier avec le paramètre entier, le second avec varchar2.

set serveroutput on;
-- call the first procedure
exec test.print_number(3);
-- call the second procedure
exec test.print_number('three');

La sortie du script ci-dessus est:

SQL> 
Digit: 3
PL/SQL procedure successfully completed
String: three
PL/SQL procedure successfully completed

Restrictions sur la surcharge

Seuls les sous-programmes ou les méthodes de type locales ou empaquetées peuvent être surchargés. Par conséquent, vous ne pouvez pas surcharger les sous-programmes autonomes. En outre, vous ne pouvez pas surcharger deux sous-programmes si leurs paramètres formels ne diffèrent que par leur nom ou leur mode de paramètre.

Définissez un en-tête et un corps de package avec une fonction.

Dans cet exemple, nous définissons un en-tête de package et un corps de package avec une fonction.
Après cela, nous appelons une fonction du package qui renvoie une valeur de retour.

En-tête du paquet :

CREATE OR REPLACE PACKAGE SkyPkg AS

       FUNCTION GetSkyColour(vPlanet IN VARCHAR2)
       RETURN VARCHAR2;
       
END;
/

Corps du colis :

CREATE OR REPLACE PACKAGE BODY SkyPkg AS

        FUNCTION GetSkyColour(vPlanet IN VARCHAR2)
        RETURN VARCHAR2
        AS
               vColour VARCHAR2(100) := NULL;
        BEGIN
               IF vPlanet = 'Earth' THEN
                       vColour := 'Blue';
               ELSIF vPlanet = 'Mars' THEN
                       vColour := 'Red';
               END IF;

               RETURN vColour;
        END;
        
END;
/

Appel de la fonction depuis le corps du package :

DECLARE
        vColour VARCHAR2(100);
BEGIN
        vColour := SkyPkg.GetSkyColour(vPlanet => 'Earth');
        DBMS_OUTPUT.PUT_LINE(vColour);
END;
/


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow