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