Zoeken…


Syntaxis

  • CREATE [OF REPLACE] PACKAGE pakketnaam

    [AUTHID {CURRENT_USER | DEFINER}]

    {IS | NET ZO}

    [PRAGMA SERIALLY_REUSABLE;]

    [collection_type_definition ...]

    [record_type_definition ...]

    [subtype_definition ...]

    [collection_declaration ...]

    [constante_declaration ...]

    [exception_declaration ...]

    [object_declaration ...]

    [record_declaration ...]

    [variable_declaration ...]

    [cursor_spec ...]

    [function_spec ...]

    [procedure_spec ...]

    [call_spec ...]

    [PRAGMA RESTRICT_REFERENCES (beweringen) ...]

    END [pakketnaam];

  • PAKKET MAKEN OF VERVANGEN Pakketnaam IS

    FUNCTIE Functienaam (parameter1 IN VARCHAR2, paramter2 IN NUMMER) RETURN VARCHAR2;

    END Pakketnaam;

  • CREATE [OF VERVANG] PACKAGE BODY pakketnaam

    {IS | NET ZO}

    [PRAGMA SERIALLY_REUSABLE;]

    [collection_type_definition ...]

    [record_type_definition ...]

    [subtype_definition ...]

    [collection_declaration ...]

    [constante_declaration ...]

    [exception_declaration ...]

    [object_declaration ...]

    [record_declaration ...]

    [variable_declaration ...]

    [cursor_body ...]

    [function_spec ...]

    [procedure_spec ...]

    [call_spec ...]

    END [pakketnaam];

  • PAKKET LICHAAM MAKEN OF VERVANGEN Pakketnaam IS

    FUNCTIE Functienaam (parameter1 IN VARCHAR2, paramter2 IN NUMMER) RETOUR VARCHAR2 IS

    declaraties

    BEGINNEN

    uit te voeren verklaringen

    RETOUR varchar2-variabele

    END Functienaam;

    END Pakketnaam;

Pakket gebruik

Pakketten in PLSQL zijn een verzameling procedures, functies, variabelen, uitzonderingen, constanten en gegevensstructuren. Over het algemeen zijn de bronnen in een pakket aan elkaar gerelateerd en vervullen ze vergelijkbare taken.

Waarom pakketten gebruiken

  • modulariteit
  • Betere prestaties / funtionaliteit

Delen van een pakket

Specificatie - Soms een pakketkop genoemd. Bevat variabele en typeverklaringen en de handtekeningen van de functies en procedures in het pakket die openbaar van buiten het pakket kunnen worden opgeroepen.

Pakketlichaam - Bevat de code en privéverklaringen .

De pakketspecificatie moet vóór de pakketbody worden gecompileerd, anders zal de pakketcompilatie een fout melden.

overbelasting

Functies en procedures in pakketten kunnen worden overbelast. Het volgende pakket TEST heeft twee procedures genaamd print_number , die zich anders gedragen, afhankelijk van de parameters waarmee ze worden aangeroepen.

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

We noemen beide procedures. De eerste met de parameter integer, de tweede met varchar2.

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

De output van het bovenstaande script is:

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

Beperkingen op overbelasting

Alleen lokale of verpakte subprogramma's of typemethoden kunnen worden overbelast. Daarom kunt u zelfstandige subprogramma's niet overbelasten. Ook kunt u twee subprogramma's niet overbelasten als hun formele parameters alleen verschillen in naam of parametermodus

Definieer een pakketkop en hoofdtekst met een functie.

In dit voorbeeld definiëren we een pakketkop en een pakket met een functie.
Daarna roepen we een functie uit het pakket aan die een retourwaarde retourneert.

Pakketkop :

CREATE OR REPLACE PACKAGE SkyPkg AS

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

Pakket lichaam :

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

De functie oproepen vanuit de body van het pakket :

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow