Wer kann ein Paket erstellen
Die CREATE PACKAGE
-Anweisung kann ausgeführt werden durch:
-
Benutzer mit dem Privileg
CREATE PACKAGE
Der Benutzer, der den Paketheader erstellt hat, wird sein Besitzer.
Die CREATE PACKAGE
-Anweisung kann ausgeführt werden durch:
Benutzer mit dem Privileg CREATE PACKAGE
Der Benutzer, der den Paketheader erstellt hat, wird sein Besitzer.
CREATE PACKAGE
Erstellen Sie einen Paket-Header
CREATE PACKAGE APP_VAR AS BEGIN FUNCTION GET_DATEBEGIN() RETURNS DATE DETERMINISTIC; FUNCTION GET_DATEEND() RETURNS DATE DETERMINISTIC; PROCEDURE SET_DATERANGE(ADATEBEGIN DATE, ADATEEND DATE DEFAULT CURRENT_DATE); END
Wenn DEFINER
für das Paket pk
gesetzt ist, benötigt der Benutzer US
nur das EXECUTE
-Privileg auf pk
.Wenn es auf INVOKER
gesetzt wäre, bräuchte entweder der Benutzer oder das Paket auch das INSERT
-Privileg für die Tabelle t
.
create table t (i integer);
set term ^;
create package pk SQL SECURITY DEFINER
as
begin
function f(i integer) returns int;
end^
create package body pk
as
begin
function f(i integer) returns int
as
begin
insert into t values (:i);
return i + 1;
end
end^
set term ;^
grant execute on package pk to user us;
commit;
connect 'localhost:/tmp/69.fdb' user us password 'pas';
select pk.f(3) from rdb$database;
ALTER PACKAGE
Ändern des Paketheaders
DSQL
ALTER PACKAGE package_name
[SQL SECURITY {INVOKER | DEFINER}]
AS
BEGIN
[ <package_item> ... ]
END
!! Vgl. Syntax CREATE PACKAGE
für weitere Regeln!!
Die ALTER PACKAGE
-Anweisung modifiziert den Paket-Header.Es kann verwendet werden, um die Anzahl und Definition von Prozeduren und Funktionen einschließlich ihrer Ein- und Ausgabeparameter zu ändern.Der Quelltext und die kompilierte Form des Paketkörpers werden jedoch beibehalten, obwohl der Körper nach der Änderung des Paketheaders möglicherweise inkompatibel ist.Die Gültigkeit eines Paketkörpers für den definierten Header wird in der Spalte RDB$PACKAGES.RDB$VALID_BODY_FLAG
gespeichert.
Wenn Sie ein Paket ändern, ohne die SQL SECURITY
-Klausel anzugeben, wird die SQL-Sicherheitseigenschaft entfernt, wenn sie derzeit für dieses Paket festgelegt ist.Dies bedeutet, dass das Verhalten auf den Datenbankstandard zurückgesetzt wird.
Die ALTER PACKAGE
-Anweisung kann ausgeführt werden durch:
Der Besitzer des Pakets
Benutzer mit der Berechtigung ALTER ANY PACKAGE
ALTER PACKAGE
ALTER PACKAGE APP_VAR
AS
BEGIN
FUNCTION GET_DATEBEGIN() RETURNS DATE DETERMINISTIC;
FUNCTION GET_DATEEND() RETURNS DATE DETERMINISTIC;
PROCEDURE SET_DATERANGE(ADATEBEGIN DATE,
ADATEEND DATE DEFAULT CURRENT_DATE);
END
CREATE OR ALTER PACKAGE
Erstellen eines neuen oder Ändern eines bestehenden Paket-Headers
DSQL
CREATE OR ALTER PACKAGE package_name
[SQL SECURITY {INVOKER | DEFINER}]
AS
BEGIN
[ <package_item> ... ]
END
!! Siehe auch Syntax CREATE PACKAGE
für weitere Regeln!!
Die Anweisung CREATE OR ALTER PACKAGE
erstellt ein neues Paket oder ändert einen vorhandenen Paket-Header.Existiert der Paket-Header nicht, wird er mit CREATE PACKAGE
erstellt.Wenn es bereits existiert, wird es mit ALTER PACKAGE
modifiziert, während bestehende Privilegien und Abhängigkeiten beibehalten werden.
CREATE OR ALTER PACKAGE
CREATE OR ALTER PACKAGE APP_VAR
AS
BEGIN
FUNCTION GET_DATEBEGIN() RETURNS DATE DETERMINISTIC;
FUNCTION GET_DATEEND() RETURNS DATE DETERMINISTIC;
PROCEDURE SET_DATERANGE(ADATEBEGIN DATE,
ADATEEND DATE DEFAULT CURRENT_DATE);
END
DROP PACKAGE
Einen Paket-Header löschen
DSQL
DROP PACKAGE package_name
Parameter | Beschreibung |
---|---|
package_name |
Paketname |
Die DROP PACKAGE
-Anweisung löscht einen vorhandenen Paket-Header.Wenn ein Paketkörper vorhanden ist, wird er zusammen mit dem Paketkopf gelöscht.Wenn noch Abhängigkeiten vom Paket bestehen, wird ein Fehler ausgegeben.
Die DROP PACKAGE
-Anweisung kann ausgeführt werden durch:
Der Besitzer des Pakets
Benutzer mit der Berechtigung DROP ANY PACKAGE
DROP PACKAGE
DROP PACKAGE APP_VAR
RECREATE PACKAGE
Erstellen eines neuen oder erneuten Erstellens eines vorhandenen Paketheaders
DSQL
RECREATE PACKAGE package_name
[SQL SECURITY {INVOKER | DEFINER}]
AS
BEGIN
[ <package_item> ... ]
END
!! Siehe auch Syntax CREATE PACKAGE
für weitere Regeln!!
Die Anweisung RECREATE PACKAGE
erstellt ein neues Paket oder erstellt einen vorhandenen Paket-Header neu.Wenn bereits ein Paketheader mit demselben Namen vorhanden ist, wird dieser durch diese Anweisung zuerst gelöscht und dann ein neuer Paketheader erstellt.Es ist nicht möglich, den Paketheader neu zu erstellen, wenn noch Abhängigkeiten von dem vorhandenen Paket bestehen oder wenn der Hauptteil des Pakets vorhanden ist.Bestehende Privilegien des Pakets selbst werden nicht beibehalten, ebenso wenig Privilegien zum Ausführen der Prozeduren oder Funktionen des Pakets.
RECREATE PACKAGE
RECREATE PACKAGE APP_VAR
AS
BEGIN
FUNCTION GET_DATEBEGIN() RETURNS DATE DETERMINISTIC;
FUNCTION GET_DATEEND() RETURNS DATE DETERMINISTIC;
PROCEDURE SET_DATERANGE(ADATEBEGIN DATE,
ADATEEND DATE DEFAULT CURRENT_DATE);
END