SQLcl - Commandline Tool neue Generation
Im Jahr 2014 haben die Entwickler des SQLDevelopers aus den Libraries des SQLDevelopers einen Ersatz für das in die Jahre gekommene SQL*Plus geschrieben: sqlcl. Es verhält sich annähernd wie SQL*Plus mit eingebauter Command Line History und Name Completion, die auf das Data Dictionary zugreift!
Es ist ein eigenständiges Projekt, man kann es hier herunterladen. Seit Oracle 12cR2 ist es auch fixer Bestandteil der Datenbank - allerdings ist die herunterladbare Version üblicherweise neuer als die Version, die mit der Datenbank mitkommt.
Da es (erwartungsgemäß) in Java geschrieben ist, läuft es unter jedem Betriebssystem. Das ist auch gleichzeitig sein größter Nachteil: Es ist in Java geschrieben, mit all den grässlichen Fehlermeldungsorgien und Verwicklungen, die sich durch diverse unpassende Java-Version ergeben. So darf man für die aktuelle Version 18.1.1 von sqlcl (Stand: 29.5.2018) nicht das JRE der Oracle 12.2 verwenden - das ist zu alt dafür
Es macht aber sonst einen recht stabilen Eindruck - mal sehen, ob Oracle es weiter unterstützt.
Was kann SQLcl?
Prinzipiell beherrscht SQLcl alle SQL*Plus Kommandos wie SPOOL, SET, EDIT, COLUMN usw. Die Entwickler haben darauf geachtet, möglichst kompatibel zu bleiben. Bis auf kleinere Patzer (z.B. versteht die COLUMN Anweisung keine Spaltennamen, die '$' oder '#' enthalten) ist das auch gut gelungen.
Command Line Editing: Die aus der Readline Library stammenden Editierfunktionen, die auch die bash verwendet, wurden emuliert: CTRL-A für Zeilenanfang, CTRL-E für Zeilenende, CTRL-D zum Löschen des Zeichens unter dem Curor, und natürlich die Cursortasten. Auch die Tabulatortaste kann die so unheimlich nützliche name completion: Ein unter dem Cursor liegendes Wort wird (wenn möglich) vervollständigt: Schlüsselworte, Spaltennamen, Funktionsnamen, ...
Schön:
SQLcl hat eine Menge Funktionalität vom SQLDeveloper mitbekommen:
-
FORMAT BUFFER
formatiert das SQL-Statement im Buffer nach eingbauten Regeln, die man sogar ändern kann!
-
SET SQLFORMAT { csv,html,xml,json,ansiconsole,insert,loader,fixed,default}
ändert das Ausgabeformat auf CSV (für Spreadsheats), XML, HTML, JSON, ...
-
APEX
listet vorhandene APEX-Applikationen
-
INFO[RMATION] tabelle
zeigt eine detaillierte Übersicht über eine Tabelle an: Spalten, Constraint, Indizes, usw
-
CTAS old new
erzeugt (CREATE TABLE AS SELECT) eine Kopie der Tabelle old; funktioniert nur im eigenen Schema.
-
OERR facility errornumber
das gute alte Commandline Tool oerr - jetzt eingebaut
-
SSHTUNNEL
errichtet einen SSH Tunnel auf eine andere Maschine - dieses Feature hat Potential!
Weniger schön:
-
Mit dem Bildschirmaufbau verhaspelt sich es manchmal, sodass unmotiviert Leerzeichen und -zeilen eingefügt werden. Nicht tragisch, aber lästig. Die Libraries sind an des "geschützte" Environment des SQLDeveloper gewöhnt!
-
Wenn sich der Cursor nicht am Ende der Zeile befindet, fügt die Return-Taste eine Zeilenumbruch ein anstatt das Kommando auszuführen. Das ist gewöhnungsbedürftig, aber vermutlich der darunterliegenden Editierfunktion des SQLDevelopers geschuldet.
-
Die unglaublich praktische Funktion CTRL-R der Bash (incremental Search in der Historie) gibt es nicht. Schade.
-
Interessanterweise verweigert sich SQLcl der mit Oracle 12.1.0.2 eingeführten Änderung bezüglich SQLPATH: SQLcl benutzt noch immer SQLPATH anstatt die neuere Einrichtung ORACLE_PATH (siehe Artikel SQL*Plus Command Line History).
FAZIT
Ein sehr brauchbares Tool, das zwar ein paar Inkompatibilitäten hat, mit denen man aber leben kann. Die Goodies wie SET SQLFORMAT, FORMAT BUFFER, SSHTUNNEL und INFO machen es aber hochinteressant. Alles im allem macht es einen sehr fertigen Eindruck.
Seit 12.2 wird das Tool mit der Datenbank fertg konfiguriert mit ausgeliefert. In $ORACLE_HOME/bin liegt ein Script namens sql.