FirebirdSQL logo

CREATE PACKAGE BODY

Verwendet für

Erstellen des Paketrumpfes

Verfügbar in

DSQL

Syntax
CREATE PACKAGE BODY name
AS
BEGIN
  [ <package_item> ... ]
  [ <package_body_item> ... ]
END

<package_item> ::=
  !! Siehe auch CREATE PACKAGE-Syntax !!

<package_body_item> ::=
  <function_impl> |
  <procedure_impl>

<function_impl> ::=
  FUNCTION funcname [ ( [ <in_params> ] ) ]
  RETURNS <domain_or_non_array_type> [COLLATE collation]
  [DETERMINISTIC]
  <module-body>

<procedure_impl> ::=
  PROCEDURE procname [ ( [ <in_params> ] ) ]
  [RETURNS (<out_params>)]
  <module-body>

<module-body> ::=
  !! Siehe auch Syntax des Modul-Bodys !!

<in_params> ::=
  !! Siehe auch CREATE PACKAGE-Syntax !!
  !! Siehe auch die Regeln weiter unten !!

<out_params> ::=
  !! Siehe auch CREATE PACKAGE-Syntax !!

<domain_or_non_array_type> ::=
  !! Siehe auch Syntax der Skalardatentypen !!
Table 1. CREATE PACKAGE BODY-Anweisungsparameter
Parameter Beschreibung

package_name

Paketnamen.Die maximale Länge beträgt 63 Zeichen.Der Paketname muss unter allen Paketnamen eindeutig sein.

function_impl

Funktionsimplementierung.Im Wesentlichen eine CREATE FUNCTION-Anweisung ohne CREATE.

procedure_impl

VerfahrensimplementierungIm Wesentlichen eine CREATE PROCEDURE-Anweisung ohne CREATE.

func_name

Funktionsname.Die maximale Länge beträgt 63 Zeichen.Der Funktionsname muss innerhalb des Pakets eindeutig sein.

collation

Sortierreihenfolge

proc_name

Prozedurname.Die maximale Länge beträgt 63 Zeichen.Der Funktionsname muss innerhalb des Pakets eindeutig sein.

Die Anweisung CREATE PACKAGE BODY erstellt einen neuen Paketkörper.Der Paketkörper kann erst erstellt werden, nachdem der Paketkopf erstellt wurde.Wenn kein Paketheader mit dem Namen package_name vorhanden ist, wird ein entsprechender Fehler ausgegeben.

Alle im Paketkopf deklarierten Prozeduren und Funktionen müssen im Paketrumpf implementiert werden.Zusätzliche Prozeduren und Funktionen dürfen nur im Paketrumpf definiert und implementiert werden.Prozeduren und Funktionen, die im Paketrumpf definiert, aber nicht im Paketkopf definiert sind, sind außerhalb des Paketrumpfs nicht sichtbar.

Die Namen von Prozeduren und Funktionen, die im Paketrumpf definiert sind, müssen unter den Namen von Prozeduren und Funktionen, die im Paketkopf definiert und im Paketrumpf implementiert sind, eindeutig sein.

Note
Paketprozedur- und Funktionsnamen können globale Routinen überschatten

Wenn ein Paketheader oder Paketrumpf eine Prozedur oder Funktion mit demselben Namen wie eine gespeicherte Prozedur oder Funktion im globalen Namespace deklariert, ist es nicht möglich, diese globale Prozedur oder Funktion aus dem Paketrumpf aufzurufen.In diesem Fall wird immer die Prozedur oder Funktion des Pakets aufgerufen.

Aus diesem Grund wird empfohlen, dass sich die Namen von gespeicherten Prozeduren und Funktionen in Paketen nicht mit Namen von gespeicherten Prozeduren und Funktionen im globalen Namespace überschneiden.

Regeln
  • Im Paketrumpf müssen alle Prozeduren und Funktionen mit derselben Signatur implementiert werden, die im Header und am Anfang des Paketrumpfs deklariert ist

  • Die Standardwerte für Prozedur- oder Funktionsparameter können nicht überschrieben werden (wie im Paketkopf oder in <package_item> angegeben).Dies bedeutet, dass Standardwerte nur in <package_body_item> für Prozeduren oder Funktionen definiert werden können, die nicht im Paketkopf oder früher im Paketrumpf definiert wurden.

Note

UDF-Deklarationen (DECLARE EXTERNAL FUNCTION) werden für Pakete nicht unterstützt.Verwenden Sie stattdessen UDR.

docnext count = 10

Wer kann einen Paketkörper erstellen

Die Anweisung CREATE PACKAGE BODY kann ausgeführt werden durch:

  • Administratoren

  • Der Besitzer des Pakets

  • Benutzer mit der Berechtigung ALTER ANY PACKAGE

Beispiel für CREATE PACKAGE BODY

Erstellen des Paketkörpers
CREATE PACKAGE BODY APP_VAR
AS
BEGIN
  - Gibt das Startdatum der Periode zurück
  FUNCTION GET_DATEBEGIN() RETURNS DATE DETERMINISTIC
  AS
  BEGIN
    RETURN RDB$GET_CONTEXT('USER_SESSION', 'DATEBEGIN');
  END
  - Gibt das Enddatum des Zeitraums zurück
  FUNCTION GET_DATEEND() RETURNS DATE DETERMINISTIC
  AS
  BEGIN
    RETURN RDB$GET_CONTEXT('USER_SESSION', 'DATEEND');
  END
  - Legt den Datumsbereich des Arbeitszeitraums fest
  PROCEDURE SET_DATERANGE(ADATEBEGIN DATE, ADATEEND DATE)
  AS
  BEGIN
    RDB$SET_CONTEXT('USER_SESSION', 'DATEBEGIN', ADATEBEGIN);
    RDB$SET_CONTEXT('USER_SESSION', 'DATEEND', ADATEEND);
  END
END

ALTER PACKAGE BODY

Verwendet für

Ändern des Paketrumpfes

Verfügbar in

DSQL

Syntax
ALTER PACKAGE BODY name
AS
BEGIN
  [ <package_item> ... ]
  [ <package_body_item> ... ]
END

!! Siehe auch Syntax CREATE PACKAGE BODY für weitere Regeln !!

Die Anweisung ALTER PACKAGE BODY modifiziert den Paketrumpf.Es kann verwendet werden, um die Definition und Implementierung von Prozeduren und Funktionen des Paketkörpers zu ändern.

Siehe [fblangref40-ddl-pkg-body-create-de] für weitere Details.

Wer kann einen Paketkörper ändern?

Die Anweisung ALTER PACKAGE BODY kann ausgeführt werden durch:

  • Administratoren

  • Der Besitzer des Pakets

  • Benutzer mit der Berechtigung ALTER ANY PACKAGE

Beispiel für ALTER PACKAGE BODY

Ändern des Paketkörpers
ALTER PACKAGE BODY APP_VAR
AS
BEGIN
  - Gibt das Startdatum der Periode zurück
  FUNCTION GET_DATEBEGIN() RETURNS DATE DETERMINISTIC
  AS
  BEGIN
    RETURN RDB$GET_CONTEXT('USER_SESSION', 'DATEBEGIN');
  END
  - Gibt das Enddatum des Zeitraums zurück
  FUNCTION GET_DATEEND() RETURNS DATE DETERMINISTIC
  AS
  BEGIN
    RETURN RDB$GET_CONTEXT('USER_SESSION', 'DATEEND');
  END
  - Legt den Datumsbereich des Arbeitszeitraums fest
  PROCEDURE SET_DATERANGE(ADATEBEGIN DATE, ADATEEND DATE)
  AS
  BEGIN
    RDB$SET_CONTEXT('USER_SESSION', 'DATEBEGIN', ADATEBEGIN);
    RDB$SET_CONTEXT('USER_SESSION', 'DATEEND', ADATEEND);
  END
END

DROP PACKAGE BODY

Verwendet für

Löschen des Paketrumpfes

Verfügbar in

DSQL

Syntax
DROP PACKAGE package_name
Table 1. DROP PACKAGE BODY-Anweisungsparameter
Parameter Beschreibung

package_name

Paketname

Die Anweisung DROP PACKAGE BODY löscht den Paketkörper.

Wer kann einen Paketkörper fallen lassen?

Die DROP PACKAGE BODY-Anweisung kann ausgeführt werden durch:

  • Administratoren

  • Der Besitzer des Pakets

  • Benutzer mit der Berechtigung ALTER ANY PACKAGE

Beispiel für DROP PACKAGE BODY

Löschen des Paketrumpfes
DROP PACKAGE BODY APP_VAR;

RECREATE PACKAGE BODY

Verwendet für

Erstellen eines neuen oder erneuten Erstellens eines vorhandenen Paketrumpfes

Verfügbar in

DSQL

Syntax
RECREATE PACKAGE BODY name
AS
BEGIN
  [ <package_item> ... ]
  [ <package_body_item> ... ]
END

!! Siehe auch Syntax CREATE PACKAGE BODY für weitere Regeln !!

Die Anweisung RECREATE PACKAGE BODY erstellt einen neuen oder erstellt einen bestehenden Paketkörper neu.Wenn bereits ein Paketkörper mit demselben Namen vorhanden ist, versucht die Anweisung, ihn zu löschen und dann einen neuen Paketkörper zu erstellen.Nach der Neuerstellung des Paketkörpers bleiben die Berechtigungen des Pakets und seiner Routinen erhalten.

Siehe [fblangref40-ddl-pkg-body-create-de] für weitere Details.

Beispiele für RECREATE PACKAGE BODY

Neuerstellen des Paketrumpfes
RECREATE PACKAGE BODY APP_VAR
AS
BEGIN
  - Gibt das Startdatum der Periode zurück
  FUNCTION GET_DATEBEGIN() RETURNS DATE DETERMINISTIC
  AS
  BEGIN
    RETURN RDB$GET_CONTEXT('USER_SESSION', 'DATEBEGIN');
  END
  - Gibt das Enddatum des Zeitraums zurück
  FUNCTION GET_DATEEND() RETURNS DATE DETERMINISTIC
  AS
  BEGIN
    RETURN RDB$GET_CONTEXT('USER_SESSION', 'DATEEND');
  END
  - Legt den Datumsbereich des Arbeitszeitraums fest
  PROCEDURE SET_DATERANGE(ADATEBEGIN DATE, ADATEEND DATE)
  AS
  BEGIN
    RDB$SET_CONTEXT('USER_SESSION', 'DATEBEGIN', ADATEBEGIN);
    RDB$SET_CONTEXT('USER_SESSION', 'DATEEND', ADATEEND);
  END
END