PACKAGE BODY
CREATE PACKAGE BODY
Erstellen des Paketrumpfes
DSQL
CREATE PACKAGE BODY name AS BEGIN [ <package_item> ... ] [ <package_body_item> ... ] END <package_item> ::= !! Siehe auchCREATE 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 auchCREATE PACKAGE
-Syntax !! !! Siehe auch die Regeln weiter unten !! <out_params> ::= !! Siehe auchCREATE PACKAGE
-Syntax !! <domain_or_non_array_type> ::= !! Siehe auch Syntax der Skalardatentypen !!
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 |
procedure_impl |
VerfahrensimplementierungIm Wesentlichen eine |
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. |
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 ( |
Die Anweisung CREATE PACKAGE BODY
kann ausgeführt werden durch:
Der Besitzer des Pakets
Benutzer mit der Berechtigung ALTER ANY PACKAGE
CREATE PACKAGE BODY
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
Ändern des Paketrumpfes
DSQL
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.
Die Anweisung ALTER PACKAGE BODY
kann ausgeführt werden durch:
Der Besitzer des Pakets
Benutzer mit der Berechtigung ALTER ANY PACKAGE
ALTER PACKAGE BODY
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
Löschen des Paketrumpfes
DSQL
DROP PACKAGE package_name
Parameter | Beschreibung |
---|---|
package_name |
Paketname |
Die Anweisung DROP PACKAGE BODY
löscht den Paketkörper.
Die DROP PACKAGE BODY
-Anweisung kann ausgeführt werden durch:
Der Besitzer des Pakets
Benutzer mit der Berechtigung ALTER ANY PACKAGE
DROP PACKAGE BODY
DROP PACKAGE BODY APP_VAR;
RECREATE PACKAGE BODY
Erstellen eines neuen oder erneuten Erstellens eines vorhandenen Paketrumpfes
DSQL
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.
RECREATE PACKAGE BODY
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