Funktion Mit der CallSQL-Anweisung können Sie SQL-Funktionen für GuiXT Tabellenvariablen verwenden.
Beispiele

Weitere Beispiele und Erläuterungen
CallSQL "DELETE FROM V[items] WHERE remove = 'X' "

In der Tabellenvariablen V[items] werden alle Zeilen gelöscht, die in Spalte "remove" ein "X" haben.


CallSQL customerinfo =  _
  "SELECT c.account, c.name, c.city, co.countryname " && _ 
  "FROM V[customers] AS c LEFT OUTER JOIN V[countries] AS co " && _ 
   "ON c.country = co.country" 


In die Tabellenvariablen V[customerinfo] werden die angegebenen Spalten aus V[customers] kopiert und zusätzlich der passende Ländername "countryname" aus der Tabellenvariable V[countries] gesetzt.
Format CallSQL "SQL Anweisung"
CallSQL varname = "SQL Anweisung"

Mit beiden Notationen wird die SQL Anweisung ausgeführt, wobei als Tabellennamen GuiXT Tabellenvariablen in der Notation V[varname] genannt werden. Das Resultat der Anweisung wird, falls angegeben, in die Resultatvariable gestellt, die in der Regel ebenfalls eine Tabellenvariable ist. Falls eine Strukturvariable als Resultat angegeben ist, wird nur die erste Zeile der Resultatmenge gelesen und in die Strukturvariable gestellt. Die Angabe einer einfachen Variablen (nicht Struktur oder Tabelle) ist nur in Verbindung mit "SELECT count(*) FROM ..." möglich.

Als SQL-Engine verwendet GuXT SQLite, dessen Syntax weitgehend dem SQL-Standard entspricht. Bitte beachten Sie bei eigenen Spaltennamen wie z.B. "order", dass die in SQL reservierten Namen in eckige KLammen eingeschlossen werden. Beispiel:

CallSQL selorders = "SELECT [order] FROM V[orders] WHERE selected = 'X' "

Bei SELECT ist die Resultatmenge die gemäss SQL definierte neue Tabelle, bei UPDATE und DELETE sind es die geänderten bzw. gelöschten Zeilen, und Anweisungen wie "CREATE INDEX" haben keine Resultatmenge.

Mit Q[ok] können Sie abfragen, ob die SQL-Anweisung erfolgreich ausgeführt wurde. In GuiXT-Systemfeldern (siehe unten) finden Sie dann weitere Informationen.
Optionen mode="createFromResult"

Die Resultatvariable wird mit den Spaltennamen der Resultatmenge der SQL-Anweisung automatisch mit CreateTable passend angelegt.  Es ist also kein eigenes CreateTable davor erforderlich.


mode=
"appendRows"

Die Zeilen der Resultatmenge werden an die angegebene Tabellenvariable angehängt.


mode="updateCells"

Die Werte der Resultatmenge ersetzen die entsprechenden Zelleninhalte der Tabellenvariable. Sie können dadurch z.B. gezielt eine einzelne Spalte einer Tabellenvariablen füllen.

mode=""

Der Default-Modus, falls nicht angegeben oder leer, ist wie oben beschrieben das Füllen der Resultatvariablen. Hierbei werden die Spaltennamen der SQL-Resultattabelle den Spalten der Resultatvariablen über ihren Namen zugeordnet. Alle anderen Spalten bleiben leer.
Spezielle SQL Funktionen Alle in SQLite verfügbaren SQL Funktionen wie concat(), replace(),... können über CallSQL genutzt werden. Eine Liste verfügbarer Funktionen finden Sie auf
https://sqlite.org/lang_corefunc.html.

Zusätzlich stehen die folgenden speziellen GuiXT Funktionen zur Verfügung, die in gleicher Weise wie die SQLite Standardfunktionen in der SQL Anweisung verwendet werden können. Ahch eine Kombination der SQLite-Funktionen mit GuiXT-Funktionen ist überall in der SQL-Anweisung möglich.


guixtValue(varname, format)

Die Funktion hat zwei Parameter: den Variablennamen sowie das gewünschte Format. Die GuiXT Variable mit dem angegebenen Namen wird ausgewertet und, falls angegeben, in das SQL-Format konvertiert:
  • "Text" oder keine Angabe
    Keine Konvertierung

  • "ISODate"
    Jeder zurückgegebene String in einem der in SAP unterstützen Formate dd.MM.yyyy,  MM/dd/yyyy, MM-dd-yyyy, yyyy.MM.dd, yyyy/MM/dd wird in das ISO Format yyyy-MM-dd konvertiert, das auch von SQLite in speziellen Datumsfunktionen erwartet wird.
    Das ISO-Datum ist sortierfähig, sodass z.B.
    CallSQL "SELECT ... ORDER BY GuiXTConvert(audat, "ISODate")"  
    eine korrekte Sortierung herstellt, auch wenn die Spalte "audat" das Datum in der Form "dd.MM.yyyy enthält.
    Bei einem ungültigen Datum wird der SQL-Wert NULL gesetzt.

  • "Real"
    Der zurückgegebene String  wird in eine SQLite "Real" Zahl konvertiert, wobei das aktuell in GuiXT gesetzte Dezimaltrennzeichen Punkt oder Komma beachtet wird.
    Bei einer ungültigen Angabe wird der SQL-Wert NULL gesetzt.

  • "Integer"
    Der zurückgegebene String  wird in eine SQLite "Integer" Zahl konvertiert, wobei das aktuell in GuiXT gesetzte Dezimaltrennzeichen Punkt oder Komma beachtet und kaufmännisch gerundet wird.
    Bei einer ungültigen Angabe wird der SQL-Wert NULL gesetzt.

  • "toLower"
    Der zurückgegebene String wird in Kleinbuchstaben umgesetzt.

  • "toUpper"
    Der zurückgegebeneString wird in Großbuchstaben umgesetzt.

Es ist empfehlenswert, bei dynamischen Werten in einer WHERE-Bedingung nicht mit '&V[...]' zu arbeiten, sondern mit guixtValue(). Beispiel:

... WHERE company = '&V[companyname]'

Bei dem direkten Einsetzen des Variablenwertes durch '&V[...]' erfolgt keine Verdoppelung des Zeichens ' innerhalb des Strings, und damit kann eine ungültige SQL-Anweisung entstehen. Stattdessen:

... WHERE company = guixtValue('companyname')

Damit wird der Variablenwert nicht als Literal eingefügt, sondern erst bei der Interpretation der SQL-Anweisung an SQLite übergeben.

guixtConvert(value, format)

Die Funktion hat zwei Parameter: den zu konvertierenden Wert und das gewünschte Format. Folgende Formate sind möglich:
  • "ISODate"
    Jeder String in einem der in SAP unterstützen Datumsformate dd.MM.yyyy,  MM/dd/yyyy, MM-dd-yyyy, yyyy.MM.dd, yyyy/MM/dd wird in das ISO Format yyyy-MM-dd konvertiert, das auch von SQLite in speziellen Datumsfunktionen erwartet wird. Es ist sortierfähig, sodass z.B. Bei einer ungültigen Angabe wird der SQL-Wert NULL gesetzt.
    CallSQL "SELECT ... ORDER BY GuiXTConvert(audat, "ISODate")"
    eine korrekte Sortierung herstellt, auch wenn die Spalte "audat" das Datum in der Form "dd.MM.yyyy enthält.
    Bei einem ungültigen Datum wird der SQL-Wert NULL gesetzt.

  • "Real"
    Der angegebene Wert wird in eine SQLite "Real" Zahl konvertiert, wobei das aktuell in GuiXT gesetzte Dezimaltrennzeichen Punkt oder Komma beachtet wird. Damit können Sie numerische Vergleiche durchführen oder die Aggegatfunktionen SUM(),... nutzen.
    Bei einer ungültigen Angabe wird der SQL-Wert NULL gesetzt.

  • "Integer"
    Der angegebene Wert wird in eine SQLite "Integer" Zahl konvertiert, wobei das aktuell in GuiXT gesetzte Dezimaltrennzeichen Punkt oder Komma beachtet und kaufmännsich gerundet wird. Damit können Sie numerische Vergleiche durchführen oder die Aggegatfunktionen SUM(),... nutzen.
    Bei einer ungültigen Angabe wird der SQL-Wert NULL gesetzt.

  • "toLower"
    Der angegebene Wert wird in Kleinbuchstaben umgesetzt.

  • "toUpper"
    Der angegebene Wert wird in Großbuchstaben umgesetzt.


guixtProcess(proc, value1, value2, value3)

Die Funktion kann mit zwei, drei oder vier Parametern aufgerufen werden. Der erste Parameter ist der Name eines "process" Scripts; dieses wird von GuiXT wie bei dem Schlüsselwort "process" aufgerufen. Es werden 1-3 Werte als Parameter übergeben und der Return-Wert der process-Funktion an SQL als Funktionswert zurückgegeben.  Beispiel:

"SELECT vbeln,posnr,matnr..."

Ergebnis:
3974  000010  TG12
1804  000010  MZ-FG-C990
1804  000020  EWMS4-20             
"SELECT vbeln,guixtProcess('no_leading_zeros', posnr) as posnr,matnr..."

Ergebnis:
3974  10  TG12
1804  10  MZ-FG-C990
1804  20  EWMS4-20             
Für jeden Wert in der Spalte "posnr" wird das GuiXT-Script "process_no_leading_zeros.txt" während der SQL-Verarbeitung aufgerufen:
GuiXT
Parameter str

// remove leading zeros
Set V[str2] "&V[str]" regex="[^0].*"

// return result
Return  "&V[str2]"
Systemfelder V[_sqlrowcount]
Anzahl der zurückgelieferten Zeilen

V[_sqlchangecount]

Anzahl der geänderten Zeilen

V[_sqlerrortext]

Fehlertext im Fehlerfall, z.B. falsche SQL-Syntax. Der Text wird auch im Script Editor angezeigt.

V[_sqlstatement]

Das SQL-Statement (nur im Fehlerfall).
Tips & Tricks
Komponente GuiXT + Controls