SQL-Vorlagen
Sie können mit der DatabaseSpy Enterprise Edition SQL-Anweisungen erstellen und ausführen, die Parameter enthalten (in der Folge als "SQL-Vorlagen" bezeichnet). Der einzige Unterschied zwischen SQL-Standardabfragen und SQL-Vorlagen ist, dass letztere Parameterplatzhalter enthalten. So ist etwa die unten stehende SELECT-Anweisung eine Vorlage, in der die zwei Parameter :color und :size definiert sind.
SELECT id FROM products WHERE color = :color AND size > :size; |
Sie können nicht nur in SELECT-Anweisungen, sondern auch in anderen Anweisungstypen (wie z.B. INSERT oder UPDATE) Parameter definieren. So könnte etwa eine INSERT-Anweisung mit Parametern folgendermaßen aussehen:
INSERT INTO users (first_name,last_name,email,created_at,updated_at) VALUES (:fname,:lname,:email,CURRENT_TIMESTAMP,NULL); |
Mit Hilfe von INSERT-Vorlagen, wie der oben gezeigten, lässt sich die Übertragung großer Datenvolumen aus einer Tabelle oder Ansicht in eine andere (oder sogar zwischen verschiedenen Datenbanken) stark vereinfachen. Wenn Sie eine Tabelle befüllen müssen, können etwa anhand der bereitgestellten Vorlage mit wenigen einfachen Schritten mehrere INSERT-Anweisungen erstellt werden, wie weiter unten beschrieben.
Beachten Sie die folgenden Punkte:
•Damit Parameter in DatabaseSpy als solche erkannt werden, muss ihnen in SQL-Anweisungen ein Doppelpunkt ( : ) vorangestellt werden.
•Parameter können stellvertretend für Werte in Anweisungen verwendet werden; damit dadurch jedoch keine SQL-Befehle eingeschleust werden, dürfen Sie nicht stellvertretend für reservierte SQL-Schlüsselwörter oder Identifier (wie z.B. Spalten- oder Tabellennamen) verwendet werden.
•Parameter werden standardmäßig als Text behandelt und parametrisierte Abfragen schlagen bei bestimmten Datenbankverbindungen fehl, wenn Sie den Parametertyp nicht explizit ändern (siehe nächster Abschnitt unten "Ändern des Parametertyps").
Ändern des Parametertyps
Standardmäßig werden Parameter als text oder varchar, behandelt, wodurch parametrisierte Abfragen bei bestimmten Datenbanktreibern (z.B. bei ADO.NET- oder JDBC-Verbindungen mit SQL Server) fehlschlagen. In solchen Fällen können Sie den Parametertyp und, falls anwendbar, die Genauigkeit oder die Größe des Parameters explizit definieren, indem Sie direkt nach dem Parameter einen Kommentar hinzufügen.
Betrachten Sie dazu das folgende Beispiel zu String-Typen:
SELECT [col1], |
Im oben gezeigten Codefragment wurde der Typ des Parameters explizit als varchar definiert und dessen Größe auf max gesetzt. Anstelle von size kann auch der Modifikator length verwendet werden.
Betrachten Sie zu numerischen Typen das folgende Beispiel:
SELECT [col1], |
Im oben gezeigten Codefragment wurde der Typ des Parameters p1 explizit auf decimal, precision (die Gesamtzahl der Stellen) auf 23 und scale (die Anzahl der Nachkommastellen) auf 4 gesetzt. Anstatt precision können Sie auch die Abkürzung prec verwenden. Sowohl precision als auch scale müssen Ganzzahlenwerte sein.
Unten sehen Sie einige weitere Beispiele für Attribute, die auf einen Parameter folgen können (die Details müssen gemäß der jeweiligen Datenbank angepasst werden):
/*# float */ |
Beachten Sie die folgenden Punkte:
•Durch das Zeichen # wird DatabaseSpy explizit angewiesen, den entsprechenden Parameter mit dem deklarierten Typ und der deklarierten Größe zu behandeln.
•Der Datentyp und die dahinter folgenden Attribute müssen durch Kommas getrennt werden. Auch die einzelnen Attribute müssen durch ein Kommas getrennt werden.
•Andere Attribute als prec oder precision, scale, size oder length werden nicht erkannt. Damit eine parametrisierte Abfrage erfolgreich ausgeführt werden kann, werden, je nach Datenbanktreiber und wie viele Informationen bei Vorbereitung der Anweisung automatisch ermittelt werden können, entweder alle, einige oder keines dieser Attribute benötigt.
Ausführen einer Abfrage mit Parametern
1.Geben Sie im SQL Editor eine SQL-Anweisung ein oder generieren Sie eine und stellen Sie sicher, dass diese mindestens einen Parameter enthält. So enthält etwa die INSERT-Anweisung unten drei Parameter:
![dbs_sql_template1](./images/dbs_sql_template1.png)
2.Klicken Sie in der Symbolleiste des SQL-Editors auf die Schaltfläche Ausführen oder Zur Datenbearbeitung ausführen
.
3.Füllen Sie die erforderlichen Parameterwerte aus, z.B:
![dbs_sql_template2](./images/dbs_sql_template2.png)
Sie können in der Abfrage auch mehrere Parameterzeilen bereitstellen. Klicken Sie dazu entweder auf Neu anhängen oder Neu einfügen
. Bei Klick auf Neu anhängen wird nach allen vorhandenen Zeilen eine Parameterzeile angehängt, während bei Klick auf Neu einfügen ein Parameter an der aktuellen Position (z.B. zwischen zwei vorhandenen Zeilen) eingefügt wird.
![dbs_sql_template3](./images/dbs_sql_template3.png)
4.Klicken Sie auf OK. DatabaseSpy führt die Abfrage mit den angegebenen Parametern aus und zeigt das Ergebnis der Ausführung auf dem Ergebnisregister an.
Beachten Sie die folgenden Punkte:
•Wenn der SQL Editor mehrere SQL-Anweisungen enthält, enthält das Dialogfeld "Parameterwerte" für jede SQL-Anweisung, für die Parameter vorhanden sind, ein Register. Außerdem werden nach Ausführung der Abfrage mehrere Ergebnisregister angezeigt (ein Ergebnisregister für jede Anweisung, die Parameter enthält).
•DatabaseSpy merkt sich die letzten 25 in das Dialogfeld "Parameterwerte" eingegebenen Parameterwerte. Um einen früheren Wert zu verwenden, wählen Sie diesen aus der Dropdown-Liste zum jeweiligen Parameter aus.
Speichern von parametrisierten Abfragen als SQL-Vorlage
Ähnlich wie bei SQL-Standarddateien können Sie eine Abfrage, die Parameter enthält, für die spätere Verwendung speichern. Um den Inhalt des SQL-Editors als SQL-Vorlage zu speichern, wählen Sie eine der folgenden Methoden:
•Klicken Sie im Menü Datei auf Speichern (oder Speichern unter).
•Klicken Sie auf die Symbolleisten-Schaltfläche Speichern.
•Drücken Sie Strg + S.
SQL-Vorlagendateien werden wie andere SQL Scripts mit der Erweiterung .sql gespeichert. Um Ihnen die Unterscheidung zwischen SQL-Vorlagen und anderen SQL Scripts zu erleichtern, gibt es im DatabaseSpy-Projekt einen eigenen Ordner dafür, den Ordner "SQL-Vorlagen".
![dbs_sql_template4](./images/dbs_sql_template4.png)
Alle für das Projekt erstellten SQL-Vorlagen müssen sich im Ordner "SQL-Vorlagen" befinden. DatabaseSpy kann die Vorlage nur dann mit Werten ausführen, wie unten beschrieben, wenn sich die SQL-Vorlage im Ordner "SQL-Vorlagen" befindet. |
Ausführen von SQL-Vorlagen
Sie können SQL-Vorlagen an Gruppen (Zeilen) von dynamisch bereitgestellten Werten ausführen. Bei der Ausführung einer SQL-Vorlage ersetzt DatabaseSpy alle in der Vorlage gefundenen Parameterplatzhalter durch die von Ihnen angegebenen Werte, erstellt für jeden Wert (oder je nach Fall jede Wertezeile) eine neue SQL-Anweisung und führt die Abfrage an der Datenbank aus. Auf diese Art kann mit einem einzigen Klick eine sehr große Zahl an SQL-Anweisungen generiert und ausgeführt werden.
Voraussetzungen
1.Erstellen Sie eine SQL-Vorlage, indem Sie sie im SQL Editor eingeben. So erhält z.B. die unten gezeigte SQL-Vorlage drei Parameter: :fname, :lname und :email.
INSERT INTO users (first_name,last_name,email,created_at,updated_at) VALUES (:fname,:lname,:email,CURRENT_TIMESTAMP,NULL); |
Anstatt die Anweisung einzugeben, können Sie auch mit der rechten Maustaste auf eine Tabelle im Online Browser klicken, die INSERT-Anweisung generieren und sie durch Hinzufügen der erforderlichen Parameter anpassen, siehe Erzeugen von SQL-Anweisungen.
2.Speichern Sie die SQL-Vorlage und fügen Sie sie zu Ihrem DatabaseSpy-Projekt hinzu. Die SQL-Vorlage muss sich im Ordner "SQL-Vorlagen" des Projekts befinden.
Sie können in dieser Phase nun testen, ob sich die neue SQL-Vorlage erfolgreich ausführen lässt, indem Sie sie mit einigen manuell eingegebenen Parametern ausführen. Um die SQL-Vorlage zu testen, klicken Sie auf Ausführen und geben Sie die erforderlichen Parameter ein, sobald sie dazu aufgefordert werden, siehe Ausführen einer Abfrage mit Parametern.
So führen Sie eine Vorlage mit Werte aus:
1.Stellen Sie eine Verbindung zu einer Datenquelle her und rufen Sie Daten aus der Tabelle, die die Werte enthält, die Sie für die SQL-Vorlage als Input bereitstellen möchten, ab. (Klicken Sie z.B. mit der rechten Maustaste auf den Online Browser und wählen Sie im Kontextmenü den Befehl Daten bearbeiten aus).
2.Halten Sie die Strg-Taste gedrückt und wählen Sie eine oder mehrere Zellen aus dem Ergebnisraster aus. Um mehrere Spalten auszuwählen, klicken Sie bei gedrückter Strg-Taste auf deren Überschrift. Die SQL-Vorlage wird so oft ausgeführt, wie sich Zeilen in der Auswahl befinden. Beachten Sie, dass die Anzahl der ausgewählten Spalten der Anzahl der Parameter in der SQL-Vorlage entsprechen muss, daher:
oWenn die Vorlage nur einen Parameter enthält, müssen sich alle ausgewählten Zellen (eine oder mehrere Zeilen) in derselben Spalte befinden.
oWenn die Vorlage mehrere Parameter enthält, müssen so viele Spalten ausgewählt werden, wie die Vorlage Parameter enthält.
Eine gültige Auswahl für eine INSERT-Vorlage mit drei Parametern, wie die unten gezeigte, wäre z.B. die folgende:
![dbs_sql_template5](./images/dbs_sql_template5.png)
Gültig wäre auch eine Auswahl mehrerer nicht unbedingt aufeinander folgender Zeilen, wie z.B. die folgende:
![dbs_sql_template6](./images/dbs_sql_template6.png)
3.Klicken Sie mit der rechten Maustaste auf die Auswahl und wählen Sie in Kontextmenü den Befehl Vorlage mit Werten ausführen | <Name der Vorlage>. Alle generierten Anweisungen werden im SQL Editor angezeigt und ausgeführt.