Skip to main content
Skip table of contents

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
   

CODE
SQL(Select kdnr from &aMyTableName where kdnr = 4711)

 
2) ein Funktionsaufruf
   

CODE
SQL(Select kdnr, name1, name2 from &.DbSqlTableName(1) where kdnr = 4711)


3) ein geklammerter Ausdruck
   

CODE
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: 

  1. Ist das Ergebnis eine Zahl, wird diese als Zahl in den SQL-Text eingefügt.

  2. 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.

  3. Ist das Ergebnis ein logischer Wert, wird entweder True oder False eingesetzt.

  4. Ist das Ergebnis ein Datum, wird ein Text in der Form 'YYYY-MM-DD' erzeugt.

  5. 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

CODE
| 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,

Weitere Verknüpfungen


JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.