2009-09-17 3 views
60

Так много раз мне просто нужно быстрое соединение с Oracle DB, где SQLPLUS обрабатывает задание.Избранные подсказки и трюки SQLPLUS

Я предполагаю, что когда люди начинают использовать Oracle, первое, что им говорят, это установить Toad или SQLDeveloper. Тем не менее, иногда вы не хотите ждать загрузки этих инструментов, если выполняете некоторые простые запросы.

У меня есть сценарий, который я бегу, когда я начинаю свою оболочку, так что я получить лучший опыт:

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

Я обрезаны мой «КОЛОННА» настройки для этого примера, но в основном, что помогает данные помещаются на экран.

Установка формата даты действительно упрощает работу с датами.

Когда окно командной строки открывается в Windows, я устанавливаю свойства макета окна, чтобы я мог прокручивать, иметь более широкое окно и т. Д. И сохранять настройки для будущих окон.

Кто-нибудь еще использует SQLPLUS каждый день? Какие-нибудь советы?

+1

@ThiefMaster Я согласен, что этот вопрос не подходит для обычного формата вопроса. Но это вообще не вызвало споров. Это очень полезный и очень конструктивный список подсказок и трюков SQLPlus. Так зачем его закрывать? –

+0

Заново закрыт с лучшей причиной :) Он должен оставаться закрытым. Но это не значит, что он удален! – ThiefMaster

+3

эта близкая причина тоже чепуха. возможно, в ответах есть какое-то мнение, но это все полезные советы по предмету, который трудно найти. Я не понимаю, от чего нас защищают эти вопросы, которые, очевидно, полезны для закрытия. Хотелось бы, чтобы было правило, что вопросы с 5+ upvotes не могут быть закрыты –

ответ

17

Да, я использую SQL Plus каждый день, предпочитая Toad или SQL Developer (хотя я также использую SQL Developer для просмотра базы данных).

У меня есть следующие в моем login.sql сценарий (который SQL Plus работает автоматически):

1) Replace по умолчанию редактор (Notepad) с одним из моего выбора:

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

2) Сделать SQL имя базы данных приглашение показать, так что я знаю, где я (спасибо Тома Кайта для этого):

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 

... плюс другие настройки похожи на ваши.

Я также считаю, что процедура Tom Kyte's print_table очень полезна.

+2

Спасибо за добавление, «который SQL Plus запускается автоматически». – Upperstage

+0

Ссылка не действительна! – atom

3

Я считаю, что удобно использовать переменные столбца SQL * Plus в директивах - например, я часто участвую в сеансе и хочу связывать с новым именем файла, чтобы избежать перезаписывания другого журнала, который может уже существовать, и сделать это (первые три заявления через @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 

Я потом найти новый журнал сортировкой по времени - вы всегда могли бы использовать какую-то стратегию, отличную от случайного числа, если вы предпочитаете.

10

Помните, что мы можем поместить эти параметры в скрипт login.sql, который будет запускаться автоматически при запуске SQL * Plus. Find out more.

Аккуратный вещь об этом, что, так как 10г, этот скрипт запускается каждый раз, когда мы соединяемся, а только первый раз, когда мы запустим 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

Да, автоматический запуск login.sql после повторного подключения - хорошее улучшение в 10g. Но фиксация «чистого экрана» зависает в этой версии, поэтому для меня это либо 9, либо 11. –

+0

Я пошел прямо с 9i до 11g, поэтому я не знал об этой особенности 10g. – APC

+0

слово «commit» должно быть «командой» в моем первом комментарии –

4

Мне нравится использовать SQLPlus в автономном режиме.

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

где запрос.sql is

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

Поэтому я могу получить информацию из базы данных в файлах bat/script в windows или unix.

8

Я использую SQL * Plus исключительно для работы с Oracle. Другие ответы уже дают очень удобное содержимое login.sql.

Это мой login.sql. Я скопировал некоторые предложения от Тома Ките и Уильяма Робертсона. Возможно, вы найдете некоторые вещи, которые хотите использовать.

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

Вы можете использовать rlwrap, чтобы добавить поддержку readline в sqlplus. Запустите sqlplus следующим образом:

$ rlwrap -c sqlplus [email protected] 

Теперь вверх/вниз будет прокручиваться история команд. Используйте ctrl-r для поиска назад по истории и т. Д. Это делает sqlplus терпимым.

Кроме того, добавьте в ваш login.sql установить linesize к тому, что ширина вашего терминала:

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

Оба эти советы работают только на UNIX.

+0

rlwrap только что сделал мой день. Спасибо, Дана – Kirby

+0

Спасибо за трюк с линиями. rlwrap, который я уже использовал. Оба они также работают на Mac OSX, с небольшой разницей вы должны использовать 'cut -f6' вместо' cut -f7' (или использовать 'HOST echo" set linesize "$ (stty -a | head -1 | awk '{ print $ 6} ')> .tmp.sql') – Johanna

+0

Если вы используете дистрибутив Debian (Debian/Ubuntu/Mint и т. д.), вы можете просто выполнить 'apt-get install rlwrap' (проверенный на Ubuntu 14.04 и 16.04) , – labyrinth

Смежные вопросы