Das Modul SQLExt bietet Erweiterungen zum Modul SQL an, die den ODBC Konformitätsebenen 1, 2 und 3 entsprechen. Das vollständige Definitionsmodul befindet sich im Anhang .
Die Funktionen Columns, ColumnPrivileges, ForeignKeys, PrimaryKeys, TablePrivileges, Procedures, ProcedureColumns, SpecialColumns und Statistics liefern als Rückgabewert eine vorbereitete Anweisungsstruktur. Man kann diese Anweisungen anschließend ausführen und die Ergebnisse wie bei normalen SQL-Anweisungen bearbeiten (auf die einzelnen Felder der Ergebniszeilen zugreifen etc.). Die Namen der Funktionen deuten schon darauf hin, was die Ergebnismengen enthalten. Genaue Beschreibungen findet man in [ODBC94], Kurzbeschreibungen findet man im Anhang und erhält man auch durch die Ausführung des Kommandos Def.Show SQLExt.Mod.
An die Zeichenketten-Parameter kann man, wie erwartet, Zeichenketten übergeben, aber zum Beispiel auch den im Modul SQL definierten NullString ( SQL.nullString) oder, wenn der formale Parametername auf "` Pat"' (für engl. pattern = Suchmuster) endet, eine Zeichenkette mit den speziell behandelten Zeichen "`%"' (steht für beliebig viele beliebige Zeichen, entspricht dem Stern unter MS-DOS) und "`_"' (steht für ein beliebiges Zeichen, entspricht dem Fragezeichen unter MS-DOS). Die spezielle Behandlung des NullStrings ist notwendig, weil die Datenbanktreiber unterschiedlich reagieren, wenn man einen Zeiger auf eine leere Zeichenkette oder einen NIL-Zeiger als Aktualparameter übergibt. In der Regel muß man SQL.nullString verwenden, wenn man zum Beispiel die Namen der interessierenden Tabellen bei einem Aufruf von Tables nicht kennt.
Manche Datenbanktreiber unterstützen positioniertes Ändern und Löschen von Datensätzen. Dazu führt man zuerst eine Abfrage der Art "
SELECT * FROM Adresses FOR UPDATE"
aus, geht dann zum Datensatz, den man ändern oder löschen will (durch wiederholte Aufrufe von Fetch), und führt entweder die Anweisung "`UPDATE Addresses SET zipCode = ? WHERE CURRENT OF cursor"' oder "`DELETE FROM Addresses WHERE CURRENT OF cursor"' aus. Da unter ODBC die Cursor automatisch angelegt werden und man deren Namen nicht kennt, man sie aber in der Zeichenkette der SQL-Anweisung angeben muß, gibt es die Prozeduren GetCursorName und SetCursorName, mit denen man den Namen des Cursors einer SQL-Anweisung auslesen und ändern kann. cursor wäre in den oben angegebenen SQL-Anweisungen der für die SELECT-Anweisung von GetCursorName gelieferte Name.
Die Prozedur AppendType(conn, str, type) kann man verwenden, um die Zeichenkette für den Oberon-Datentyp type an die Zeichenkette str anzuhängen. Der Oberon-Datentyp type wird dazu abgebildet auf den entsprechenden Datenbankdatentyp, dessen Name (einschließlich der notwendigen Parameter) an die Zeichenkette angehängt werden.
Das folgende Programmstück erstellt die Zeichenkette einer CREATE-TABLE-Anweisung.
BEGIN
int.sqlType := SQL.OberonLongInt; int.prec := 0; int.scale := 0;
str.sqlType := SQL.OberonChar; str.prec := 32; str.scale := 0;
s :=
SQLExt.AppendType(conn, s, int);
Strings.Append(
SQLExt.AppendType(conn, s, str);
Strings.Append(
...
END
nnnnnn¯
VAR int, str: SQL.Type; s: ARRAY 256 OF CHAR;
"
CREATE TABLE Test (i "
;
"
, name "
, s);
"
)"
, s)
Die restlichen Prozeduren wurden der Vollständigkeit halber aufgenommen und werden hier nicht weiter beschrieben.