Ricerca…


Sintassi

  • CREATE [O REPLACE] PACKAGE nome_pacchetto

    [AUTHID {CURRENT_USER | DEFINER}]

    {IS | COME}

    [PRAGMA SERIALLY_REUSABLE;]

    [collection_type_definition ...]

    [record_type_definition ...]

    [subtype_definition ...]

    [collection_declaration ...]

    [costante_declaration ...]

    [exception_declaration ...]

    [object_declaration ...]

    [record_declaration ...]

    [variable_declaration ...]

    [cursor_spec ...]

    [function_spec ...]

    [procedura_spec ...]

    [call_spec ...]

    [PRAGMA RESTRICT_REFERENCES (asserzioni) ...]

    END [nome_pacchetto];

  • CREA O REPLACE IL PACCHETTO Nome pacchetto IS

    FUNCTION FunctionName (parametro1 IN VARCHAR2, parametro2 IN NUMERO) INVIO VARCHAR2;

    END PackageName;

  • CREATE [O REPLACE] PACKAGE BODY nome_pacchetto

    {IS | COME}

    [PRAGMA SERIALLY_REUSABLE;]

    [collection_type_definition ...]

    [record_type_definition ...]

    [subtype_definition ...]

    [collection_declaration ...]

    [costante_declaration ...]

    [exception_declaration ...]

    [object_declaration ...]

    [record_declaration ...]

    [variable_declaration ...]

    [cursor_body ...]

    [function_spec ...]

    [procedura_spec ...]

    [call_spec ...]

    END [nome_pacchetto];

  • CREARE O SOSTITUIRE IL PACCHETTO DEL PACCHETTO ISTEMA

    FUNCTION FunctionName (parametro1 IN VARCHAR2, parametro2 IN NUMBER) INVIO VARCHAR2 È

    dichiarazioni

    INIZIO

    dichiarazioni da eseguire

    RETURN variabile varchar2

    END FunctionName;

    END PackageName;

Uso del pacchetto

I pacchetti in PLSQL sono una raccolta di procedure, funzioni, variabili, eccezioni, costanti e strutture dati. Generalmente le risorse in un pacchetto sono correlate tra loro e svolgono compiti simili.

Perché usare i pacchetti

  • modularità
  • Migliori prestazioni / Funtionality

Parti di un pacchetto

Specifica: talvolta chiamata intestazione del pacchetto. Contiene dichiarazioni di variabili e tipo e le firme delle funzioni e procedure che sono nel pacchetto, che sono pubbliche di essere chiamato dal di fuori del pacchetto.

Corpo del pacchetto: contiene il codice e le dichiarazioni private .

La specifica del pacchetto deve essere compilata prima del corpo del pacchetto, altrimenti la compilazione del corpo del pacchetto segnalerà un errore.

Sovraccarico

Le funzioni e le procedure nei pacchetti possono essere sovraccaricate. Il seguente pacchetto TEST ha due procedure denominate print_number , che si comportano in modo diverso a seconda dei parametri con cui vengono chiamati.

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

Chiamiamo entrambe le procedure. Il primo con parametro intero, il secondo con varchar2.

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

L'output dello script precedente è:

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

Restrizioni al sovraccarico

Solo i sottoprogrammi locali o pacchettizzati o i metodi di tipo possono essere sovraccaricati. Pertanto, non è possibile sovraccaricare sottoprogrammi autonomi. Inoltre, non è possibile sovraccaricare due sottoprogrammi se i loro parametri formali differiscono solo in modalità nome o parametro

Definisci un'intestazione e un corpo del pacchetto con una funzione.

In questo esempio definiamo un'intestazione del pacchetto e un corpo del pacchetto con una funzione.
Dopodiché chiameremo una funzione dal pacchetto che restituisce un valore di ritorno.

Intestazione del pacchetto :

CREATE OR REPLACE PACKAGE SkyPkg AS

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

Corpo del pacchetto :

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

Chiamando la funzione dal corpo del pacchetto :

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow