1 SQL*Plus 1.1 Allgemeines SQL*Plus ist die interaktive SQL Schnittstelle des Oracle-Systems. Die typische Verwendung von SQL*Plus ist es, ad hoc-Anfragen einzugeben und sich das Ergebnis direkt auf dem Bildschirm anzuschauen. Dafür sind folgende Merkmale von SQL*Plus interessant: • Es gibt einen eingebauten Zeileneditor für die Korrektur fehlerhafter SQL-Anfragen. Alternativ kann man ein beliebiges Programm als Editor aufrufen, insbesondere auch den emacs. • Die Ausgabe kann auf verschiedene Arten formatiert werden. (Für kompliziertere Formatierungen ist der SQL*ReportWriter gedacht). • SQL*Plus verfügt über einen eingebauten Hilfemechanismus. • Es ist möglich, ein Protokoll der SQL*Plus-Sitzung führen zu lassen, das dann in eine Datei oder auf den Drucker ausgegeben wird. Es ist aber auch möglich, wiederkehrende SQL-Anweisungen in eine Datei abzuspeichern, und diese Datei dann mehrfach auszuführen. Dies ist in etwa mit den Batch-Dateien in MS-DOS oder den Shell-Skripten unter UNIX vergleichbar. • Da man nur selten exakt dieselbe Kommandofolge mehrfach ausführen will, sind solche Programmdateien parametrisierbar. Dazu bietet SQL*Plus Parameter, deren Wert gesetzt und abgefragt werden kann. • Natürlich sind auch einfache Ein- und Ausgaben möglich (Falls man dagegen interaktive Bildschirmmasken oder ähnliches wünscht, muß man SQL*Forms benutzen.). • Auch an Kommentare wurde gedacht. • Sprünge (Bedingungen und Schleifen) sind in der Spracherweiterung PL/SQL vorgesehen (siehe Kapitel 4). 1 1.2 Minimal-Anleitung SQL*Plus wird unter UNIX mit dem Kommando sqlplus aufgerufen. Es sind dann Benutzername und Passwort (für die Datenbank) einzugeben. Dann müßte nach der Ausgabe einiger Oracle-Versionsnummern “SQL>” als Prompt erscheinen. SQL-Kommandos können sich bei SQL*Plus über mehrere Zeilen erstrecken, das Ende der Eingabe muß daher durch ein Semikolon “;” gekennzeichnet werden (Fortsetzungszeilen werden durch einen Prompt der Form “2”, “3” u.s.w. angezeigt). Auf die Groß- und Kleinschreibung kommt es nicht an (außer in String-Konstanten). Eine laufende Datenbank-Anfrage kann mit “bC” abgebrochen werden (SQL*Plus wird dadurch nicht beendet). Allerdings werden anstehende Ausgaben noch ausgeführt, bevor die Unterbrechung wirksam wird. Außer den im vorherigen Abschnitt beschriebenen SQL-Kommandos gibt es noch spezielle SQL*Plus Kommandos. Diese enden am Zeilenende (müssen also nicht mit “;” abgeschlossen werden), es sei denn, die Zeile endet mit einem Bindestrich “-”. SQL*Plus kann durch Eingabe von exit oder quit beendet werden. 1.3 Systemeinstellungen Es gibt viele Möglichkeiten, SQL*Plus seinen eigenen Wünschen anzupassen. Dazu gibt es die Systemvariablen, deren Werte mit set hSystemvariablei hWerti gesetzt werden, und mit show hSystemvariablei angezeigt werden (show all zeigt alle Variablen an). Eine kleine Auswahl: • Mit set pagesize hZeileni kann man die Anzahl der Zeilen einer Seite setzen, mit set linesize die Länge einer Ausgabezeile. • Mit set echo on wird nicht nur das Ergebnis, sondern auch die Anfrage ausgegeben; dies kann insbesondere bei Kommandodateien sinnvoll sein. • Mit set pause on und set pause hTexti erreicht man, dass nach jeder vollen Ausgabeseite der hTexti ausgegeben und auf einen Tastendruck gewartet wird. 2 • set timing on bewirkt, dass am Ende jedes SQL-Kommandos die für die Bearbeitung verwendete Zeit in Millisekunden angezeigt wird. • set wrap off bewirkt, dass eine Zeile am Ende abgeschnitten statt umgebrochen wird. Befehle, die bei jedem Start von sqlplus automatisch ausgeführt werden sollen, müssen im Arbeitsverzeichnis in der Datei login.sql abgespeichert werden. 1.4 Kommandodateien Ist abzusehen, dass man SQL- oder SQL*Plus-Anweisungen mehrmals ausführen möchte, empfiehlt es sich, diese in einer Datei hDateinamei.sql abzuspeichern. Diese Anweisungen werden mit start hDateinamei oder kurz @hDateinamei ausgeführt. Eventuelle Parameter werden dahinter angegeben: start hDateinamei hArgumenti . . . . Auf diese Argumente kann mit “&1” u.s.w. zugegriffen werden. Kommentare werden durch rem oder remark eingeleitet und erstrecken sich bis zum Zeilenende. Mit prompt hTexti kann ein Text auf den Bildschirm ausgegeben werden. Eingaben werden mit accept hVariablei hTypi prompt hTexti hEchoi angefordert. Dabei ist hTypi number oder char (oder gar nichts), hTexti wird als Eingabeaufforderung ausgegeben, und hEchoi ist mit hide anzugeben setzen, wenn man ein Passwort oder ähnliches eingeben will und die Eingabe dabei nicht angezeigt werden soll. 1.5 SQL*Plus-Hilfesystem und verschiedene nützliche Kommandos • Mit alter user <Benutzername> identified by <Neues Passwort>; können Sie Ihr Oracle-Passwort ändern. • Die eingebaute Hilfe von SQL*Plus kann mit “help hKommandoi” abgerufen werden. Bei help commands wird eine Liste aller Kommandos ausgegeben, help help gibt eine Übersicht über die verfügbaren 3 Hilfestellungen. Schließlich listet help examples eine Liste von Beispielen auf, die man sich anschauen kann. • Mit “host hKommandoi” wird der UNIX Befehl hKommandoi ausgeführt. Z.B. kann man sich mit “host ls -l ∗.sql” etwa alle SQL-Dateien im aktuellen Verzeichnis anzeigen lassen. Eine detaillierte Beschreibung der Oracle-Fehler liefert das UNIX-Kommando oerr (für OracleError). Es wird mit einer 3-stelligen Zeichenkette und der Fehlernummer aufgerufen, z.B. host oerr ORA 01001. • Die Beschreibung der Spalten (Attribute) einer Tabelle kann man sich mit “desc[ribe] hTabellei” ausgeben lassen. • Die Ausgaben von SQL*Plus kann man mit “spool hDateinamei” in die Datei hDateinamei.lst schreiben lassen, mit spool off beendet man dieses Protokoll. • Mit copy kann man ganze Tabellen kopieren, z.B. würde copy from scott/tiger create EMPL using select ∗ from EMP; die Tabelle EMP des Benutzers “scott” mit Passwort “tiger” in die gleichzeitig neu angelegte Tabelle EMPL (des aktuellen Benutzers) kopieren. 1.6 Ändern der letzten Eingabe Falls man sich vertippt hat, kann man den in SQL*Plus eingebauten Zeileneditor benutzen, da die letzte SQL-Anweisung in einem Puffer zwischengespeichert wird: • “l” (list) zeigt den aktuellen Pufferinhalt an (und setzt die aktuelle Zeile, welche durch “*” markiert ist, auf die letzte Pufferzeile). • “l hZeilennummeri” setzt die aktuelle Pufferzeile, auf die angegebene Zeile. • “c/halter Stringi/hneuer Stringi/” (change) ersetzt das erste Vorkommen von halter Stringi durch hneuer Stringi (in der aktuellen Pufferzeile). • “a hTexti” (append) hängt hTexti an die aktuelle Zeile an. 4 • “i” (input) fügt mehrere Zeilen Text nach der aktuellen Zeile in den Puffer ein, der Pufferinhalt wird nach Eingabe eines Semikolons ausgeführt. • “del” (delete) löscht die aktuelle Pufferzeile. • “r” (run) führt den aktuellen Pufferinhalt aus. • “/” führt auch den aktuellen Pufferinhalt aus (zeigt ihn aber vorher nicht an). • “get hDateinamei” liest den Inhalt der Datei hDateinamei in den Puffer. • “save hDateinamei” schreibt den Inhalt des Puffers in die Datei namens hDateinamei. Mit edit kann man einen richtigen Editor aufrufen, dem der Pufferinhalt in der Datei afiedt.buf übergeben wird. Nach Abschluß der Editor-Sitzung kann man das Ergebnis mit “r” ausführen. Der verwendete Editor kann mit “define _editor = hProgrammi” ausgewählt werden, insbesondere kann man also auch den emacs, jove oder vi verwenden. 1.7 Formatierung der Ausgabe SQL*Plus erlaubt verschiedene einfache Formatierungen von Anfrageergebnissen. Es ist aber zu beachten, dass diese Setzungen nicht im System abgespeichert werden, also beim Verlassen von SQL*Plus verloren gehen, es sei denn, sie werden in der Datei login.sql abgespeichert. Der Befehl column hSpaltennamei hOption1i hOption2i . . . bezieht sich auf die Formatierung von Spalten, wobei hSpaltennamei auch ein beliebiger Ausdruck der select-Liste sein kann). Die wichtigsten Optionen sind: • format Ahni bewirkt, dass die (string-wertige) Spalte in Zukunft mit der Breite hni ausgegeben wird. Für zahl-wertige Spalten gibt es noch viele Formate, z.B. würde “format 99,999.99” fünf Stellen vor dem Dezimalpunkt und zwei danach anzeigen, und, falls mehr als drei Stellen vor dem Dezimalpunkt stehen, diese durch ein Komma abtrennen. 5 • Falls der Spalteninhalt zu lang für die mit format gewählte Darstellung ist, kann man noch zwischen wrapped (in der nächsten Zeile fortsetzen), word_wrapped (in der nächsten Zeile fortsetzen, aber nur bei Leerzeichen trennen) und trunc (Rest unterdrücken) wählen. • Mit heading hTexti kann man die Spaltenüberschrift wählen, sie kann sich auch über mehrere Zeilen erstrecken, die man mit “|” trennt. • Der Text, der in dieser Spalte für einen Nullwert ausgegeben wird, läßt sich mit null htexti festlegen. • Mit column hSpaltennamei clear läßt sich die Spaltendefinition wieder löschen. 1.8 Benutzervariablen SQL*Plus verwaltet Benutzervariablen, die mit define hVariablei = hWerti gesetzt werden können. Das Kommando define (ohne Argumente) zeigt alle Variablen an. In SQL-Anweisungen wird dann jeweils “&hVariablei” bzw. “&&hVariablei” durch den Wert dieser Variable ersetzt. Falls die Variable noch nicht definiert ist, wird der Wert interaktiv abgefragt (bei “&hVariablei” immer wieder, bei “&&hVariablei” nur einmal, d.h. es findet eine implizite Zuweisung an diese Variable statt). Ein “&” kann man eingeben, indem man ein “\” voranstellt, (siehe show escape), vorher muß man aber set escape on eingeben. Falls nach dem Variablennamen kein Leerzeichen folgt, kann man den Variablennamen auch mit “.” beenden (siehe show concat). 6