reports plus generating from sql oracle sqlplus

generating - Trucos y consejos favoritos de SQLPLUS



set markup html on spool on (6)

Muchas veces solo necesito una conexión rápida a Oracle DB, donde SQLPLUS maneja el trabajo.

Me imagino que cuando las personas comiencen a usar Oracle, lo primero que se les dice que hagan es instalar Toad o SQLDeveloper. Aun así, a veces no quiere esperar a que se carguen esas herramientas, si está realizando algunas consultas simples.

Tengo un script que ejecuto cuando inicio mi shell para que tenga una mejor experiencia:

SET pagesize 2000 SET LONG 10000 SET linesize 1000 COLUMN last_name format a20 COLUMN total format 999,999,999 SET feedback ON alter session set nls_date_format = ''yyyy-mm-dd hh:mi:ssPM'';

Recorté mi configuración de "COLUMNA" para este ejemplo, pero básicamente, eso ayuda a que los datos se ajusten a la pantalla.

Establecer el formato de fecha realmente simplifica el manejo de las fechas.

Cuando se abre la ventana de comandos en Windows, establezco las propiedades de diseño de la ventana para poder desplazarme, tener una ventana más amplia, etc. y guardar la configuración para ventanas futuras.

¿Alguien más usa SQLPLUS diariamente? ¿Algun consejo?


Encuentro que es útil usar variables de columna SQL * Plus dentro de las directivas; por ejemplo, a menudo estoy en una sesión y quiero poner en cola un nuevo nombre de archivo para evitar sobrescribir otro registro que ya existe y hacer esto (primeras tres declaraciones) a través de un archivo @):

SQL> column spr new_value spoolref SQL> select user||''_''||abs(dbms_random.random) spr from dual; SQL> spool &spoolref ... do work here ... SQL> spool off

Luego encontraré el nuevo registro ordenando por tiempo; siempre puede usar alguna estrategia que no sea el número aleatorio, si lo prefiere.


Me gusta usar sqlplus en off-line.

sqlplus -S user/password @query.sql> file.txt

donde query.sql es

set feedback off verify off heading off pagesize 0 ...here goes a query... quit; /

Así que puedo obtener información de la base de datos en mis archivos bat / script en Windows o Unix.


Puede usar rlwrap para agregar soporte de lectura a sqlplus. Ejecute sqlplus de esta manera:

$ rlwrap -c sqlplus username@database

Ahora, arriba / abajo se desplazará por el historial de comandos. Use ctrl-r para buscar hacia atrás a través del historial, etc. Esto hace que sqlplus sea soportable.

Además, agréguelo a su login.sql para configurar el lineal a cualquier ancho que tenga su terminal:

HOST echo "set linesize" $(stty -a|head -n1|cut -f7 -d'' ''|cut -f1 -d'';'') > .tmp.sql @.tmp.sql HOST rm -f .tmp.sql

Ambos consejos solo funcionan en Unix.


Recuerde que podemos poner estas configuraciones en el script login.sql que se ejecutará automáticamente cada vez que iniciemos SQL * Plus. Saber más.

Lo bueno de esto es que, desde 10g, este script se ejecuta cada vez que nos conectamos en lugar de la primera vez que iniciamos SQL * Plus ...

SQL> conn apc Enter password: Connected. Running login script Session altered. SQL> conn scott Enter password: Connected. Running login script Session altered. SQL>


Sí, uso SQL Plus todos los días antes que Toad o SQL Developer (aunque también uso SQL Developer para navegar en la base de datos).

Tengo lo siguiente en mi script login.sql (que SQL Plus se ejecuta automáticamente):

1) Reemplace el editor predeterminado (Bloc de notas) con uno de mi elección:

define _editor = "C:/Program Files/TextPad 5/TextPad.exe"

2) Hacer que el mensaje SQL muestre el nombre de la base de datos para que sepa dónde estoy (gracias a Tom Kyte por esto):

COLUMN global_name new_value gname SET TERMOUT OFF SELECT LOWER(USER) || ''@'' || global_name||CHR(10)||''SQL> '' AS global_name FROM global_name; SET SQLPROMPT ''&gname'' SET TERMOUT ON

... además de otra configuración similar a la tuya.

También me parece muy útil el procedimiento print_table Tom Kyte.


Uso SQL * Plus exclusivamente para trabajar con Oracle. Otras respuestas ya dan algunos contenidos muy útiles de login.sql.

Este es mi login.sql . Copié algunas sugerencias de Tom Kyte y William Robertson allí. Quizás encuentres algunas cosas que quieras usar también.

set termout off set serveroutput on size unlimited set pagesize 50000 set linesize 135 set long 50000 set trimspool on set tab off def _editor = "C:/Progra~1/Notepad++/Notepad++.exe" define gname=idle column global_name new_value gname select lower(user) || ''@'' || substr(global_name,1,decode(dot,0,length(global_name),dot-1)) global_name from (select global_name,instr(global_name,''.'') dot from global_name); set sqlprompt ''&gname> '' alter session set nls_date_format = ''dd-mm-yyyy hh24:mi:ss'' / var sid number var serial# number var tracefile VARCHAR2(200) DECLARE v_audsid v$session.audsid%TYPE; BEGIN SELECT sid, serial#, audsid INTO :sid, :serial#, v_audsid FROM v$session WHERE audsid = SYS_CONTEXT(''USERENV'',''SESSIONID''); SELECT par.value || CASE WHEN par.value LIKE ''%/%'' THEN ''/'' ELSE ''/' END || LOWER(th.instance) || ''_ora_'' || LTRIM(TO_CHAR(pro.spid,''fm99999'')) || ''.trc'' AS filename INTO :tracefile FROM v$process pro , v$session se , v$parameter par , v$thread th WHERE se.audsid = v_audsid AND pro.addr = se.paddr AND par.NAME = ''user_dump_dest''; END; / BEGIN IF :sid IS NULL THEN SELECT sid INTO :sid FROM v$mystat WHERE rownum = 1; END IF; END; / set termout on set feedback off exec DBMS_OUTPUT.PUT_LINE(''Sessie: '' || :sid || CASE WHEN :serial# IS NULL THEN '' (no access to V$ tables)'' ELSE '','' || :serial# END) exec IF :tracefile IS NOT NULL THEN DBMS_OUTPUT.PUT_LINE(''Eventueel trace-bestand: '' || :tracefile); END IF prompt set feedback on