Sök…


Syntax

  • SKAPA [ELLER Byt ut] PAKET paketnamn

    [AUTHID {CURRENT_USER | Definer}]

    {IS | SOM}

    [PRAGMA SERIALLY_REUSABLE;]

    [collection_type_definition ...]

    [record_type_definition ...]

    [subtype_definition ...]

    [samling_deklaration ...]

    [konstant_deklaration ...]

    [undantag_deklaration ...]

    [object_declaration ...]

    [postdeklaration ...]

    [variabel_deklaration ...]

    [cursor_spec ...]

    [function_spec ...]

    [procedure_spec ...]

    [call_spec ...]

    [PRAGMA RESTRICT_REFERENCES (påståenden) ...]

    END [paketnamn];

  • SKAPA ELLER Byt ut PAKETET Paketnamn ÄR

    FUNCTION Funktionsnamn (parameter1 I VARCHAR2, paramter2 IN NUMMER) RETURN VARCHAR2;

    END-paketnamn;

  • SKAPA [ELLER Byt ut] PACKAGE BODY paketnamn

    {IS | SOM}

    [PRAGMA SERIALLY_REUSABLE;]

    [collection_type_definition ...]

    [record_type_definition ...]

    [subtype_definition ...]

    [samling_deklaration ...]

    [konstant_deklaration ...]

    [undantag_deklaration ...]

    [object_declaration ...]

    [postdeklaration ...]

    [variabel_deklaration ...]

    [cursor_body ...]

    [function_spec ...]

    [procedure_spec ...]

    [call_spec ...]

    END [paketnamn];

  • SKAPA ELLER Byt ut paketets namn är

    FUNCTION Funktionsnamn (parameter1 I VARCHAR2, paramter2 IN NUMMER) RETURN VARCHAR2 IS

    deklarationer

    BÖRJA

    uttalanden att utföra

    RETURN varchar2 variabel

    END Funktionsnamn;

    END-paketnamn;

Paketanvändning

Paket i PLSQL är en samling av procedurer, funktioner, variabler, undantag, konstanter och datastrukturer. Generellt är resurserna i ett paket relaterade till varandra och utför liknande uppgifter.

Varför använda paket

  • modularitet
  • Bättre prestanda / funktionalitet

Delar av ett paket

Specifikation - Ibland kallas en paketrubrik. Innehåller variabla och typdeklarationer och signaturerna för de funktioner och procedurer som finns i paketet som är offentliga för att anropas utanför paketet.

Paketorgan - Innehåller koden och privata deklarationer.

Paketspecifikationen måste sammanställas före paketet, annars kommer paketkroppssammansättningen att rapportera ett fel.

överbelastning

Funktioner och procedurer i paket kan överbelastas. Följande paket TEST har två procedurer som kallas print_number , som uppträder på olika sätt beroende på parametrar de kallas med.

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

Vi kallar båda procedurerna. Den första med heltalsparametern, den andra med varchar2.

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

Utmatningen från ovanstående skript är:

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

Begränsningar för överbelastning

Endast lokala eller paketerade underprogram eller typmetoder kan överbelastas. Därför kan du inte överbelasta fristående underprogram. Du kan inte överbelasta två underprogram om deras formella parametrar endast skiljer sig i namn- eller parametermod

Definiera en paketrubrik och en kropp med en funktion.

I det här exemplet definierar vi en paketrubrik och en paketkropp med en funktion.
Efter det ringer vi en funktion från paketet som returnerar ett returvärde.

Paketrubrik :

CREATE OR REPLACE PACKAGE SkyPkg AS

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

Paketkropp :

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

Ringa funktionen från paketet :

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow