SQLcl

SQLcl e' un'interfaccia a linea di comando per accedere alla base dati Oracle.

Rispetto allo storico comando SQL*Plus presenta notevoli vantaggi:

E molto altro ancora... continuate a leggere!

SQLcl nasce da una costola di SQL Developer, ottima GUI free di Oracle, ed utilizza lo stesso numero di versione. E' tuttavia installabile e utilizzabile come strumento a se stante da tutti coloro cui serve un'interfaccia da linea di comando.

Questo documento presenta in modo semplice e pratico i principali aspetti dell'SQLcl organizzati nei seguenti capitoli: Installazione, Esempi, Varie ed eventuali.

Installazione

L'installazione di SQLcl e' banale. Basta scaricare il software dal sito ufficiale!

Si tratta di un'applicazione Java che comprende tutto, quindi non e' necessaria nessuna altra installazione (eg. SQL*Net, Oracle Instant Client) se non un'interprete Java recente.

La directory /bin contiene gli script di lancio utilizzabili da MS-Windows, Unix, Linux, Mac OSX, ... basta inserirla nel PATH ed SQLcl e' immediatamente utilizzabile.

SQLcl by example

Una volta installato SQLcl e' immediatamente utilizzabile:

$ sql /nolog SQLcl: Release 4.2.0 Production on Fri Oct 28 08:09:26 2016 Copyright (c) 1982, 2016, Oracle. All rights reserved. SQL> help For help on a topic type help <topic> List of Help topics available: / @ @@ ACCEPT ALIAS APEX APPEND ARCHIVE_LOG BRIDGE BTITLE CD CHANGE CLEAR COLUMN COMPUTE CONNECT CTAS DDL DEFINE DEL DESCRIBE DISCONNECT EDIT EXECUTE FORMAT GET HISTORY HOST INFORMATION INPUT LIST LOAD OERR PASSWORD PAUSE PRINT PROMPT QUIT REMARK REPEAT REST RUN SAVE SCRIPT SET SHOW SHUTDOWN SODA SSHTUNNEL START STARTUP STORE TIMING TNSPING TTITLE UNDEFINE WHENEVER XQUERY SQLcl shortcuts: ^r run ^a start of line ^e end of line ^w goto top ^s goto bottom

Con HELP vengono riportati i comandi, che sono tutti quelli dell'SQL*Plus, e, sottolineati ed evidenziati in neretto, i nuovi comandi disponibili in SQLcl.

Per la connessione al database Oracle SQLcl supporta tutte le modalita' [NdA EZConnect, TNS, LDAP, Proxy G/Login.SQL, SSH tunnel, -oci]:

sql scott/tiger@db01.xenialab.it:1521/TESTDB

SQLcl implementa in modo completo ed esatto tutti i comandi SQL*Plus. Ogni eventuale differenza e' considerata un bug: ogni script realizzato con SQL*Plus, compresi quelli utilizzati con funzionalita' di reporting o con l'uso di variabili o qualsiasi altro comando interno, restituisce esattamente lo stesso risultato se lanciato con SQLcl.

Le funzionalita' di editing dell'SQL*Plus sono sempre state pittosto limitate [NdE anche perche' l'SQL*Plus e' nato al tempo degli editor di linea]. Da molti era utilizzato l'RLWRAP ma SQLcl fa molto di piu'. In SQLcl e' presente un'HISTORY completa di tutti i comandi selezionabili da tastiera. Non lo descrivo qui perche'... e' piu' facile da provare che da documentare!

I nuovi comandi di SQLcl estendono comandi precedenti di SQL*Plus o semplificano il lancio dei comandi SQL: INFO fornisce molte piu' informazioni del classico DESCR di SQL*Plus, SET consente l'impostazione delle variabili d'ambiente SQL*Plus ed SQLcl (eg. SET SQLFORMAT ANSICONSOLE), CTAS per eseguire un Create Table As Select, DDL per ottenere i comandi DDL, ALIAS per memorizzare comandi complessi, SCRIPT per lanciare script realizzati con linguaggi esterni (eg. JavaScript, Python, ...), BRIDGE per accedere ad istanze differenti, FORMAT per definire i formati di default, OERR descrive i codici d'errore Oracle, NET permette di assegnare codici abbreviati alle connessioni, ...
Continuando l'elenco vi sono comandi relativi a funzionalita' specifiche: APEX, REST, SODA, ...

REPETITA JUVANT

Uno dei nuovi comandi piu' interessanti e' il REPEAT. Basta avere un comando memorizzato e lanciare il REPEAT:

1* select to_char(sysdate, 'HH24:MI:SS YYYY-MM-DD') che_ora_e from dual; CHE_ORA_E ------------------- 07:42:18 2016-09-16 SQL> repeat 6 10
Il risultato e' quello di ripetere lo stesso comando il numero indicato di volte:
Running 2 of 6 @ 7:42:43.921 with a delay of 10s CHE_ORA_E 07:42:43 2016-09-16

La ripetizione di comandi SQL consente di costruire utili monitor. Tra i tanti esempi possibili sicuramente questo e' uno dei piu' significativi:

select s.sid ,s.serial# serial, s.sql_id, p.spid "OS proc.",
       s.username "Username",
       case when s.status = 'ACTIVE' then last_call_et else null end "Wait",
       decode(s.command,2,'Insert',3,'Select',6,'Update',7,'Delete',44,'Commit',
         45,'Rollback' ,46,'Savepoint',47,'PL/SQL Exec',0,'No command','Other') "Command",
       s.machine "Machine", s.osuser "OS User", lower(s.status) "Status",
       s.program "Program"
  from gv$session s, gv$process p
 where s.USERNAME is not null
   and nvl(s.osuser,'x') <> 'SYSTEM'
   and s.type <> 'BACKGROUND'
   and s.paddr = p.addr
   and s.inst_id = p.inst_id
 order by 6 desc, 7 desc;
REPEAT 10 5

La query, ricavata dai molti ottimi esempi su internet dei programmatori stessi ( Kris Jeff ) e dagli script ora2html riporta tutte le sessioni utente presenti sulla base dati Oracle lasciando per ultime quelle attive. In questo modo si controllano agevolmente DB anche con centinaia di sessioni.

L'esempio seguente invece riporta il contenuto dell'alert:

SELECT To_Char(Originating_Timestamp, 'DD-MON-YYYY HH24:MI:SSxFF') "Timestamp",
       substr(message_text, 0, 110) "Message Text"
  FROM X$dbgalertext
 WHERE rownum < 11
 ORDER BY Originating_Timestamp DESC;
REPEAT 10 1

Naturalmente possono essere utilizzate query specifiche per riportare altre informazioni sistemistiche o accedere alle tabelle applicative...

Il titolo del paragrafo? Ho un collega che ama le frasi in latino e quelle che contengono la parola JUV...

Varie ed eventuali

Il primo rilascio di produzione come tool distinto da SQL*Developer [4.2 disponibile dal 2016-09-16] ha introdotto nuovi potenti comandi (eg. REPEAT): e' assolutamente consigliato! [NdE nuovo rilascio di SQLcl il 2016-11-03]:

SQL> set sqlformat ansiconsole SQL> set sqlprompt "@|red S🎃 L|@> " S🎃L> select * from dual;
[NdA il supporto unicode e dei colori c'era gia' ;-]

Questa pagina e' solo un'introduzione, vi sono parecchi funzionalita' che non sono state descritte o che richiederebbero una descrizione molto piu' ampia: formati di output, JavaScript, Cloud Support, gestione dei colori, ...

Per finire... SQLcl e' stato sviluppato dai programmatori di SQL Developer: show sqldev2


Titolo: SQLcl
Livello: Medio (2/5)
Data: 16 Settembre 2016
Versione: 1.0.1 - 31 Ottobre 2016 🎃 Halloween
Autore: mail [AT] meo.bogliolo.name