Beschreibung
DefaultSQLCron liest Daten aus mehreren Datenbanktabellen gleichzeitig aus. Die Klasse liest SQL-Statements und Tabellenabhängigkeiten aus einer Konfigurationsdatei.
Versehen Sie die SQL-Statements mit aufsteigenden Namen select.<n>. Vergeben Sie alle Nummern lückenlos. Beginnen Sie bei 0. Legen Sie zwischen den SQL-Statements Abhängigkeiten fest. Verwenden Sie dafür die Form dependencies.<n>=<s>:<m>:
ssteht für den Index des SQL-Statements.msteht für den Index der Spalte innerhalb der Ergebnismenge.nsteht für den Index der Abhängigkeit.
Beispiel: dependencies.1=0:2 legt fest, dass das SQL-Statement select.1 von der zweiten Spalte aus der Ergebnismenge von select.0 abhängt. Mehrere Spalten geben Sie kommagetrennt an, zum Beispiel dependencies.1=0:2,0:3.
Konfiguration: im Business Connector (Eingangsagent Cron).
WICHTIG Beim ersten Mal ist es nicht leicht, die Konfigurationsdatei manuell zu erstellen. Nutzen Sie dafür den SQL-Konfigurations-Assistenten.
HINWEIS Die Quellstruktur für die Eingangsdatei erzeugen Sie im Menü der Quellstruktur.
Parameter
Parameter | Beschreibung |
|---|---|
db_alias | Legt den Datenbank-Alias für den Datenbankzugriff fest. Siehe Abschnitt Databases/connectors (Konfiguration). Sie können auch Variablen aus vorangegangenen Profilen oder Parameterwerte von HTTP-Triggern verwenden. Beispiel: |
pre.statement | Sie können mehrere Pre-Statements formulieren. Trennen Sie sie mit einem Semikolon ( |
post.statement | Sie können mehrere Post-Statements formulieren. Trennen Sie sie mit einem Semikolon ( |
save_as_csv | Geben Sie einen Dateipfad an. An diesem Pfad legt das System eine CSV-Datei mit den Eingangsdaten an. |
result.split | Werte: HINWEIS Bei nur einem SQL-Statement nutzen Sie folgenden Trick. Erzeugen Sie ein Dummy-Statement Beispiel: |
select.<n> | Legt die SQL-Statements fest. Beginnen Sie bei HINWEIS Zeilenumbrüche kennzeichnen Sie mit Beispiel: |
dependencies.<n> | Hinterlegt die Abhängigkeiten des jeweiligen |
limit.<n> | Setzt ein Limit für die Anzahl an Zeilen von |
empty.<n> | Definiert ein Dummy-Ergebnis für |
MSG_CALL_<VARNAME> | Siehe Erläuterungen unten. |
encode_blob | Werte: |
use_raw_content | Bei Bei |
In den WHERE-Bedingungen der select.<n> setzen Sie Platzhalter ein. Diese Platzhalter legen die Abhängigkeiten fest. Der Platzhalter @1:i@ ersetzt die erste Spalte aus den zugehörigen dependencies. Der Platzhalter @2:i@ ersetzt die zweite Spalte. Das i im Platzhalter steht für den Datentyp, hier Integer. Die folgende Tabelle zeigt alle Datentypen.
Sie können auch Werte von Variablen verwenden. Erlaubt sind nur Variablen aus vorangegangenen Profilen oder Parameterwerte von HTTP-Triggern. Die Variablen müssen im Profil definiert sein. Beispiel: Sie definieren in der Konfigurationsdatei MSG_CALL_MYVAR=100. Der Wert der Variablen füllt dann den Platzhalter @100:i@.
WICHTIG Die Platzhalter-Nummer für Variablen darf nicht kleiner als 100 sein.
Kürzel | Datentyp |
|---|---|
i | Integer |
f | Float |
r | Real |
d | Date |
t | Timestamp |
s | String |
l | Long |
v | Boolean |
b | Blob |
x | Textstream |
Sie können auch den Zeitpunkt des letzten erfolgreichen Profilstarts in einer WHERE-Bedingung verwenden. Dafür stehen drei Platzhalter zur Verfügung.
Platzhalter | Bedeutung |
|---|---|
| Zeitpunkt des letzten Profillaufs als Timestamp. |
| Zeitpunkt des letzten Profillaufs als Date. |
| Zeitpunkt als formatierter String. Beispiel: |
WICHTIG @0:s#<template>@ wird nur einmal aufgelöst. Ein weiteres Vorkommen von @0:s#<template>@ mit einem abweichenden Template hat keinen Effekt. Stattdessen verwendet das System den zwischengespeicherten Wert des ersten Vorkommens. Beispiele für W3C-konformes Format: @0:s#yyyyMMdd'T'HH:mm:ss.SSS@ liefert z. B. 20260315T093045.123 für den 15.3.2026 um 09:30:45.123 Uhr. Die Kurzform @0:s# verwendet das system-interne W3C-Standardformat.
Beispiel
HINWEIS Sie können auch Systemkonstanten mit der Syntax %CONSTANT% verwenden.
WICHTIG Angenommen, Sie haben eine String-Variable MSG_CALL_MYVAR mit dem Inhalt 'USA','UK'. In der unten gezeigten Konfigurationsdatei definieren Sie MSG_CALL_MYVAR=100. Die SQL-Abfrage SELECT id, name FROM supplier WHERE country IN (@100:s@) funktioniert dann nicht.
Der Grund: Der Platzhalter repräsentiert einen String. Die Abfrage löst nicht zu SELECT id, name FROM supplier WHERE country IN ('USA','UK') auf. Stattdessen löst sie zu SELECT id, name FROM supplier WHERE country IN (''USA','UK'') auf.
Solche Abfragen lösen Sie nur über die dependencies, wie unten gezeigt. Der SQL-Konfigurations-Assistent unterstützt Sie dabei.
#
# Sample config file for DefaultSQLCron
#
#Which db connection to use
db_alias=hub
#You can define multiple pre- and post-statements here (separated by ";"), like:
#pre.statement=lock table table_a in exclusive mode;lock table_b in exclusive mode
#post.statement=
#Create CSV file for debugging - uncomment if needed.
#save_as_csv=/tmp/sqldump.csv
#For each row of select.0 create a new request (job) if param is set to true.
result.split=false
#If BLOB columns are selected, you may want to encode the content with Base64.
#encode_blob=true
#
#Here are the statements... must start with 0, step size is 1!
#
select.0=select 'A',id,name from order where date_at > @0:d@
select.1=select 'B',id,item_number from item where order_id = @1:i@
select.2=select 'C',id,text from item_text where item_id = @1:i@
#
#select.1 needs value (column at position 2) from statement 0 (select.0) for execution (join); multiple columns are separated by ','.
#select.2 needs value (column at position 2) from statement 1 (select.1) for execution (join); multiple columns are separated by ','.
#Offset for counting column positions is always 1. First dependency references to @1:xxx@, etc.
#Note: To use the time of the last time a cron job was executed, use tag @0:d@ or @0:t@ for date or timestamp.
#
dependencies.1=0:2
dependencies.2=1:2
#
#(Passed) variables can be used as well, if defined in the profile.
MSG_CALL_MYVAR=100
# This will replace filler @100:i@ in any SQL select statement by the integer value of the named variable.
#
#
#Use limit.xxx to limit the result set, e.g.
#limit.0 = 500
#will limit select.0 to 500 rows. If not set, no limit is given.
#If an SQL statement returns no results, you can define a dummy result instead.
#Define a valid CSV line with delimiter ';'.
#An example for a 'dummy' result for select.0:
#empty.0=A;0;NothingSie möchten drei Tabellen auslesen: order, item und item_text. Die Tabellen sind jeweils durch 1:n-Beziehungen verknüpft. Zu einem Auftrag (order) gehören beliebig viele Positionen (item). Zu einer Position gehören beliebig viele Positionstexte (item_text).
Die Tabelle order:
id | name | date_at |
|---|---|---|
10 | order_1 | 01.01.2014 |
11 | order_2 | 01.01.2014 |
Die Tabelle item:
id | item_number | order_id |
|---|---|---|
20 | item_1 | 10 |
21 | item_1 | 11 |
22 | item_2 | 11 |
Die Tabelle item_text:
id | text | item_id |
|---|---|---|
30 | text_1 | 20 |
31 | text_2 | 20 |
32 | text_3 | 22 |
Das System führt das erste SQL-Statement select.0 aus. Dabei ersetzt es die Variable @0:d@ durch das Datum des letzten Profildurchlaufs. Die Datenbank liefert folgendes Ergebnis:
A | 10 | order_1 |
A | 11 | order_2 |
Aus der ersten Zeile
A | 10 | order_1 |
der Ergebnismenge von select.0 entstehen die dependencies.1:
10 |
Das System führt select.1 mit den dependencies.1 aus:
B | 20 | item_1 |
Aus dieser Ergebnismenge entstehen die dependencies.2:
20 |
Das System führt select.2 mit den dependencies.2 aus:
C | 30 | text_1 |
C | 31 | text_2 |
Das System fasst die Ergebniszeilen zum ersten Teilergebnis zusammen:
A | 10 | order_1 |
B | 20 | item_1 |
C | 30 | text_1 |
C | 31 | text_2 |
Analog dazu verfährt das System mit der zweiten Zeile
A | 11 | order_2 |
der Ergebnismenge aus select.0.
Es entstehen die dependencies.1:
11 |
Dann liefert select.1:
B | 21 | item_1 |
B | 22 | item_2 |
Die dependencies.2 ergeben:
21 |
22 |
select.2 liefert für die erste Zeile von dependencies.2 kein Ergebnis. Für die zweite Zeile von dependencies.2 liefert select.2:
C | 32 | text_3 |
Das System fasst auch diese Ergebniszeilen zu einem weiteren Teilergebnis zusammen:
A | 11 | order_2 |
B | 21 | item_1 |
B | 22 | item_2 |
C | 32 | text_3 |
Das System erstellt aus den Teilergebnissen das Gesamtergebnis und übergibt es an das Profil:
A | 10 | order_1 |
B | 20 | item_1 |
C | 30 | text_1 |
C | 31 | text_2 |
A | 11 | order_2 |
B | 21 | item_1 |
B | 22 | item_2 |
C | 32 | text_3 |
Leerzeichen im Abfrage-Ergebnis (MSSQL/Informix)
Bei MSSQL- und Informix-Datenbanken bereinigt das System die Ergebniswerte von SQL-Aufrufen standardmäßig um vorangestellte und nachfolgende Leerzeichen. Mit dem Parameter skipTrimResultValues ändern Sie dieses Verhalten. Den Parameter setzen Sie in der Konfigurationsdatei des Datenbank-Alias.