2009-09-17 20 views
60

Tantas veces solo necesito una conexión rápida a Oracle DB, donde SQLPLUS maneja el trabajo.Trucos y consejos favoritos de SQLPLUS

Imagino que cuando las personas comienzan 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 corro cuando comienzo mi concha por lo que obtener 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'; 

¿arreglé mi "columna" configuración de este ejemplo, pero en el fondo, que ayuda a los datos se ajustan en 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?

+1

@ThiefMaster Estoy de acuerdo con que esta pregunta no se ajusta al formato de pregunta habitual. Pero no levantó un debate en absoluto. Es una lista muy útil y muy constructiva de consejos y trucos de SQLPlus. Entonces, ¿por qué cerrarlo? –

+0

Re-cerrado con una razón mejor :) Debe permanecer cerrado. ¡Pero eso no significa que se elimine! – ThiefMaster

+3

este motivo cercano es una tontería también. tal vez parte de la opinión está involucrada en las respuestas, pero estos son todos consejos útiles sobre un tema que es difícil de encontrar. No entiendo de qué estamos siendo protegidos con estas preguntas que obviamente son útiles para cerrarlas. Desearía que hubiera una regla para que las preguntas con más de 5 votaciones ascendentes no se pudieran cerrar –

Respuesta

17

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 el siguiente en mi guión login.sql (que se ejecuta automáticamente SQL Plus):

1) Sustituir editor por defecto (Bloc de notas) con uno de mi elección:

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

2) Hacer SQL pronta espectáculo nombre de la base así que sé donde estoy (gracias a Tom Kyte para 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 otro valor similar a la suya.

También encuentro el procedimiento de Tom Kyte print_table muy útil.

+2

Gracias por agregar, "qué SQL Plus se ejecuta automáticamente". – Upperstage

+0

¡El enlace está roto! – atom

3

Creo 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 un nuevo nombre de archivo para evitar sobrescribir otro registro que ya existe y hacer esto (las tres primeras declaraciones a través de un @file):

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 

voy a continuación, encontrar el nuevo registro de la clasificación por tiempo - siempre se podría utilizar alguna estrategia que no sea el número aleatorio, si lo prefiere.

10

Recuerde que podemos poner estas configuraciones en el script login.sql que se ejecutará automáticamente cada vez que iniciemos SQL * Plus. Find out more.

Lo bueno de esto es, que desde 10g, este script se ejecuta cada vez que nos conectamos más bien sólo la primera vez que encender encima de 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> 
+0

Sí, el funcionamiento automático de login.sql después de una reconexión es una buena mejora en 10g. Pero la confirmación de "pantalla clara" se cuelga en esa versión, por lo que para mí es 9 o 11. –

+0

He pasado directamente de 9i a 11g, por lo que no estoy al tanto de esa característica particular de 10g. – APC

+0

la palabra "commit" debe ser "comando" en mi primer comentario –

4

me gusta usar sqlplus en fuera de línea.

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

donde consulta.sql es

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

Así puedo obtener información de la base de datos en mis archivos bat/script en windows o unix.

8

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 
55

Puede usar rlwrap para agregar soporte de lectura a sqlplus. Ejecute sqlplus como este:

$ rlwrap -c sqlplus [email protected] 

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, agregue esto a su login.sql para establecer el LINESIZE a lo que el ancho de la terminal es:

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

Ambos de estos consejos sólo funcionan en UNIX.

+0

rlwrap acaba de hacer mi día. Gracias, Dana – Kirby

+0

Gracias por el truco linesize. rlwrap que ya estaba usando. Ambos también funcionan en Mac OSX, con la pequeña diferencia tienes que usar 'cut -f6' en lugar de' cut -f7' (o usa 'HOST echo' set linesize" $ (stty -a | head -1 | awk '{ print $ 6} ')> .tmp.sql') – Johanna

+0

Si está en una distribución basada en Debian (Debian/Ubuntu/Mint, etc.) puede hacer 'apt-get install rlwrap' (probado en Ubuntu 14.04 y 16.04) . – labyrinth

Cuestiones relacionadas