Unterstützung für vorbereitete Anweisungen verwenden - Amazon Redshift

Unterstützung für vorbereitete Anweisungen verwenden

Der Amazon-Redshift-JDBC-Treiber unterstützt vorbereitete Anweisungen. Sie können vorbereitete Anweisungen verwenden, um die Leistung parametrisierter Abfragen zu verbessern, die während derselben Verbindung mehrmals ausgeführt werden müssen.

Eine vorbereitete Anweisung ist eine SQL-Anweisung, die auf der Serverseite kompiliert, aber nicht sofort ausgeführt wird. Die kompilierte Anweisung wird auf dem Server als PreparedStatement-Objekt gespeichert, bis Sie das Objekt schließen oder die Verbindung trennen. Solange dieses Objekt vorhanden ist, können Sie die vorbereitete Anweisung so oft wie nötig mit verschiedenen Parameterwerten ausführen, ohne die Anweisung erneut kompilieren zu müssen. Durch diesen reduzierten Aufwand können die Abfragen schneller ausgeführt werden.

Weitere Informationen zu vorbereiteten Anweisungen finden Sie unter „Verwenden von vorbereiteten Anweisungen“ im Tutorial „JDBC Basics“ von Oracle.

Sie können eine Anweisung vorbereiten, die mehrere Abfragen enthält. Beispiel: Die folgende vorbereitete Anweisung enthält zwei INSERT-Abfragen:

PreparedStatement pstmt = conn.prepareStatement("INSERT INTO MyTable VALUES (1, 'abc'); INSERT INTO CompanyTable VALUES (1, 'abc');");

Achten Sie darauf, dass diese Abfragen nicht von den Ergebnissen anderer Abfragen abhängen, die innerhalb derselben vorbereiteten Anweisung angegeben werden. Da Abfragen während des Vorbereitungsschritts nicht ausgeführt werden, wurden die Ergebnisse noch nicht zurückgegeben und stehen für andere Abfragen in derselben vorbereiteten Anweisung nicht zur Verfügung.

Beispielsweise ist die folgende vorbereitete Anweisung, die eine Tabelle erstellt und dann Werte in diese neu erstellte Tabelle einfügt, nicht zulässig:

PreparedStatement pstmt = conn.prepareStatement("CREATE TABLE MyTable(col1 int, col2 varchar); INSERT INTO myTable VALUES (1, 'abc');");

Wenn Sie versuchen, diese Anweisung vorzubereiten, gibt der Server einen Fehler zurück, der besagt, dass die Zieltabelle (MyTable) noch nicht existiert. Die CREATE-Abfrage muss ausgeführt werden, bevor die INSERT-Abfrage vorbereitet werden kann.