CREATE [OR REPLACE] PROCEDURE (Befehle)
Verwenden Sie den Befehl CREATE PROCEDURE zum Erstellen einer gespeicherten Prozedur. Verwenden Sie CREATE OR REPLACE PROCEDURE, um eine gespeicherte Prozedur zu erstellen oder um eine vorhandene Prozedur mit einem neuen Rückgabetyp, neuen Ausführungsberechtigungen oder einem neuen Prozedurhauptteil zu aktualisieren.
Übersicht
CREATE [OR REPLACE] PROCEDURE <name> (<arguments>)
RETURNS <type> [ [ EXECUTE AS OWNER | EXECUTE AS CALLER ] ] LANGUAGE
NZPLSQL AS <procedure_body>;
Eingaben
Eingabe | Beschreibung |
---|---|
Name | Der Name der gespeicherten Prozedur, die Sie erstellen oder ersetzen möchten. Dieser Name ist die SQL-Kennung, die zum Starten der
Prozedur in einem SQL-Ausdruck verwendet wird. Wenn die gespeicherte Prozedur vorhanden ist, können Sie den Namen nicht mit dem Befehl CREATE OR REPLACE ändern. Bei Systemen, die mehrere Schemas unterstützen, können Sie einen Namen im Format 'Schema.Prozedur' angeben, um eine Prozedur in einem anderen Schema der aktuellen Datenbank zu erstellen. Sie können eine Prozedur nicht in einer anderen Datenbank erstellen. |
Argumente | Gibt eine Liste mit vollständig angegebenen Argumentdatentypen an. Sie können auch den Wert VARARGS angeben, um eine Prozedur mit variablen Argumenten
zu erstellen, in die Benutzer bis zu 64 Werte eines
beliebigen unterstützten Datentyps eingeben können. VARARGS ist ein Wert, der sich mit anderen Werten gegenseitig ausschließt; Sie können in der Liste keine anderen Argumente angeben. Wenn die gespeicherte Prozedur vorhanden ist, können Sie die Liste der Argumenttypen nicht mit dem Befehl CREATE OR REPLACE ändern. Sie können einige Aspekte der Argumenttypen ändern; Sie können beispielsweise die Größe einer Zeichenfolge oder die Genauigkeit und die Anzahl der Kommastellen eines numerischen Werts ändern. Sie können auch VARARGS aus der Argumentliste entfernen oder es einer ansonsten leeren Argumentliste hinzufügen. |
RETURNS <typ> | Gibt den Typ der von der Prozedur zurückgegebenen Daten an. Der Wert <Typ>kann ein Netezza Performance Server oder der Wert REFTABLE (<Tabellenname>) sein, um anzugeben, dass eine Ergebnismenge zurückgegeben wird, die wie die angegebene Tabelle aussieht. Die Tabelle muss vorhanden sein, obwohl sie leer sein kann, und sie ist nach der Prozedur weiterhin vorhanden. |
EXECUTE AS OWNER | Falls angegeben, wird die gespeicherte Prozedur ausgeführt, indem für alle Zugriffs- und Berechtigungsprüfungen die ID des Prozedureigners verwendet wird. Dies ist die Standardeinstellung. |
EXECUTE AS CALLER | Falls angegeben, wird die gespeicherte Prozedur ausgeführt, indem für alle Zugriffs- und Berechtigungsprüfungen die ID des Benutzers verwendet wird, der die Prozedur aufgerufen hat. |
SPRACHE | Gibt die für die Prozedur verwendete Programmiersprache an. Der Standardwert und der einzige unterstützte Wert ist NZPLSQL. |
Prozedurhauptteil | Gibt den Text der Prozedur an und muss in einfache Anführungszeichen oder ein Paar aus
BEGIN_PROC/END_PROC eingeschlossen werden. Sie können den Hauptteil verschleiern, um den Inhalt für Benutzer zu maskieren, die für die Prozedur über die Anzeigeberechtigung verfügen. |
Ausgaben
Ausgabe | Beschreibung |
---|---|
CREATE PROCEDURE | Die Nachricht, die das System zurückgibt, wenn der Befehl erfolgreich ist. |
ERROR: creating procedure: permission denied. | Die Nachricht gibt an, dass der Benutzer nicht über die Berechtigung zum Erstellen einer Prozedur verfügt. |
ERROR: User 'username' is not allowed to create/drop procedures. | Das System gibt diese Nachricht zurück, wenn Ihr Benutzerkonto nicht über die Berechtigung zum Erstellen einer gespeicherten Prozedur verfügt. |
ERROR: Synonym 'name' already exists | Das System gibt diese Nachricht zurück, wenn ein Synonym zu dem Namen vorhanden ist, den Sie für die gespeicherte Prozedur angegeben haben. |
ERROR: ProcedureCreate: Prozedur NAME existiert bereits mit der gleichen Signatur | Dieser Fehler wird zurückgegeben, wenn Sie den Befehl CREATE PROCEDURE absetzen und eine gespeicherte Prozedur mit demselben Namen und derselben Argumenttypliste in der Datenbank vorhanden ist. Verwenden Sie stattdessen CREATE OR REPLACE PROCEDURE. |
NOTICE: FunctionCreate: Vorhandene UDX NAME(ARGS) unterscheidet sich in der Größe der string/numerischen Argumente | Diese Nachricht gibt an, dass eine gespeicherte Prozedur mit diesem Namen vorhanden ist, dass für sie jedoch abweichende Größen für Zeichenfolge- oder numerische Werte angegeben wurden. Wenn Sie die Signatur der gespeicherten Prozedur nicht ändern wollen, müssen Sie die Signatur prüfen und sicherstellen, dass sie korrekt ist. |
ERROR: Can't specify arguments to a varargs procedure | Sie können in der Argumentliste nicht den Wert VARARGS und gleichzeitig einen anderen Argumentwert angeben. Die Verwendung des Werts VARARGS und eines anderen Werts schließt sich gegenseitig aus. |
Beschreibung
Wenn Sie eine gespeicherte Prozedur erstellen, muss die Signatur der gespeicherten Prozedur (d. h. ihr Name und die Argumenttypliste) in der betreffenden Datenbank eindeutig sein. Keine andere gespeicherte Prozedur darf denselben Namen und dieselbe Argumenttypliste in derselben Datenbank haben.
Sie können den Namen der gespeicherten Prozedur oder die Argumenttypliste nicht mit dem Befehl CREATE OR REPLACE ändern. Sie können einige Aspekte der Argumenttypen ändern; Sie können beispielsweise die Größe einer Zeichenfolge oder die Genauigkeit und die Anzahl der Kommastellen eines numerischen Werts ändern, und Sie können den Wert VARARGS in einer ansonsten leeren Argumentliste hinzufügen oder entfernen. Zum Ändern des Namens oder der Argumenttypliste einer gespeicherten Prozedur müssen Sie die gespeicherte Prozedur löschen und anschließend eine gespeicherte Prozedur mit dem neuen Namen oder der neuen Argumentypliste erstellen.
Sie können nicht eine gespeicherte Prozedur ersetzen, die zurzeit in einer aktiven Abfrage verwendet wird. Nachdem die Transaktion für eine aktive Abfrage abgeschlossen ist, verarbeitet das Netezza Performance Server den Befehl CREATE OR REPLACE PROCEDURE.
- Zugriffsrechte erforderlich
- Sie müssen die Berechtigung zum Erstellen einer Prozedur haben, um den Befehl CREATE PROCEDURE zu verwenden. Wenn Sie CREATE OR REPLACE PROCEDURE verwenden, um eine gespeicherte Prozedur zu ändern, müssen Sie die Berechtigung zum Erstellen und zum Ändern der Prozedur haben, um sie zu ändern.
- Allgemeine Aufgaben
- Verwenden Sie den Befehl CREATE PROCEDURE, um eine neue gespeicherte Prozedur zu erstellen und Eigner dieser Prozedur zu werden. Sie können den Befehl ALTER PROCEDURE verwenden, um den Eigner einer Prozedur zu ändern.
Verwendung
customername
zu
erstellen: MYDB.SCHEMA(USER)=> CREATE OR REPLACE PROCEDURE customer() RETURNS INT8
LANGUAGE NZPLSQL AS BEGIN_PROC BEGIN RAISE NOTICE 'The customer
name is alpha'; END; END_PROC;
Gehen Sie wie folgt vor, um eine neue Prozedur mit dem Namen
customername
in einem anderen Schema derselben Datenbank zu erstellen:
MYDB.SCHEMA(USER)=> CREATE OR REPLACE PROCEDURE sch_two.customer()
RETURNS INT8 LANGUAGE NZPLSQL AS BEGIN_PROC BEGIN RAISE NOTICE 'The
customer name is alpha'; END; END_PROC;