SQL()
SQL() – SQL-Statement im Codeblock definieren
Die Funktion SQL() kann zum Öffnen von SQL-Abfragen verwendet werden. Der Parameter dieser Funktion ist ein SQL-Statement, dessen Syntax NICHT über den Codeblock geprüft wird. Das Statement wird nicht als String eingegeben, sondern als SQL-Text, d.h. ohne Anführungszeichen. SQL-Text ist ein eigenständiger Typ (S) und zu keinem anderen Codeblock-Typ kompatibel.
Über die Funktion SQLDefaults() können Eigenschaften definiert werden, die bei der Ausführung berücksichtigt werden (Owner-Objekt, ADS-Connection und Open-Modus).
Hinweis
Ein SQL-Text kann Parameter enthalten, die automatisch ersetzt werden sollen.
Ein '&'-Zeichen leitet einen Parameter ein. Ein Parameter ist definiert als:
1) ein Bezeichner
SQL(Select kdnr from &aMyTableName where kdnr = 4711)
2) ein Funktionsaufruf
SQL(Select kdnr, name1, name2 from &.DbSqlTableName(1) where kdnr = 4711)
3) ein geklammerter Ausdruck
SQL(Select * from &@Dab000 where kdnr = &(aKdNr + 1) )
Die Parameter werden unmittelbar vor Ausführung des SQL-Statements berechnet. Für die möglichen Ergebnis-Typen einer Parameterberechnung gilt:
Ist das Ergebnis eine Zahl, wird diese als Zahl in den SQL-Text eingefügt.
Ist das Ergebnis ein Text, wird dieser im Statement automatisch in Anführungszeichen gestellt.
Dies kann unterbunden werden, indem unmittelbar nach dem '&'-Zeichen ein '.' geschrieben wird.Ist das Ergebnis ein logischer Wert, wird entweder True oder False eingesetzt.
Ist das Ergebnis ein Datum, wird ein Text in der Form 'YYYY-MM-DD' erzeugt.
Ist das Ergebnis ein Objekt, wird eine Exception ausgelöst.
Ein Sonderfall ist der Parameter &@<Alias>. Diese Kombination dient dazu, den Namen einer Tabelle als Parameter einzusetzen.
Im SQL-Statement wird nur während der Optimierung nach Parametern gesucht. Zur Laufzeit werden lediglich die Parameter berechnet und eingesetzt.
Die Position eines Parameters entscheidet über die Reihenfolge der Berechnung. Wird das Zeichen '&' direkt in einem Statement benötigt, muss es doppelt angegeben werden. Die Syntax innerhalb eines Parameters muss regulärer Codeblock-Code sein. Ein fehlerhafter Parameter führt zu einem Syntaxfehler.
ACHTUNG: Diese Funktion kann nicht in globalen Codeblock-Funktionen verwendet werden. Aufgrund der internen Codeblock-Struktur ist dies nicht möglich. Bitte SQL direkt per Query.SQL zuweisen.
Parameter | Beschreibung |
---|---|
aStatement:S | SQL-Statement |
Rückgabewert
SQL-Query-Objekt (Typ TBeAdsQuery)
Beispiel
| nStart, nStop, oQuery, aOrder |
WriteLn(SQLEngine()),
nStart := 70000,
nStop := 80000,
aOrder := 'PLZORT',
oQuery := SQL(Select LiNr, Name1, Name2, Strasse, PlzOrt
From &.DbSqlTableName(waDab100)
Where Linr >= &(nStart) And Linr <= &( nStop)
Order By &(aOrder)
),
startseq,
while not EoF(oQuery) do
WriteLn(oQuery:PlzOrt, oQuery:LiNr, oQuery:Name1),
DBSkip(1, oQuery),
end,
always,
DestroyObject(oQuery)
stopseq,