
Verwenden Sie dieses Statement, um komplexere SQL-Anweisungen direkt über den Adapter an die Datenbank zu übergeben. Optional können Sie in diesen SQL-Anweisungen Platzhalter vorsehen, die im Key-Block aufgelistet werden können.
So haben Sie die Möglichkeit, auch komplexe, parametrisierbare SQL-Statements zu erzeugen.
Format der SQL_QUERY-Anweisung
<root>
<StatementName>
<anyName action=" SQL_QUERY" | "SQL_DML">
<access>SQL-String with optional placeholder(s)</access>
<key>
<placeholder1>value1</placeholder1>
<placeholder2>value2<placeholder2>
</key>
</anyName >
</StatementName>
</root>
Es wird nicht standardmäßig ein Tabellen- oder Stored Procedure-Name erwartet wie bei den übrigen Statement-Typen.
Wählen Sie action=SQL_DML, wenn es sich um einen Aufruf aus der SQL Data Manipulation Language handelt (UPDATE, INSERT, DELETE).
Der Inhalt von <access> stellt einen gültigen SQL-Aufruf für den jeweiligen Modus dar, optional mit Platzhaltern.
Die Namen der Platzhalter-Elemente müssen identisch mit denen im SQL-String verwendeten Namen sein, wobei sie im SQL-String noch mit $ Zeichen markiert werden.
In der XML-Struktur oben würden also im SQL-String enthaltene Strings $placeholder1$ und $placeholder2$ durch value1 oder value2 ersetzt, bevor das SQL-Statement ausgeführt wird.
In beiden Fällen dürfen Sie in der Konfiguration das Feld Key-Tags erforderlich nicht auswählen, da es sonst zu einem Laufzeitfehler kommt.
Der Einsatz von Platzhaltern beschränkt sich nicht auf einzelne Feldwerte, Sie können beliebige Teile des SQL-Statements auf diese Art setzten. Sie können auch die Logik des Statements beeinflussen.
Überzählige und undefinierte Platzhalter im Element <key> werden toleriert. Undefinierte Platzhalter werden im SQL-String unverändert gelassen. Dies kann zu einem Syntax-Fehler oder zu unerwarteten Ergebnissen in der Datenbank führen.
Das folgende Beispiel enthält keine Platzhalter:
<root>
<stmt>
<Customers action="SQL_DML">
<access> UPDATE Customers SET CompanyName='Firma', Address='Strasse 3' WHERE CustomerID='FI'
</access>
</Customers>
</stmt>
</root>
In der Datenbank wird das unveränderte SQL-Statement ausgeführt:
UPDATE Customers SET CompanyName='Firma', Address='Strasse 3' WHERE CustomerID='FI'
Das folgende Beispiel enthält Platzhalter:
<root>
<stmt>
<Customers action="SQL_DML">
<access> UPDATE Customers SET CompanyName='$NAME$', Address='$ADDRESS$' WHERE CustomerID='$KEYFIELD$'
</access>
<key>
<NAME>Firma</NAME>
<ADDRESS>Strasse 3 </ADDRESS>
<KEYFIELD>FI</KEYFIELD>
</key>
</Customers>
</stmt>
</root>
In der Datenbank wird nach Ersetzung der Platzhalter das gleiche SQL-Statement wie oben ausgeführt:
UPDATE Customers SET CompanyName='Firma', Address='Strasse 3' WHERE CustomerID='FI'