2009-09-17 15 views
60

Tyle razy potrzebuję szybkiego połączenia z bazą danych Oracle, w której SQLPLUS obsługuje zadanie.Ulubione porady i triki SQLPLUS

Wyobrażam sobie, kiedy ludzie zaczynają używać Oracle, pierwszą rzeczą, którą im każą, jest zainstalowanie Toad lub SQLDeveloper. Mimo to czasami nie chcesz czekać na załadowanie tych narzędzi, jeśli wykonujesz proste zapytania.

Mam skrypt, który uruchamiam kiedy zaczynam moją skorupę więc lepiej doświadczenie:

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

I przycięte mój „kolumna” ustawienia dla tego przykładu, ale w zasadzie, która pomaga dane zmieszczą się na ekran.

Ustawienie formatu daty bardzo upraszcza obsługę dat.

Po otwarciu okna poleceń w systemie Windows ustawię właściwości układu okna, aby można było przewijać, mieć szersze okno itp. I zapisywać ustawienia dla przyszłych okien.

Czy ktoś inny używa SQLPLUS codziennie? Jakieś wskazówki?

+1

@ ThiefMaster Zgadzam się, że to pytanie nie pasuje do zwykłego formatu pytania. Ale w ogóle nie wywołało to żadnej debaty. Jest to bardzo pomocna i bardzo konstruktywna lista porad i trików SQLPlus. Dlaczego więc to zamknąć? –

+0

Ponownie zamknięty z lepszego powodu :) Powinien pozostać zamknięty. Ale to nie znaczy, że zostało usunięte! – ThiefMaster

+3

ten bliski powód to też nonsens. może niektóre opinie są związane z odpowiedziami, ale są to pomocne wskazówki na trudny do znalezienia temat. Nie rozumiem, przed czym chronimy się tymi pytaniami, które są oczywiście pomocne w zamknięciu. Chciałbym, żeby istniała zasada, że ​​pytania z 5+ upvotes nie mogą być zamknięte –

Odpowiedz

17

Tak, każdego dnia korzystam z SQL Plus zamiast Ropucha lub programisty SQL (choć do przeglądania bazy danych używam również programisty SQL).

Mam następujących w moim skrypcie login.sql SQL Plus (który uruchamia się automatycznie):

1) zastąpić domyślny edytor (Notepad) z jednym z mojego wyboru:

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

2) Marka SQL szybka pokaz nazwa bazy danych, więc wiem, gdzie jestem (dzięki Tom Kyte do tego):

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 

... plus inne ustawienie podobne do Ciebie.

Bardzo przydatna jest również procedura Toma Kyte'a print_table.

+2

Dzięki za dodanie, "który SQL Plus działa automatycznie." – Upperstage

+0

Link jest uszkodzony! – atom

3

Uważam, że przydaje się używanie zmiennych SQL * Plus w dyrektywach - na przykład często jestem w sesji i chcę buforować do nowej nazwy pliku, aby uniknąć nadpisania innego dziennika, który może już istnieć i zrobić to (pierwsze trzy oświadczenia poprzez cewkę @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 

będę następnie znaleźć nowy dziennik sortując według czasu - zawsze można korzystać z niektórych strategii inny niż liczby losowej, jeśli wolisz.

10

Pamiętaj, że możemy ustawić te ustawienia w skrypcie login.sql, który będzie uruchamiany automatycznie za każdym razem, gdy uruchamiamy SQL * Plus. Find out more.

Schludny rzeczą jest to, że od 10g, ten skrypt jest uruchamiany za każdym razem, gdy tylko po raz pierwszy połączyć raczej możemy odpalić 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

Tak, automatyczne uruchamianie login.sql po ponownym połączeniu jest miłym ulepszeniem w 10g. Ale zatwierdzenie "wyczyść ekran" wisi w tej wersji, więc dla mnie jest to albo 9 albo 11. –

+0

Poszedłem prosto z 9i do 11g, więc nie znam tej konkretnej cechy 10g. – APC

+0

słowo "commit" powinno być "poleceniem" w moim pierwszym komentarzu –

4

Lubię używać sqlplus w trybie off-line.

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

gdzie zapytanie.SQL jest

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

więc mogę uzyskać informacje z bazy danych w moich plikach bat/skrypt w Windows lub UNIX.

8

Używam SQL * Plus wyłącznie do pracy z Oracle. Inne odpowiedzi dają już bardzo przydatne treści login.sql.

To jest moja login.sql. Skopiowałem tam kilka sugestii od Toma Kyte'a i Williama Robertsona. Może znajdziesz rzeczy, które również chcesz wykorzystać.

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

Możesz użyć rlwrap, aby dodać obsługę readline do sqlplus. Uruchom sqlplus w ten sposób:

$ rlwrap -c sqlplus [email protected] 

Teraz góra/dół przewija historię poleceń. Użyj ctrl-r do przeszukiwania wstecz historii, itp. To sprawia, że ​​sqlplus staje się znośny.

również dodać do swojej login.sql ustawić linesize aby cokolwiek szerokość terminala jest:

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

Oba te wskazówki działają tylko w systemie UNIX.

+0

rlwrap właśnie zrobił mój dzień. Dziękuję, Dana – Kirby

+0

Dzięki za sztuczkę linii. rlwrap już używałem. Oba działają również na Mac OSX, z niewielką różnicą musisz użyć 'cut -f6' zamiast' cut -f7' (lub użyj 'HOST echo 'set linesize" $ (stty -a | head -1 | awk "{ print $ 6} ')> .tmp.sql') – Johanna

+0

Jeśli korzystasz z dystrybucji opartej na Debianie (Debian/Ubuntu/Mint itp.) możesz po prostu zrobić "apt-get install rlwrap" (testowane na Ubuntu 14.04 i 16.04) . – labyrinth

Powiązane problemy