Oracle SQL Developer Command Line (SQLcl)
Ulrike Schwinn |
![]() |
Seit September steht das neue Werkzeug Oracle SQL Developer Command Line (kurz SQLcl) zum Download von OTN zur Verfügung. Am 3. November gab es das erste Update dazu, das einige Bugfixes und kleinere neue Features enthält (siehe Release Notes unten). Grund genug, dass wir einen kleinen Bericht zu dem Thema publizieren. Wozu eignet sich SQLcl? SQLcl könnte man als "kleinen" Bruder des graphischen Werkzeugs SQL Developer bezeichnen: Es vereinigt dabei die Vorteile eines Linemode Werkzeugs mit den Features von SQL Developer. Da die Software von SQLcl schon seit geraumer Zeit im sogenannten "Early Adopter" Status zur Verfügung stand, gibt es auch schon Einiges dazu im Web zu lesen - nicht zuletzt auch vom SQL Developer Produktmanagement (siehe Informationen unten). In den folgenden Abschnitten will ich daher einige Grundlagen vermitteln und einige meiner Lieblingsfunktionen an kurzen Beispielen demonstrieren. Ansonsten gilt besonders auch hier - einfach selbst einmal ausprobieren.
Installation und Grundlagen
SQLcl Release 4.2 ist auf Windows 7, 8, 10 und Windows Server 2008/2012, Linux und Mac OS X verfügbar. Die vollständige Liste der Zertifizierung findet sich unten im letzten Kapitel. Voraussetzung zur erfolgreichen Nutzung ist zudem noch die Java Runtime Engine (JRE) 8. Die Installation ist dann ähnlich wie bei SQL Developer: Einfach Zip Datei von OTN laden und in einen leeren Folder auspacken. Die Zip Datei hat dabei eine Größe von 17 MB. Nun startet man das Programm SQL aus dem Verzeichnis "\bin" in einer Terminal cmd Session und schon kann es losgehen.SQLcl Kommandos - meine Favoriten
Wie oben schon erwähnt gibt es schon Einiges im Internet zum Thema SQLcl zu lesen, daher möchte ich mich auf einige ausgewählte Kommandos konzentrieren, die mir besonders nützlich erscheinen. Zuerst aber das wichtigste Kommando überhaupt - nämlich "help". Das Kommando help ohne Zusatz gibt einen Überblick über alle möglichen SQLcl Kommandos. Wie man aus der Liste entnehmen kann, unterstützt SQLcl fast alle wichtigen SQL*Plus Kommandos. Die zusätzlich hervorgehobenen Kommandos sind die neuen SQLcl spezifische Kommandos. Die Helpfunktion liefert nicht nur einen Überblick über fast alle verfügbaren Kommandos; sondern gibt auch eine genaue Beschreibung der einzelnen Kommandos. Im oberen Kapitel haben wir dies schon anhand der Funktion sshtunnel demonstriert. Bevor wir uns einige dieser Kommandos genauer ansehen, noch ein paar Informationen zur allgemeinen Nutzung von SQLcl. Wichtig zu wissen ist sicherlich, dass man ohne zusätzlich einen Editor einzubinden innerhalb eines Kommandos beliebig In-Line editieren kann. Dies erleichtert die Angabe natürlich ungemein. Auch gibt es wie bei SQL Developer automatisch eine Historie der Kommandos (bis zu 100). Diese kann entweder mit der Pfeiltaste (nach unten oder oben) oder über das Kommando history erreicht werden. history full zeigt dabei die vollständige Liste, "history mit Zeilenangabe" gibt das entsprechende Kommando aus. Aber schauen wir uns einfach das history Kommando selbst an.SQL> help history HISTORY --------- history [Auch abgeschaut vom SQL Developer ist die "Tab Completion" Funktion, die Objektnamen, Schlüsselworte und vieles mehr mithilfe der Tab Taste vervollständigen kann.| FULL | USAGE | SCRIPT | TIME | CLEAR (SESSION)?] | F SQL>history full 1 select 1 from dual; 2 select 2 > from dual; 3 select 3 from dual > where 1=1; SQL>history usage 1 (2) select 1 from dual; 2 (11) select 2 from dual; 3 (2) select 3 from dual where 1=1; SQL>history script select 1 from dual; select 2 from dual; select 3 from dual where 1=1; SQL>history 3 1 select 3 from dual 2* where 1=1; SQL>his time 1 clear 2 cl bre 3 (00.201) select 1 from dual SQL>his fails This determines if the history will show failures or not
SQL>oerr ora 2290 02290. 00000 - "check constraint (%s.%s) violated" *Cause: The values being inserted do not satisfy the named *Action: do not insert values that violate the constraint.Das Kommando information gibt Informationen über ein Tabellenobjekt aus. Vergleicht man die Ausgabe mit describe, kann man festellen, dass das Resultat, die Beschreibung des Objekts, viel umfangreicher ist. So erhält man nicht nur Informationen über die Spalten, sondern auch über zugehörige Indizes. Auch die Größenordung der Tabelle (Anzahl der Zeilen) wird ausgegeben. Folgendes Beispiel zeigt eine Ausgabe.
SQL>information scott.emp TABLE: EMP LAST ANALYZED:2016-08-18 14:05:02.0 ROWS :14 SAMPLE SIZE :14 INMEMORY :ENABLED COMMENTS : Columns NAME DATA TYPE NULL DEFAULT COMMENTS *EMPNO NUMBER(4,0) No ENAME VARCHAR2(10 BYTE) Yes JOB VARCHAR2(9 BYTE) Yes MGR NUMBER(4,0) Yes HIREDATE DATE Yes SAL NUMBER(7,2) Yes COMM NUMBER(7,2) Yes DEPTNO NUMBER(2,0) Yes T NUMBER Yes D NUMBER Yes Indexes INDEX_NAME UNIQUENESS STATUS FUNCIDX_STATUS COLUMNS COLUMN_EXPRESSION SCOTT.PK_EMP UNIQUE VALID EMPNOVerwendet man information mit einem Index wird übrigens das verwendete CREATE INDEX Kommando ausgegeben. In unserem Beispiel überprüfen wir den Index SCOTT.PK_EMP.
SQL> info scott.pk_emp CREATE UNIQUE INDEX "SCOTT"."PK_EMP" ON "SCOTT"."EMP" ("EMPNO") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "USERS"Das Kommando set ermöglicht wie das analoge SQL*Plus Kommando etliche Voreinstellungen. Einige neue Einstellungen sind in SQLcl hinzugefügt worden. Verwendet man beispielsweise set sqlformat kann die Formatausgabe der nachfolgenden SQL Kommandos beeinflusst werden. Die einfachste Form ist set ansiconsole, mit der die Spaltenausgabe automatisch an die maximale Länge der Zeile angepasst werden, so dass die Ausgabe einfach zu lesen ist.
SQL> help set sqlformat SET SQLFORMAT SET SQLFORMAT { csv,html,xml,json,ansiconsole,insert,loader,fixed,default} SQL> set sqlformat ansiconsole SQL> select * from scott.emp 2 ; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO T D 7369 SMITH CLERK 7902 17.12.80 800 20 7499 ALLEN SALESMAN 7698 20.02.81 1600 300 30 7521 WARD SALESMAN 7698 22.02.81 1250 500 30 7566 JONES MANAGER 7839 02.04.81 2975 20 7654 MARTIN SALESMAN 7698 28.09.81 1250 1400 30 7698 BLAKE MANAGER 7839 01.05.81 2850 30 7782 CLARK MANAGER 7839 09.06.81 2450 10 7788 SCOTT ANALYST 7566 19.04.87 3000 20 7839 KING PRESIDENT 17.11.81 5000 10 7844 TURNER SALESMAN 7698 08.09.81 1500 0 30 7876 ADAMS CLERK 7788 23.05.87 1100 20 7900 JAMES CLERK 7698 03.12.81 950 30 7902 FORD ANALYST 7566 03.12.81 3000 20 7934 MILLER CLERK 7782 23.01.82 1300 10 14 rows selected.Interessant sind sicher auch die Formate LOADER, CSV oder auch INSERT bzw. JSON, HTML und XML, wie in den folgenden Beispielen zu sehen sein wird.
SQL> set ddl segment_attributes off DDL Option SEGMENT_ATTRIBUTES off SQL> set sqlformat insert SQL> ddl scott.emp CREATE TABLE "SCOTT"."EMP" ( "EMPNO" NUMBER(4,0), "ENAME" VARCHAR2(10), "JOB" VARCHAR2(9), "MGR" NUMBER(4,0), "HIREDATE" DATE, "SAL" NUMBER(7,2), "COMM" NUMBER(7,2), "DEPTNO" NUMBER(2,0), "T" NUMBER, "D" NUMBER, CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO") USING INDEX ENABLE, CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO") REFERENCES "SCOTT"."DEPT" ("DEPTNO") ENABLE ) INMEMORY PRIORITY NONE MEMCOMPRESS FOR QUERY LOW DISTRIBUTE AUTO NO DUPLICATE ; SQL> select * from emp fetch first 5 rows only; REM INSERTING into EMP SET DEFINE OFF; Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,T,D) values ('7369','SMITH','CLERK','7 902',to_timestamp('17.12.80','DD.MM.RR HH24:MI:SSXFF'),'800',null,'20',null,null); Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,T,D) values ('7499','ALLEN','SALESMAN' ,'7698',to_timestamp('20.02.81','DD.MM.RR HH24:MI:SSXFF'),'1600','300','30',null,null); Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,T,D) values ('7521','WARD','SALESMAN', '7698',to_timestamp('22.02.81','DD.MM.RR HH24:MI:SSXFF'),'1250','500','30',null,null); Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,T,D) values ('7566','JONES','MANAGER', '7839',to_timestamp('02.04.81','DD.MM.RR HH24:MI:SSXFF'),'2975',null,'20',null,null); Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,T,D) values ('7654','MARTIN','SALESMAN ','7698',to_timestamp('28.09.81','DD.MM.RR HH24:MI:SSXFF'),'1250','1400','30',null,null);Zum Abschluss möchte ich noch ein weiteres nützliches Kommando demonstrieren: das Kommando repeat. Wie der Name schon andeutet, kann man damit automatisch SQL Kommandos wiederholen. Dabei lässt sich die Gesamtanzahl und die Abstände zwischen den Ausführungen definieren. So kann man einfach die Inhalte einer bestimmten Tabelle überwachen. Interessant zu beobachten ist beispielsweise die View V$SESSION_LONGOPS, die langaufende Statements und Operationen im laufenden Betrieb anzeigt. Die Verwendung von REPEAT erfolgt nach der Ausführung eines Statements. Unser simples Beispiel nutzt die Ausgabe der Funktion systimestamp. Das Kommando soll im Abstand von 1 Sekunde 15 mal ausgeführt werden.
SQL> help repeat repeatDie dritte Ausführung sieht nun folgendermassen aus.Repeats the current sql in the buffer the specified times with sleep intervals Maximum sleep is 120s SQL> select systimestamp from dual; SYSTIMESTAMP ---------------------------------- 04.11.16 15:09:04,106286000 +01:00 SQL>repeat 15 1
Hinweis zur Lizenzierung
Das SQL Developer Linemode Utility kann wie auch SQL Developer kostenfrei von OTN geladen und verwendet werden. Keine zusätzliche Lizenzierung ist erforderlich.
Weitere Informationen
Zurück zum Anfang des Artikels
Zurück zur Community-Seite