NamedPreparedStatementBatch: SQL mit benannten Parametern im Batch-Modus 1
Der JDBC Connector führt mehrere SQL-Anweisungen auf einmal im Batch-Modus aus, wenn sie in folgender Input-XML-Struktur jeweils in einem <namedpreparedstatementbatch>-Block abgelegt werden. Dabei sind lediglich SQL-Anweisungen möglich, die kein ResultSet zurückliefern, also z. B. keine Abfragen mit SELECT.
Input
<Beliebiger Elementname>
<namedpreparedstatementbatch resulttag="Ergebniselementname" timezone="Zeitzone"
format="Datumsformat">
<sql>
<!--SQL-Anweisungen (optional innerhalb eines CDATA-Blocks) -->
<!--Je Parameter ein XML-Element, gleichnamig zum entsprechenden Kindelement in <row> -->
</sql>
<rowset>
<row>
<Name><!--Wert--></Name>
</row>
<!-- Weitere <row>-Elemente für Batch-Modus -->
</rowset>
</namedpreparedstatementbatch>
</Beliebiger Elementname>
Für jedes Element <namedpreparedstatementbatch/> gilt:
Das optionale Attribut
timezonegibt eine Zeitzone gemäßjava.util.TimeZone, siehe http://docs.oracle.com/javase/1.5.0/docs/api/java/util/TimeZone.html , an, z. B.GMT+2.Das optionale Attribut
formatgibt ein Datumsformat gemäß java.text.SimpleDateFormat an und bestimmt das Format der zurückgegebenen Datumswerten.Es enthält mindestens ein Element
<sql/>.
Für jedes XML-Element eines benannten Parameters innerhalb der SQL-Anweisung im Element <sql/> gilt:
Der Elementname gibt den Parameter-Namen an, der mit entsprechenden Element innerhalb von
<row/>übereinstimmt.Das optionale Attribut
modegibt die "Richtung" des Datenstroms an (in: Input-Parameter für die Datenbank;out: Ergebnisparameter aus der Datenbank;inout: sowohl Input-Parameter als auch Ergebnisparameter; Standard:in.Das optionale Attribut
typegibt den Datentyp an, z. B.INTEGER,BLOBoderVARCHAR(Standard).Das optionale Attribut
timezonegibt eine Zeitzone gemäßjava.util.TimeZone, siehe http://docs.oracle.com/javase/1.5.0/docs/api/java/util/TimeZone.html , an, z. B.GMT+2.Das optionale Attribut
formatgibt ein Datumsformat gemäßjava.text.SimpleDateFormatan und gibt das erwartete Format für den Wert innerhalb des entsprechenden<row>-Elements vor.
Falls Sie innerhalb der SQL-Anweisung oder für die Werte bzw. Daten der Tabellenspalten Zeichen verwenden, die in XML eine Bedeutung besitzen, maskieren Sie die SQL-Anweisung mit einem umgebenden CDATA -Block, z. B. <![CDATA[ SELECT * FROM TABLE WHERE ID<]]><id type="INTEGER" /> oder <rowset><row><Name><!CDATA[ XML Zeichen “<“ in CDATA Element]]></Name></row></rowset>.
So wird sichergestellt, dass die Zeichen im CDATA-Element nicht als XML interpretiert werden, sondern als Daten für den Adapter.
Für jedes Element <rowset/> gilt:
Es darf beliebig häufig verwendet werden (
0–n-mal)Es enthält beliebig viele Elemente
<row/>, die die Statement-Ausführung steuern.
Für jedes Element <row/> gilt:
Es muss mindestens ein Element enthalten, das dem Elementnamen im SQL-Statement entspricht.
Die darin liegenden Elemente enthalten die jeweiligen Werte.
Beachten Sie für jedes Datenelement innerhalb von <row/>, dass im Elementinhalt keine unbeabsichtigten Zeilenumbrüche definiert wurden (z.B. durch Editor-Formatierung). Andernfalls würden diese Zeilenumbrüche in der erzeugten SQL-Anweisung als \n angefügt.
Beachten Sie Folgendes
Zulässige Datentypen für das Attribut type zum Setzen (Input-Parameter) und Lesen (ResultSet) von Werten sind: BIGINT, BINARY, BIT, BOOLEAN, BLOB, CHAR, CLOB, DATE, DECIMAL, DOUBLE, FLOAT, INTEGER, LONGNVARCHAR, LONGVARBINARY, LONGVARCHAR, NCHAR, NCLOB, NULL, NUMERIC, NVARCHAR, REAL, SMALLINT, SQLXML, TIME, TIMESTAMP, TINYINT, VARBINARY und VARCHAR (Standard), XML (alias für SQLXML).
Beispiel
<Rootelement>
<namedpreparedstatementbatch resulttag="namedPreparedStatementBatchWithCData"
timezone="UTC" format="dd.MM.yyyy">
<sql>
<![CDATA[UPDATE PROCESS SET X4_VERSION=4 WHERE X4_DURATION=]]>
<duration type="INTEGER" mode="inout" />
</sql>
<rowset>
<row>
<duration>101</duration>
</row>
<row>
<duration>9</duration>
</row>
</rowset>
</namedpreparedstatementbatch>
</Rootelement>
Output
Wurde die SQL-Anweisung erfolgreich ausgeführt, gibt der Adapter ein XML-Dokument mit folgender Struktur zurück:
<Data>
<Ergebniselementname count="Anzahl der betroffenen Datenbankeinträge">
<!--Status der Batch-Operation-->
</Ergebniselementname>
</Data>
Als Status der Batch-Operation sind folgende Ausgaben möglich:
(Anzahl der Zeilen)rows affected. oderSUCCESS_NO_INFOoderEXECUTE_FAILED