Erstellen von WHERE- und ORDER BY-Klauseln
Nachdem Sie eine SQL/NoSQL-WHERE/ORDER-Komponente zum Mapping hinzugefügt haben, benötigen Sie dafür eine WHERE-Bedingung (Klausel), mit der Sie festlegen können, wie genau die mit der Komponente verbundenen Daten gefiltert werden sollen. Die WHERE-Bedingung muss in das Dialogfeld SQL/NoSQL-WHERE/ORDER-Eigenschaften (siehe vorhergehender Abschnitt) eingegeben werden.
WHERE-Bedingungen in MapForce werden ähnlich wie dieselbe SQL-Klausel außerhalb von MapForce geschrieben. Verwenden Sie die Syntax für die SQL-Variante für die entsprechende Datenbank. Verwenden Sie z.B. Operatoren, Platzhalter, Sub-Select-Klauseln oder Aggregierungsfunktionen. Um einen Parameter zu erstellen, der über das Mapping übergeben werden kann, geben Sie einen Doppelpunkt ( : ), gefolgt vom Namen des Parameters ein.
Anmerkung: | Sobald Sie die WHERE-Klausel fertig erstellt und auf OK geklickt haben, validiert MapForce die endgültige SQL-Anweisung. Falls Syntaxfehler vorhanden sind, werden Sie darüber in einem Dialogfeld informiert. |
Die nachstehende Tabelle enthält eine Liste einiger typischer Operatoren, die in der WHERE-Klausel verwendet werden können:
Operator | Beschreibung |
---|---|
= | Ist gleich |
<> | Ist nicht gleich |
< | Kleiner als |
> | Größer als |
>= | Größer oder gleich |
<= | Kleiner oder gleich |
IN | Ruft einen bekannten Wert einer Spalte ab |
LIKE | Sucht nach einem bestimmten Muster |
BETWEEN | Sucht innerhalb eines Bereichs |
Verwenden Sie das Platzhalterzeichen % (Prozent), um eine beliebige Anzahl von Zeichen in einem Muster darzustellen. Verwenden Sie z.B. den folgenden Ausdruck, um alle Datensätze, die mit "r" enden, aus einem Feld namens lastname abzurufen:
lastname = "%r" |
Bei Abfragen an Datenbanken, die das Speichern und Abfragen von XML-Datenbankdaten unterstützen (z.B. IBM DB2, Oracle, SQL Server) können Sie XML-Funktionen und Schlüsselwörter für die jeweilige Datenbank verwenden, z.B.:
xmlexists('$c/Client/Address[zip>"55116"]' passing USER.CLIENTS.CONTACTINFO AS "c") |
Siehe auch Beispiel: Extrahieren von Daten aus IBM DB2-Spalten vom Typ XML.
Wenn Sie die abgerufenen Datensätze optional nach einem bestimmten Feld sortieren möchten, fügen Sie im entsprechenden Textfeld des Dialogfelds SQL/NoSQL-WHERE/ORDER-Eigenschaften eine ORDER BY-Klausel hinzu. Um nach mehreren Feldern zu sortieren, trennen Sie die Felder durch Kommas. Sie können die Sortierreihenfolge mit Hilfe der Schlüsselwörter ASC und DESC ändern. So werden z.B. mit der folgenden ORDER BY-Klausel Datensätze in absteigender Reihenfolge zuerst nach lastname und anschließend nach firstname sortiert:
lastname, firstname DESC |
Beispiel 1
Die folgende WHERE-Bedingung wird in der Datenbankkomponente Nanonull.sqlite an die Tabelle users angehängt. Sie ruft diejenigen Datensätze ab, in denen last_name größer als der Buchstabe "M" ist, d.h. es werden alle Namen ab dem Benutzer "Marzolla" abgerufen.
last_name > "M" |
Beachten Sie, wie die Verbindungen platziert wurden:
•Die Verbindung zum Parameter table/field ist mit der Quelltabelle verbunden, an der Sie die Abfrage durchführen möchten (in diesem Fall mit users).
•Der Parameter result ist mit einem übergeordneten Datenelement der Felder verbunden, die abgefragt/gefiltert werden, in diesem Fall mit dem Datenelement row.
Beispiel 2
Mit der folgenden WHERE-Klausel wird ein Parameter param erstellt, der anschließend im Mapping in der SQL/NoSQL-WHERE/ORDER-Komponente aufscheint.
last_name LIKE :param |
Die Konstantenkomponente %M liefert den Wert von param. Der Platzhalter % steht für beliebig viele Zeichen. Dadurch wird im Mapping nach einem Muster in der Spalte last_name gesucht (alle Nachnamen, die mit "M" beginnen).
Beispiel 3
Mit der folgenden WHERE-Anweisung werden zwei Parameter erstellt, min und max, mit denen die aktuellen Werte von quantity verglichen werden. Die Werte min und max stammen aus den zwei Konstantenkomponenten aus dem Mapping.
quantity > :min and quantity < :max |
Die WHERE-Bedingung in diesem Beispiel könnte auch mit Hilfe des Operators BETWEEN erstellt werden.
quantity BETWEEN :min and :max |