XML-Querys im Database Connector: Struktur und Beispiele
Struktur von XML-Querys im Database Connector
Die grundlegende Struktur ist für alle XML-Querys identisch:
Groß- und Kleinschreibung wird in den folgenden Tags unterstützt:
Groß- und Kleinschreibung wird in den folgenden Tags NICHT unterstützt:
|
<queries>
Umschließendes Element für ein Set von SQL-Statements.
<query>
Initiale Definition eines SQL-Statements. Kann mehrfach auftreten, z.B. um mehrere SQL-Anweisungen innerhalb einer Abfrage abzusenden
Attribute | Pflichtfeld | Zulässige Werte | Erläuterung |
---|---|---|---|
|
Ja |
|
Art des SQL-Statements |
|
Nein |
|
Mit |
|
Nein |
|
SELECT-Anweisungen, die mit SELECT beginnen, werden automatisch erkannt. |
|
Nein |
Wird in Abhängigkeit vom gewählten |
<value>
Zur direkten Übergabe eines SQL-Statements.
Dazu muss im Element <query>
das Attribut properties
den Wert force
haben.
Alle weiteren Angaben werden ignoriert.
<tables>
Einleitendes XML-Element für die Definition eines SQL-Statements.
<table>
Einleitendes XML-Element für ein einzelnes SQL-Statement.
Kann mit dem Attribut type="subselect"
als Subquery in einer Hauptabfrage verwendet werden und mehrfach auftreten.
Attribute | Pflichtfeld | Zulässige Werte | Erläuterung |
---|---|---|---|
|
Nein |
Beliebiger Bezeichner |
|
|
Nein |
|
Gibt an, dass es sich um eine Subquery handelt |
<tableNames>
Umschließendes XML-Element für alle Tabellennamen, die im SQL-Statement abgefragt werden.
<tableName>
Tabellenname, der im SQL-Statement abgefragt wird. Kann mehrfach auftreten. Entspricht dem FROM-Teil eines SQL-Statements.
Attribute | Pflichtfeld | Zulässige Werte | Erläuterung |
---|---|---|---|
|
Nein |
Beliebiger Bezeichner |
Alias-Name der Tabelle |
<fields>
Umschließendes XML-Element für alle im SQL-Statement zu verwendenden Spaltennamen.
<field>
XML-Element für den Namen der im SQL-Statement abgefragten Tabellenspalte. Kann mehrfach auftreten. Entspricht dem Select-Teil eines SQL-Statements.
Attribute | Pflichtfeld | Zulässige Werte | Erläuterung |
---|---|---|---|
|
Nein |
Beliebiger Bezeichner |
Alias-Name der Spalte. |
<fieldName>
Name einer im SQL-Statement zu verwendenden Tabellenspalte.
<fieldValue>
Werte für einzelne Felder oder der Name einer Subquery. (nur INSERT, UPDATE)
Attribute | Pflichtfeld | Zulässige Werte | Erläuterung |
---|---|---|---|
|
Nein |
|
|
<conditions>
(nicht für INSERT)
Attribute | Pflichtfeld | Zulässige Werte | Erläuterung |
---|---|---|---|
|
Ja |
|
Operator zur Verknüpfung mit den Kriterien im vorausgehenden |
Umschließendes XML-Element für die WHERE-Bedingung eines SQL-Statements.
Mehrere <conditions>
-Elemente können geschachtelt werden, um Statements zu gruppieren oder zu klammern.
<condition>
Werte für ein Kriterium in der WHERE-Bedingung eines SQL-Statements. Kann mehrfach auftreten.
Attribute | Pflichtfeld | Zulässige Werte | Erläuterung |
---|---|---|---|
|
Ja |
|
Operator zur Verknüpfung mit den Kriterien im vorausgehenden |
<leftValue>
Spaltenname auf der linken Seite eines Kriteriums in einer WHERE-Bedingung.
<operation>
Operator innerhalb eines Kriteriums in einer WHERE-Bedingung, z.B. =
, <
, >
, >=
, ⇐
, IN
, NOT IN …
<rightValue>
Enthält den Wert auf der rechten Seite eines Kriteriums in einer WHERE-Bedingung. Dabei kann es sich um einen Wert, um einen Spaltennamen oder um den Namen eines Subselect handeln.
Attribute | Pflichtfeld | Zulässige Werte | Erläuterung |
---|---|---|---|
|
Nein |
|
|
|
Nein |
|
|
<sortOrders>
(nur für SELECT)
Sortiert die Ausgaben nach einem Feld auf- oder absteigend.
<sort>
Feld, das als Sortierkriterium verwendet wird
Attribute | Pflichtfeld | Zulässige Werte | Erläuterung |
---|---|---|---|
|
Nein |
|
Sortierreihenfolge |
<tail>
Der Wert des Elements wird an die erzeugte SQL-Anfrage angehängt. Damit können Datenbank-spezifische SQL Erweiterungen hinzugefügt werden.
Die folgende Abbildung zeigt ein SELECT als Baumstruktur:
Groß- und Kleinschreibung in Datenbankanfragen berücksichtigen
Die Tabellen- und Feldnamen mit Berücksichtigung der Groß- und Kleinschreibung (mit Anführungszeichen erstellten Tabellen- und Feldnamen) müssen den folgenden Standards in XML entsprechen, damit sie fehlerfrei funktionieren:
-
Wenn sie in XML mit Anführungszeichen oder mit dem
force
-Attribut versehen werden, müssen sie in Groß- und Kleinschreibung wie in der Datenbank sein, unabhängig davon, ob die Option Automatische Typenerkennung der Datenbankobjekte im Dialog Datenbankverbindungen und Query-Typ aktiviert ist oder nicht. -
Wenn sie in XML ohne Anführungszeichen versehen werden, muss die Option Automatische Typenerkennung der Datenbankobjekte im Dialog Datenbankverbindungen und Query-Typ aktiviert sein.
-
Für Systemtabellen sollten Großbuchstaben ohne Anführungszeichen verwendet werden und die Option Automatische Typenerkennung der Datenbankobjekte im Dialog Datenbankverbindungen und Query-Typ deaktiviert sein.
Mit Anführungszeichen erzeugte Tabelle und Felder
XML-Anfrage für die Tabelle Test
mit zwei Spalten Col1
und Col2
.
Automatische Typerkennung der Datenbankobjekte kann aktiviert oder deaktiviert sein.
<queries>
<query type="select">
<tables>
<table>
<tableNames>
<tableName>"Test"</tableName>
</tableNames>
<fields>
<field>
<fieldName>"Test"."Col1"</fieldName>
</field>
<field>
<fieldName>"Test"."Col2"</fieldName>
</field>
</fields>
</table>
</tables>
</query>
</queries>
Ohne Anführungszeichen erzeugte Tabelle und Felder
XML-Anfrage für die Tabelle test
mit zwei Spalten col1
und col2
.
Automatische Typerkennung der Datenbankobjekte muss aktiviert sein.
<queries>
<query type="select">
<tables>
<table>
<tableNames>
<tableName>test</tableName>
</tableNames>
<fields>
<field>
<fieldName>test.col1</fieldName>
</field>
<field>
<fieldName>test.col2</fieldName>
</field>
</fields>
</table>
</tables>
</query>
</queries>
Eine Systemtabelle anfragen
Mit dieser XML-Anfrage greifen Sie auf die Systemtabelle DUAL zu. Automatische Typerkennung der Datenbankobjekte muss deaktiviert sein.
<queries>
<query type="select">
<tables>
<table>
<tableNames>
<tableName>DUAL</tableName>
</tableNames>
<fields>
<field>
<fieldName>*</fieldName>
</field>
</fields>
</table>
</tables>
</query>
</queries>
Select: Daten anzeigen mit XML-Querys
SQL
SELECT name, address, phone, fax
FROM addresses
WHERE name = "Georg Miller"
ORDER BY name ASC, address DESC
XMLQuery
<queries>
<query type="select">
<tables>
<table>
<tableNames>
<tableName>addresses</tableName>
</tableNames>
<fields>
<field>
<fieldName>name</fieldName>
</field>
<field>
<fieldName>address</fieldName>
</field>
<field>
<fieldName>phone</fieldName>
</field>
<field>
<fieldName>fax</fieldName>
</field>
</fields>
<conditions>
<condition>
<leftValue>name</leftValue>
<operation>=</operation>
<rightValue>Georg Miller</rightValue>
</condition>
<condition type="OR">
<leftValue>name</leftValue>
<operation>=</operation>
<rightValue>Bob Brown</rightValue>
</condition>
</conditions>
<sortOrders>
<sort>name</sort>
<sort order="DESC">address</sort>
</sortOrders>
</table>
</tables>
</query>
</queries>
Select Distinct im Database Connector
Mit einem SELECT DISTINCT
werden alle unterschiedlichen Werte einer Tabelle zurückgegeben.
SQL
SELECT DISTINCT abteilung
FROM mitarbeiter
XMLQuery
Um ein SELECT DISTINCT
zu formulieren, haben Sie zwei Möglichkeiten:
-
DISTINCT
beim Spaltennamen angeben:<queries> <query type="select"> <tables> <table> <tableNames> <tableName>Mitarbeiter</tableName> </tableNames> <fields> <field> <fieldName>DISTINCT Abteilung</fieldName> </field> </fields> </table> </tables> </query> </queries>
-
Mit dem Attribut
properties="force"
die Abfrage direkt übergeben:<queries> <query type="select" properties="force"> <value>SELECT DISTINCT Abteilung FROM Mitarbeiter</value> </query> </queries>
Daten aus verschiedenen Tabellen: Join
Ein Join
ist eine Abfrage, die Datensätze aus zwei oder mehr verschiedenen Tabellenspalten zueinander in Beziehung setzt, z.B.:
SQL
SELECT *
FROM Gartenmoebel, Kategorien
WHERE Gartenmoebel.KategorieNr = Kategorien.Kategorienummer
XMLQuery
<queries>
<query type="select">
<tables>
<table>
<tableNames>
<tableName>Gartenmoebel</tableName>
<tableName>Kategorien</tableName>
</tableNames>
<fields>
<field>
<fieldName>*</fieldName>
</field>
</fields>
<conditions>
<condition>
<leftValue>Gartenmoebel.KategorieNr</leftValue>
<operation>=</operation>
<rightValue>Kategorien.Kategorienummer</rightValue>
</condition>
</conditions>
</table>
</tables>
</query>
</queries>
Datensätze im Database Connector einfügen: Insert
Um einer Tabelle einen Datensatz hinzuzufügen, verwenden Sie INSERT
.
Um Datensätze mit einer Bulk-Operation einzufügen, verwenden Sie ein Prepared-Statement, siehe Prepared Statement in einer Abfrage. |
SQL
INSERT INTO addresses (name, address, phone, fax)
VALUES ("Georg Miller", "Hauptstrasse 7", "253263", "253264")
XMLQuery
<queries>
<query type="insert">
<tables>
<table>
<tableNames>
<tableName>addresses</tableName>
</tableNames>
<fields>
<field>
<fieldName>name</fieldName>
<fieldValue>Georg Miller</fieldValue>
</field>
<field>
<fieldName>address</fieldName>
<fieldValue>Hauptstrasse 7</fieldValue>
</field>
<field>
<fieldName>phone</fieldName>
<fieldValue>253263</fieldValue>
</field>
<field>
<fieldName>fax</fieldName>
<fieldValue>253264</fieldValue>
</field>
</fields>
</table>
</tables>
</query>
</queries>
Datensätze im Database Connector aktualisieren: Update
Um bestehende Datensätze in einer Tabelle zu aktualisieren, verwenden Sie UPDATE
.
Um Datensätze mit einer Bulk-Operation einzufügen, verwenden Sie ein Prepared-Statement, siehe Prepared Statement in einer Abfrage. |
SQL
UPDATE addresses
SET address = "Hauptstrasse 8"
WHERE name = "Georg Miller"
XMLQuery
<queries>
<query type="update">
<tables>
<table>
<tableNames>
<tableName>addresses</tableName>
</tableNames>
<fields>
<field>
<fieldName>address</fieldName>
<fieldValue>Hauptstrasse 8</fieldValue>
</field>
</fields>
<conditions>
<condition>
<leftValue>name</leftValue>
<operation>=</operation>
<rightValue>Georg Miller</rightValue>
</condition>
</conditions>
</table>
</tables>
</query>
</queries>
UpdateOrInsert im Database Connector
Dieses SQL-Statement bildet die SQL-Statements Insert und Update ab. Damit wird versucht, einen Datensatz zu aktualisieren (Update); falls dies nicht möglich ist, weil der Datensatz noch nicht vorhanden ist, wird der Datensatz eingefügt (Insert). Das Update wird zuerst ausgeführt, weil es weniger zeitintensiv ist als das Insert.
<queries>
<query type="updateOrInsert">
<tables>
<table>
<tableNames>
<tableName>OrderTable</tableName>
</tableNames>
<fields>
<field skip="update">
<fieldName>OrderNr</fieldName>
<fieldValue>Kunde11</fieldValue>
</field>
<field>
<fieldName>Kunde</fieldName>
<fieldValue>123</fieldValue>
</field>
<field>
<fieldName>Text1</fieldName>
<fieldValue>info1</fieldValue>
</field>
<field>
<fieldName>Text2</fieldName>
<fieldValue>info2</fieldValue>
</field>
</fields>
<conditions>
<condition type="OR">
<leftValue>OrderNr</leftValue>
<operation>=</operation>
<rightValue>Kunde11</rightValue>
</condition>
</conditions>
</table>
</tables>
</query>
</queries>
Datensätze im Database Connector löschen: Delete
Zum Löschen von Datensätzen verwenden Sie Delete
.
Im folgenden Beispiel werden alle Daten von Georg Miller gelöscht.
SQL
DELETE
FROM addresses
WHERE name="Georg Miller"
XMLQuery
<queries>
<query type="delete">
<tables>
<table>
<tableNames>
<tableName>addresses</tableName>
</tableNames>
<conditions>
<condition>
<leftValue>name</leftValue>
<operation>=</operation>
<rightValue>Georg Miller</rightValue>
</condition>
</conditions>
</table>
</tables>
</query>
</queries>
Mehrere SQL-Statements in einer Abfrage
XML-Query
Dynamische XML-Querys können mehrere Statements enthalten:
<queries>
<query type="insert">
<tables>
<table>
<tableNames>
<tableName>eins</tableName>
</tableNames>
<fields>
<field>
<fieldName>id</fieldName>
<fieldValue>1</fieldValue>
</field>
<field>
<fieldName>meldung</fieldName>
<fieldValue>
spießbraten köcheln
</fieldValue>
</field>
<field>
<fieldName>datum</fieldName>
<fieldValue>
2003-03-20 10:20:00.000000000
</fieldValue>
</field>
<field>
<fieldName>wert</fieldName>
<fieldValue>10.12</fieldValue>
</field>
</fields>
</table>
</tables>
</query>
<query type="select">
<tables>
<table>
<tableNames>
<tableName>eins</tableName>
</tableNames>
<fields>
<field>
<fieldName>*</fieldName>
</field>
</fields>
<conditions>
<condition type="OR">
<leftValue>id</leftValue>
<operation>=</operation>
<rightValue>1</rightValue>
</condition>
</conditions>
</table>
</tables>
</query>
<query type="update">
<tables>
<table>
<tableNames>
<tableName>eins</tableName>
</tableNames>
<fields>
<field>
<fieldName>id</fieldName>
<fieldValue>2</fieldValue>
</field>
</fields>
<conditions>
<condition type="OR">
<leftValue>id</leftValue>
<operation>=</operation>
<rightValue>1</rightValue>
</condition>
</conditions>
</table>
</tables>
</query>
<query type="delete">
<tables>
<table>
<tableNames>
<tableName>eins</tableName>
</tableNames>
</table>
</tables>
</query>
</queries>
SQL-Statements im Database Connector direkt übergeben: Force
XMLQuery
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="ISO-8859-1"/>
<xsl:template match="/">
<queries>
<query type="select" properties="force">
<value>
create table trade_user ( id_user NUMBER(20,0) PRIMARY KEY, since_user NUMBER(15,0),
lastlogin_user NUMBER(15,0), sex_user NUMBER(1,0), language_user VARCHAR2(5), title_user
VARCHAR2(4000), firstname_user VARCHAR2(200), lastname_user VARCHAR2(200), company_user
NUMBER(20,0), function_user VARCHAR2(4000), street_user VARCHAR2(4000), zip_user
VARCHAR2(4000), land_user VARCHAR2(4000), city_user VARCHAR2(4000), phone_user
VARCHAR2(4000), mobile_user VARCHAR2(4000), fax_user VARCHAR2(4000), email_user
VARCHAR2(200) NOT NULL UNIQUE, web_user VARCHAR2(4000), via_user VARCHAR2(4000),
enable_user NUMBER(2,0), comment_user VARCHAR2(4000), abbo_news_user NUMBER(1,0),
abbo_mail_user NUMBER(1,0), keyaccount_user NUMBER(20,0), lastforum_user NUMBER(20,0),
contentarea_user VARCHAR2(4000), deliveryplace_user VARCHAR2(4000) DEFAULT '1',
originplace_user VARCHAR2(4000) DEFAULT '1', sms_mail_user VARCHAR2(1900),
customer_protection_user NUMBER(1,0) )
</value>
</query>
<query type="select" properties="force">
<value>
insert into xtrade_user( id_user, firstname_user, lastname_user, company_user,
email_user ) values (1,'Hans','Müller',1,'h.mueller@karstadt.de')
</value>
</query>
<query properties="force">
<value>DROP TABLE "ORATEST"."TESTTABLE"</value>
</query>
</queries>
</xsl:template>
</xsl:stylesheet>
Prepared Statement in einer Abfrage
Sie können ein Prepared Statement verwenden, um beliebige Abfragen ohne das Risiko von SQL-Injection-Attacken auszuführen.
XMLQuery
<queries>
<query type="preparedStatement">
<preparedStatement>SELECT NAME FROM TESTTABLE WHERE ID = ? </preparedStatement>
<params>
<paramValue>10</paramValue>
</params>
</query>
</queries>
In diesem Fall kann ein |
Ausführung mehrerer Abfragen mit einem Prepared Statement
Sie können ein Prepared Statement verwendet, um mehrere beliebige Abfragen auszuführen.
XMLQuery
<queries>
<query type="preparedStatement">
<preparedStatement>INSERT INTO TESTTABLE(id, name) VALUES(?,?)</preparedStatement>
<params>
<paramValue>10</paramValue>
<paramValue>test</paramValue>
</params>
<params>
<paramValue>20</paramValue>
<paramValue>test2</paramValue>
</params>
</query>
</queries>
In diesem Fall kann ein |
Mehrere Prepared Statements in einem XML
Sie können mehrere Prepared Statement Abfragen in demselben XML verwenden.
XMLQuery
<queries>
<query type="preparedStatement">
<preparedStatement>INSERT INTO TESTTABLE(id, name) VALUES(?,?)</preparedStatement>
<params>
<paramValue>10</paramValue>
<paramValue>test</paramValue>
</params>
</query>
<query type="preparedStatement">
<preparedStatement>SELECT NAME FROM TESTTABLE WHERE ID = ? </preparedStatement>
<params>
<paramValue>10</paramValue>
</params>
</query>
</queries>
In diesem Fall kann ein |
Subqueries mit SubSelects im Database Connector
Sie können SQL-Abfragen verschachteln, um das Ergebnis eines SubSelects
in demselben Select auszuwerten.
SQL
SELECT LieferscheinId , ErstellungsDatum
FROM LieferscheinTable
WHERE
factory=(SELECT factory FROM SpeditionsTable
WHERE status!=X AND TransportId=10000037)
AND gate=(SELECT gate FROM SpeditionsTable
WHERE status!=X AND TransportId=10000037 )
AND status = F
XMLQuery
Für jedes SubSelect wird ein zusätzliches table
-Element mit den Attributen type="subselect"
und alias=[NameDesSubselects]
erstellt.
Dieses table
-Element muss vor dem Haupt-Select stehen.
Das Ergebnis des SubSelects wird in das Haupt-Select in field
und/oder condition
-Elementen über das Attribut type="subselect"
eingebunden, dabei ist der Wert des field
und/oder condition
-Elements dann der Name des SubSelects:
<tables>
<table type="subselect" alias="subFactory">
<tableNames>
<tableName>SpeditionsTable</tableName>
</tableNames>
<fields>
<field>
<fieldName>factory</fieldName>
</field>
</fields>
<conditions>
<condition type="AND">
<leftValue>status</leftValue>
<operation>!=</operation>
<rightValue>X</rightValue>
</condition>
<condition type="AND">
<leftValue>TransportId</leftValue>
<operation>=</operation>
<rightValue>
<xsl:value-of select="FormPrepare/
Response/Panel/Transporte/SLB-Nr"/>
</rightValue>
</condition>
</conditions>
</table>
<table type="subselect" alias="subGate">
<tableNames>
<tableName>SpeditionsTable</tableName>
</tableNames>
<fields>
<field>
<fieldName>gate</fieldName>
</field>
</fields>
<conditions>
<condition type="AND">
<leftValue>status</leftValue>
<operation>!=</operation>
<rightValue>X</rightValue>
</condition>
<condition type="AND">
<leftValue>TransportId</leftValue>
<operation>=</operation>
<rightValue>
<xsl:value-of select="FormPrepare/
Response/Panel/Transporte/SLB-Nr"/>
</rightValue>
</condition>
</conditions>
</table>
<table>
<tableNames>
<tableName>LieferscheinTable</tableName>
</tableNames>
<fields>
<field>
<fieldName>LieferscheinId</fieldName>
</field>
<field>
<fieldName>ErstellungsDatum</fieldName>
</field>
</fields>
<conditions>
<condition type="AND">
<leftValue>factory</leftValue>
<operation>=</operation>
<rightValue type="subselect">
subFactory
</rightValue>
</condition>
<condition type="AND">
<leftValue>gate</leftValue>
<operation>=</operation>
<rightValue type="subselect">
subGate
</rightValue>
</condition>
<condition type="AND">
<leftValue>status</leftValue>
<operation>=</operation>
<rightValue>F</rightValue>
</condition>
</conditions>
</table>
</tables>
Stored Procedures im Database Connector aufrufen
In einer Stored Procedure können ganze Abfolgen von Anweisungen unter einem Namen gespeichert, auf dem Datenbankserver zur Verfügung gestellt und ausgeführt werden.
Das folgende Beispiel illustriert den Aufruf von Stored Procedures mithilfe des Elements <method name="[NAME]">
mit und ohne Parameterübergabe.
XML-SQL
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="ISO-8859-1"/>
<xsl:template match="/">
<queries>
<query type="call">
<method name="TESTPROC_WITHOUTPARAM"/>
</query>
<query type="call">
<method name="TESTPROC_IN">
<parameter direction="IN" type="DECIMAL">2</parameter>
</method>
</query>
<query type="call">
<method name="TESTPROC_OUT">
<parameter direction="OUT" type="VARCHAR"/>
</method>
</query>
<query type="call">
<method name="TESTPROC_INOUT">
<parameter direction="INOUT" type="NUMERIC">4</parameter>
</method>
</query>
<query type="call">
<method name="TESTPROC_INOUT2">
<parameter direction="IN" type="NUMERIC">5</parameter>
<parameter direction="OUT" type="NUMERIC">5</parameter>
</method>
</query>
<query type="call">
<method name="TESTFUNC_OUT">
<result type="DATE"/>
</method>
</query>
<query type="call">
<method name="TESTFUNC_INOUT">
<parameter type="NUMERIC" direction="IN">2</parameter>
<result type="NUMERIC"/>
</method>
</query>
</queries>
</xsl:template>
</xsl:stylesheet>
Benutzung des Name-Attributs
Wird kein name
-Attribut für die Parameter in der Query benutzt, dann muss die Parameterreihenfolge exakt der in der Query definierten entsprechen.
Beispiel:
<query type="call">
<method name="TESTPROC_INOUT2">
<parameter direction="IN" type="NUMERIC">5</parameter>
<parameter direction="IN" type="VARCHAR">5</parameter>
<parameter direction="OUT" type="NUMERIC">5</parameter>
</method>
</query>
Es wird dringend empfohlen, bei Stored Procedures und Funktionen das optionale name
-Attribut zu verwenden.
Eine Änderung der Parameterreihenfolge hat dann keine Auswirkungen auf den Workflow, da dann die Parameterwerte anhand des Parameternamens an die Prozedur übergeben werden.
Beispiel mit optionalem name
-Attribut:
<query type="call">
<method name="TESTPROC_INOUT2">
<parameter direction="IN" name="MyNumericParam" type="NUMERIC">5</parameter>
<parameter direction="IN" name="MyVarcharParam" type="VARCHAR">5</parameter>
<parameter direction="OUT" type="NUMERIC">5</parameter>
</method>
</query>
Nur für Oracle: Das Attribut UseDefault zum Aufrufen von Oracle-Funktionen verwenden
Zum Aufrufen von Oracle-Funktionen, deren Eingangsparameter einen Standardwert haben, müssen Sie im method
tag das Attribut useDefault=true
verwenden.
Das Attribut useDefault
ist kein Pflichtparameter und auf false
gesetzt, wenn es nicht angegeben ist.
Das Attribut |
Beispiel
<query type="call">
<method name="GET1" useDefault="true">
<parameter type="VARCHAR" name="P1" direction="IN">a</parameter>
<parameter type="VARCHAR" name="P3" direction="OUT"></parameter>
<result type="NUMERIC"/>
</method>
</query>
Unterstützung der ResultSet-Ausgabe (nur für MS SQL Server)
Soll eine Stored-Procedure, die ein ResultSet
zurückliefert, von einem Database Connector aufgerufen werden, muss der folgende Tag in der Eingangs-XML-Struktur verwendet werden.
Beispiel:
<queries>
<query type="call">
<method name="Test">
<result type="RESULTSET"/>
</method>
</query>
</queries>
TO_TIMESTAMP-Funktion in Oracle-Datenbanken verwenden
In Oracle-Datenbanken können Sie die TO_TIMESTAMP
-Funktion sowohl in SELECT-, INSERT-, UPDATE- und INSERT- oder UPDATE-Query-Typen als auch in Bedingungen in WHERE-Klauseln nutzen.
SELECT: TO_TIMESTAMP-Funktion verwenden
SQL-Query
SELECT ID, MESSAGE, TO_TIMESTAMP(DATE_TIMESTAMP,'YYYY-MM-DD HH24:MI:SS.FF'), TEST_DATE
FROM TABLE_TIMESTAMP
XML-Format
<query type="select">
<tables>
<table>
<tableNames>
<tableName/>
</tableNames>
<fields>
<field function="to_timestamp" format="YYYY-MM-DD HH24:MI:SS.FF">
<fieldName/>
</field>
</fields>
<conditions>
<condition type="OR">
<leftValue/>
<operation/>
<rightValue/>
</condition>
</conditions>
<group>
<field>
<fieldName/>
</field>
<expression/>
</group>
<having>
<expression/>
</having>
<sortOrders>
<sort order="ASC"/>
</sortOrders>
<tail/>
</table>
</tables>
</query>
Beispiel
<query type="select">
<tables>
<table>
<tableNames>
<tableName>TABLE_TIMESTAMP</tableName>
</tableNames>
<fields>
<field>
<fieldName>ID</fieldName>
</field>
<field>
<fieldName>MESSAGE</fieldName>
</field>
<field>
<fieldName function="to_timestamp" format="YYYY-MM-DD HH24:MI:SS.FF">DATE_TIMESTAMP</fieldName>
</field>
<field>
<fieldName>TEST_DATE</fieldName>
</field>
</fields>
</table>
</tables>
</query>
INSERT: TO_TIMESTAMP-Funktion verwenden
SQL-Query
INSERT INTO TABLE_TIMESTAMP(ID, DATE_TIMESTAMP, TEST_DATE)
VALUES (101, TO_TIMESTAMP('2017-07-20 15:28:42.124','YYYY-MM-DD HH24:MI:SS.FF'),'2017-08-15 10:10:12.231')
XML-Format
<query type="insert">
<tables>
<table>
<tableNames>
<tableName/>
</tableNames>
<fields>
<field>
<fieldName/>
<fieldValue function="to_timestamp" format="YYYY-MM-DD HH24:MI:SS.FF"/>
</field>
</fields>
</table>
</tables>
</query>
Beispiel
<query type="insert">
<tables>
<table>
<tableNames>
<tableName>TABLE_TIMESTAMP</tableName>
</tableNames>
<fields>
<field>
<fieldName>ID</fieldName>
<fieldValue>101</fieldValue>
</field>
<field>
<fieldName>DATE_TIMESTAMP</fieldName>
<fieldValue function="to_timestamp" format="YYYY-MM-DD HH24:MI:SS.FF">2017-07-20 15:28:42.124</fieldValue>
</field>
<field>
<fieldName>TEST_DATE</fieldName>
<fieldValue>2017-08-15 10:10:12.231</fieldValue>
</field>
</fields>
</table>
</tables>
</query>
UPDATE: TO_TIMESTAMP-Funktion verwenden
SQL-Query
UPDATE TABLE_TIMESTAMP
SET MESSAGE='anotherString', DATE_TIMESTAMP=TO_TIMESTAMP('2017-07-20 15:28:42.123','YYYY-MM-DD HH24:MI:SS.FF')
WHERE ID = 101
XML-Format
<query type="update">
<tables>
<table>
<tableNames>
<tableName/>
</tableNames>
<fields>
<field>
<fieldName/>
<fieldValue function="to_timestamp" format="YYYY-MM-DD HH24:MI:SS.FF"/>
</field>
</fields>
<conditions>
<condition type="OR">
<leftValue/>
<operation/>
<rightValue/>
</condition>
</conditions>
</table>
</tables>
</query>
Beispiel
<query type="update">
<tables>
<table>
<tableNames>
<tableName>TABLE_TIMESTAMP</tableName>
</tableNames>
<fields>
<field>
<fieldName>MESSAGE</fieldName>
<fieldValue>anotherString</fieldValue>
</field>
<field>
<fieldName>DATE_TIMESTAMP</fieldName>
<fieldValue function="to_timestamp" format="YYYY-MM-DD HH24:MI:SS.FF">2017-07-20 15:28:42.123</fieldValue>
</field>
</fields>
<conditions>
<condition type="AND">
<leftValue>ID</leftValue>
<operation>=</operation>
<rightValue>101</rightValue>
</condition>
</conditions>
</table>
</tables>
</query>
UPDATE oder INSERT: TO_TIMESTAMP-Funktion verwenden
SQL-Query
UPDATE TABLE_TIMESTAMP
SET ID=102,
MESSAGE='anotherString',
DATE_TIMESTAMP=TO_TIMESTAMP('2017-07-20 15:28:42.124','YYYY-MM-DD HH24:MI:SS.FF'),
TEST_DATE='2017-07-20 15:28:42.122'
WHERE ID = 102
OR
INSERT INTO TABLE_TIMESTAMP(ID, MESSAGE, DATE_TIMESTAMP, TEST_DATE)
VALUES (102, 'anotherString', TO_TIMESTAMP('2017-07-20 15:28:42.124','YYYY-MM-DD HH24:MI:SS.FF'),'2017-07-20 15:28:42.122')
XML-Format
<query type="updateOrInsert">
<tables>
<table>
<tableNames>
<tableName/>
</tableNames>
<fields>
<field skip="update">
<fieldName/>
<fieldValue function="to_timestamp" format="YYYY-MM-DD HH24:MI:SS.FF"/>
</field>
</fields>
<conditions>
<condition type="OR">
<leftValue/>
<operation/>
<rightValue/>
</condition>
</conditions>
</table>
</tables>
</query>
Beispiel
<query type="updateOrInsert">
<tables>
<table>
<tableNames>
<tableName>TABLE_TIMESTAMP</tableName>
</tableNames>
<fields>
<field>
<fieldName>ID</fieldName>
<fieldValue>102</fieldValue>
</field>
<field>
<fieldName>MESSAGE</fieldName>
<fieldValue>anotherString</fieldValue>
</field>
<field>
<fieldName>DATE_TIMESTAMP</fieldName>
<fieldValue function="to_timestamp" format="YYYY-MM-DD HH24:MI:SS.FF">2017-07-20 15:28:42.124</fieldValue>
</field>
<field>
<fieldName>TEST_DATE</fieldName>
<fieldValue>2017-07-20 15:28:42.122</fieldValue>
</field>
</fields>
<conditions>
<condition type="AND">
<leftValue>ID</leftValue>
<operation>=</operation>
<rightValue>102</rightValue>
</condition>
</conditions>
</table>
</tables>
</query>
Bedingung in einer WHERE-Klausel beim Benutzen der TO_TIMESTAMP-Funktion
SQL-Query
TO_TIMESTAMP as
left value:
SELECT *
FROM TABLE_TIMESTAMP
WHERE TO_TIMESTAMP(DATE_TIMESTAMP,'YYYY-MM-DD HH24:MI:SS.FF') = '2017-07-20 15:28:42.122'
Right Value:
SELECT *
FROM TABLE_TIMESTAMP
WHERE TEST_DATE = TO_TIMESTAMP('2017-07-20 15:28:42.124','YYYY-MM-DD HH24:MI:SS.FF')
XML-Format
<conditions>
<condition type="OR">
<leftValue function="to_timestamp" format="YYYY-MM-DD HH24:MI:SS.FF"/>
<operation/>
<rightValue function="to_timestamp" format="YYYY-MM-DD HH24:MI:SS.FF"/>
</condition>
</conditions>
Null-Werte in Oracle-Datenbanken verwenden
In Oracle-Datenbanken kann die NULL-Funktion in INSERT-, UPDATE- und INSERT oder UPDATE-Query-Typen verwendet werden.
INSERT: Null-Werte verwenden
SQL-Query
INSERT INTO NULLTABLE(COL1,COL2) VALUES (123,null)
XML-Format
<query type="insert">
<tables>
<table>
<tableNames>
<tableName/>
</tableNames>
<fields>
<field>
<fieldName/>
<fieldValue/>
</field>
</fields>
</table>
</tables>
</query>
Beispiel
<query type="insert">
<tables>
<table>
<tableNames>
<tableName>NULLTABLE</tableName>
</tableNames>
<fields>
<field>
<fieldName>COL1</fieldName>
<fieldValue>123</fieldValue>
</field>
<field>
<fieldName>COL2</fieldName>
<fieldValue>@null</fieldValue>
</field>
</fields>
</table>
</tables>
</query>
UPDATE: Null-Werte verwenden
SQL-Query
UPDATE NULLTABLE
SET COL1=null, COL2='anotherString'
WHERE COL1=123
XML Format
<query type="update">
<tables>
<table>
<tableNames>
<tableName/>
</tableNames>
<fields>
<field>
<fieldName/>
<fieldValue/>
</field>
</fields>
<conditions>
<condition type="OR">
<leftValue/>
<operation/>
<rightValue/>
</condition>
</conditions>
</table>
</tables>
</query>
Beispiele
<query type="update">
<tables>
<table>
<tableNames>
<tableName>NULLTABLE</tableName>
</tableNames>
<fields>
<field>
<fieldName>COL1</fieldName>
<fieldValue>@null</fieldValue>
</field>
<field>
<fieldName>COL2</fieldName>
<fieldValue>anotherString</fieldValue>
</field>
</fields>
<conditions>
<condition type="AND">
<leftValue>COL1</leftValue>
<operation>=</operation>
<rightValue>123</rightValue>
</condition>
</conditions>
</table>
</tables>
</query>
UPDATE oder INSERT: Null-Werte verwenden
SQL Query
UPDATE NULLTABLE
SET COL1=50, COL2=null
WHERE COL1=50
OR
INSERT INTO NULLTABLE(COL1,COL2)
VALUES (50,null)
XML Format
<query type="updateOrInsert">
<tables>
<table>
<tableNames>
<tableName/>
</tableNames>
<fields>
<field skip="update">
<fieldName/>
<fieldValue/>
</field>
</fields>
<conditions>
<condition type="OR">
<leftValue/>
<operation/>
<rightValue/>
</condition>
</conditions>
</table>
</tables>
</query>
Beispiel
<query type="updateOrInsert">
<tables>
<table>
<tableNames>
<tableName>NULLTABLE</tableName>
</tableNames>
<fields>
<field>
<fieldName>COL1</fieldName>
<fieldValue>50</fieldValue>
</field>
<field>
<fieldName>COL2</fieldName>
<fieldValue>@null</fieldValue>
</field>
</fields>
<conditions>
<condition type="OR">
<leftValue>COL1</leftValue>
<operation>=</operation>
<rightValue>50</rightValue>
</condition>
</conditions>
</table>
</tables>
</query>
Bedingungen is null/is not null im Condition Tag von SQL/Querys verwenden
In der Query-Typen select
, update
und delete
können Sie die beiden Bedingungen is null
und is not null
verwenden.
Beispiele
-
XML-Query mit einer Bedingung
is null
<query type="select"> <tables> <table> <tableNames> <tableName>NULLTABLE</tableName> </tableNames> <fields> <field> <fieldName>COL1</fieldName> </field> </fields> <conditions> <condition type="AND"> <leftValue>COL2</leftValue> <operation>is</operation> <rightValue>@null</rightValue> </condition> </conditions> </table> </tables> </query>
-
XML-Query mit einer Bedingung
is not null
<query type="select"> <tables> <table> <tableNames> <tableName>NULLTABLE</tableName> </tableNames> <fields> <field> <fieldName>COL1</fieldName> </field> </fields> <conditions> <condition type="AND"> <leftValue>COL2</leftValue> <operation>is not</operation> <rightValue>@null</rightValue> </condition> </conditions> </table> </tables> </query>
SELECT von Dual-Tabellen
-
Verwenden Sie
dual
im<tableName>
-Tag in Klein- oder Großbuchstaben ohne Anführungszeichen wie folgt:-
<tableName>dual</tableName>
-
<tableName>DUAL</tableName>
-
-
Deaktivieren Sie die Option Automatische Typenerkennung der Datenbankobjekte im Dialog Datenbankverbindungen und Query-Ty.
Wert eines Feldes abrufen
XML-Anfrage für die Tabelle DUAL
, um den Wert des Benutzernamen abzurufen.
<queries>
<query type="select">
<tables>
<table>
<tableNames>
<tableName>dual</tableName>
</tableNames>
<fields>
<field>
<fieldName>user</fieldName>
</field>
</fields>
</table>
</tables>
</query>
</queries>
XML-Anfrage für die Tabelle DUAL
, um den sequence-Wert abzurufen.
<queries>
<query type="select">
<tables>
<table>
<tableNames>
<tableName>dual</tableName>
</tableNames>
<fields>
<field>
<fieldName>sequenceA.nextval</fieldName>
</field>
</fields>
</table>
</tables>
</query>
</queries>
XML-Anfrage für die Tabelle DUAL
, um den Systemdatum-Wert abzurufen.
<queries>
<query type="select">
<tables>
<table>
<tableNames>
<tableName>dual</tableName>
</tableNames>
<fields>
<field>
<fieldName>sysdate</fieldName>
</field>
</fields>
</table>
</tables>
</query>
</queries>
Einen Wert durch Ausführen einer Operation abrufen
XML-Anfrage für die Tabelle DUAL
, um den Wert 15+10
abzurufen, indem die Operation 15+10
ausgeführt wird.
<queries>
<query type="select">
<tables>
<table>
<tableNames>
<tableName>dual</tableName>
</tableNames>
<fields>
<field>
<fieldName>15+10</fieldName>
</field>
</fields>
</table>
</tables>
</query>
</queries>
Einen Wert durch Ausführen einer Funktion abrufen
XML-Anfrage für die Tabelle DUAL
, um den Wert EXAMPLE
abzurufen, indem die Konvertierungsfunktion UPPER('Example')
ausgeführt wird.
<queries>
<query type="select">
<tables>
<table>
<tableNames>
<tableName>dual</tableName>
</tableNames>
<fields>
<field>
<fieldName>UPPER('Example')</fieldName>
</field>
</fields>
</table>
</tables>
</query>
</queries>