Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Übersicht über gespeicherte Prozeduren in Amazon Redshift
In diesem Thema werden Einzelheiten zum Zweck und zur Verwendung von gespeicherten Prozeduren beschrieben.
Gespeicherte Prozeduren werden üblicherweise verwendet, um die Logik für Datentransformation, Datenvalidierung und die geschäftsspezifische Logik zu verkapseln. Indem Sie mehrere SQL Schritte in einer gespeicherten Prozedur kombinieren, können Sie Roundtrips zwischen Ihren Anwendungen und der Datenbank reduzieren.
Für eine fein abgestimmte Zugriffskontrolle können Sie zur Ausführung von Funktionen gespeicherte Prozeduren erstellen, ohne einem Benutzer Zugriff auf die zugrunde liegenden Tabellen zu gewähren. So kann beispielsweise nur der Eigentümer oder ein Superuser eine Tabelle kürzen, während ein Benutzer Schreibrechte benötigt, um Daten in eine Tabelle einzufügen. Anstatt einem Benutzer Rechte für die zugrunde liegenden Tabellen zu erteilen, können Sie eine gespeicherte Prozedur erstellen, die die Aufgabe ausführt. Anschließend erteilen Sie dem Benutzer Rechte zum Ausführen der gespeicherten Prozedur.
Eine gespeicherte Prozedur mit dem DEFINER Sicherheitsattribut wird mit den Rechten des Besitzers der gespeicherten Prozedur ausgeführt. Standardmäßig verfügt eine gespeicherte Prozedur über INVOKER Sicherheit, was bedeutet, dass die Prozedur die Rechte des Benutzers verwendet, der die Prozedur aufruft.
Verwenden Sie den CREATE PROCEDURE-Befehl zum Erstellen einer gespeicherten Prozedur. Verwenden Sie den CALL-Befehl zum Ausführen einer Prozedur. Beispiele dazu folgen später in diesem Abschnitt.
Anmerkung
Einige Clients zeigen beim Erstellen einer in Amazon Redshift gespeicherten Prozedur möglicherweise den folgenden Fehler an.
ERROR: 42601: [Amazon](500310) unterminated dollar-quoted string at or near "$$
Dieser Fehler tritt auf, weil der Client die CREATE PROCEDURE Anweisung mit Semikolons als Trennzeichen für Anweisungen und mit Dollarzeichen ($) nicht korrekt analysieren kann. Dies führt dazu, dass nur ein Teil der Anweisung an den Amazon-Redshift-Server gesendet wird. Dieser Fehler kann oftmals umgangen werden, indem die Run as batch
- oder die Execute selected
-Option des Clients verwendet wird.
Verwenden Sie beispielsweise mit dem Aginity-Client die Option Run entire script as
batch
. Wenn Sie Workbench/J verwenden, empfehlen wir Version 124SQL. Wenn Sie SQL Workbench/J Version 125 verwenden, sollten Sie als Problemumgehung die Angabe eines alternativen Trennzeichens in Betracht ziehen.
CREATEPROCEDUREenthält SQL Anweisungen, die durch ein Semikolon (;) getrennt sind. Wenn Sie ein alternatives Trennzeichen wie einen Schrägstrich (/) definieren und es am Ende der Anweisung platzieren, wird die CREATE PROCEDURE Anweisung zur Verarbeitung an den Amazon Redshift Redshift-Server gesendet. Im Folgenden sehen Sie ein Beispiel.
CREATE OR REPLACE PROCEDURE test() AS $$ BEGIN SELECT 1 a; END; $$ LANGUAGE plpgsql ; /
Weitere Informationen finden Sie unter Alternatives Trennzeichen
Themen
Das folgende Beispiel zeigt eine Prozedur ohne Ausgabeparameter. Standardmäßig handelt es sich bei Parametern um Eingabe-(IN)-Parameter.
CREATE OR REPLACE PROCEDURE test_sp1(f1 int, f2 varchar) AS $$ BEGIN RAISE INFO 'f1 = %, f2 = %', f1, f2; END; $$ LANGUAGE plpgsql; call test_sp1(5, 'abc'); INFO: f1 = 5, f2 = abc CALL
Anmerkung
Wenn Sie gespeicherte Prozeduren schreiben, empfehlen wir eine bewährte Methode zum Sichern sensibler Werte:
Nehmen Sie keine Hartkodierung für sensible Informationen in der Logik der gespeicherten Prozedur vor.hardco Weisen Sie beispielsweise in einer CREATE USER Anweisung im Hauptteil einer gespeicherten Prozedur kein Benutzerkennwort zu. Dies stellt ein Sicherheitsrisiko dar, da hartkodierte Werte als Schema-Metadaten in Katalogtabellen aufgezeichnet werden können. Übergeben Sie stattdessen mithilfe von Parametern sensible Werte wie Passwörter als Argumente an die gespeicherte Prozedur.
Weitere Informationen zu gespeicherten Prozeduren finden Sie unter CREATE PROCEDURE und Erstellen von gespeicherten Prozeduren in Amazon Redshift. Weitere Informationen zu Katalogtabellen finden Sie unter Systemkatalogtabellen.
Das folgende Beispiel zeigt eine Prozedur mit Ausgabeparametern. Die Argumente sind Eingabe (IN), Eingabe und Ausgabe (INOUT) und Ausgabe (OUT).
CREATE OR REPLACE PROCEDURE test_sp2(f1 IN int, f2 INOUT varchar(256), out_var OUT varchar(256)) AS $$ DECLARE loop_var int; BEGIN IF f1 is null OR f2 is null THEN RAISE EXCEPTION 'input cannot be null'; END IF; DROP TABLE if exists my_etl; CREATE TEMP TABLE my_etl(a int, b varchar); FOR loop_var IN 1..f1 LOOP insert into my_etl values (loop_var, f2); f2 := f2 || '+' || f2; END LOOP; SELECT INTO out_var count(*) from my_etl; END; $$ LANGUAGE plpgsql; call test_sp2(2,'2019'); f2 | column2 ---------------------+--------- 2019+2019+2019+2019 | 2 (1 row)