63 votes

Favori SQLPLUS trucs et astuces

Tant de fois j'ai juste besoin d'une connexion rapide à un Oracle DB, SQLPLUS traite la tâche.

J'imagine que quand les gens commencent à l'aide de Oracle, la première chose qu'ils ont dit à faire est d'installer un Crapaud ou SQLDeveloper. Même si, parfois, vous ne voulez pas attendre pour les outils à charge, si vous effectuez des requêtes simples.

J'ai un script que j'ai exécuté lorsque je démarre mon shell si je reçois une meilleure expérience:

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';

J'ai coupé mon "COLONNE" paramètres pour cet exemple, mais, fondamentalement, que l'aide à l'ajustement des données sur l'écran.

Réglage de la date format simplifie vraiment traiter avec les dates.

Lorsque la fenêtre de commande s'ouvre dans Windows, j'ai mis la fenêtre propriétés de mise en page afin que je puisse faire défiler, avoir une fenêtre plus large, etc. et enregistrer les paramètres pour l'avenir de windows.

Quelqu'un d'autre utiliser SQLPLUS quotidien? Des conseils à donner?

55voto

Dana Points 530

Vous pouvez utiliser rlwrap pour ajouter readline soutien à sqlplus. Exécuter sqlplus comme ceci:

$ rlwrap -c sqlplus username@database

Maintenant haut/bas pour faire défiler l'historique des commandes. Utilisez ctrl-r pour rechercher vers l'arrière à travers l'histoire, etc. Cela rend sqlplus supportable.

Aussi, ajoutez ceci à votre de connexion.sql pour définir la linesize quelle que soit la largeur de votre terminal:

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

Deux de ces conseils ne fonctionnent que sur unix.

17voto

Tony Andrews Points 67363

Oui, j'utilise SQL Plus chaque jour, de préférence à Crapaud ou SQL Developer (même si j'ai aussi utiliser SQL Developer pour parcourir la base de données).

J'ai la suite dans ma connexion.script sql (SQL Plus s'exécute automatiquement):

1) Remplacer la valeur par défaut de l'éditeur (bloc-notes) avec l'un de mes choix:

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

2) Faire invite SQL afficher la base de données de nom donc je sais où je suis (merci à Tom Kyte pour cela):

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

... ainsi que d'autres paramètres similaires à la vôtre.

Je trouve aussi Tom Kyte est print_table procédure très utile.

10voto

APC Points 69630

Rappelez-vous que nous pouvons mettre ces paramètres dans la connexion.sql script qui sera exécuté automatiquement chaque fois que nous commençons à SQL*Plus. En savoir plus.

La chose intéressante à ce sujet est que, depuis 10g, ce script est exécuté à chaque fois que nous nous connectons, mais seulement la première fois que nous avons le feu jusqu'à 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>

8voto

Rob van Wijk Points 11088

J'utilise SQL*Plus exclusivement pour travailler avec Oracle. D'autres réponses déjà donner quelques très pratique de connexion.sql contenu.

C'est mon login.sql. J'ai copié quelques suggestions de Tom Kyte et William Robertson. Peut-être que vous trouverez des choses que vous voulez utiliser.

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

En ce qui concerne, Rob.

3voto

dpbradley Points 7496

Je trouve qu'il est très pratique d'utiliser SQL*Plus de la colonne des variables dans les directives - par exemple, je suis souvent dans une session et souhaitez la bobine à un nouveau nom de fichier afin d'éviter d'écraser un autre journal qui peut déjà exister et de faire cela (les trois premiers états à travers un @fichier):

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

Je vais ensuite trouver le nouveau journal en les triant par le temps - vous pouvez toujours utiliser une stratégie autre que le nombre aléatoire si vous préférez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X