[Закрываются] любимые подсказки SQLPLUS и приемы

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

, Например, я предпочитаю.....

<?xml version="1.0" encoding="utf-8"?>
<data>
    <people>
        <person name="Rory" surname="Becker" age="30" />
        <person name="Travis" surname="Illig" age="32" />
        <person name="Scott" surname="Hanselman" age="34" />
    </people>
</data>

... Вместо....

<?xml version="1.0" encoding="utf-8"?>
<data>
    <people>
        <person>
            <name>Rory</name>
            <surname>Becker</surname>
            <age>30</age>
        </person>
        <person>
            <name>Travis</name>
            <surname>Illig</surname>
            <age>32</age>
        </person>
        <person>
            <name>Scott</name>
            <surname>Hanselman</surname>
            <age>34</age>
        </person>
    </people>
</data>

Однако, если у меня есть данные, которые не представляют легко в, говорят 20-30 символов, или содержит много кавычек или другие символы, для которых нужен выход тогда, я сказал бы, что пора вспыхнуть элементы... возможно с блоками CData.

<?xml version="1.0" encoding="utf-8"?>
<data>
    <people>
        <person name="Rory" surname="Becker" age="30" >
            <comment>A programmer whose interested in all sorts of misc stuff. His Blog can be found at http://rorybecker.blogspot.com and he's on twitter as @RoryBecker</comment>
        </person>
        <person name="Travis" surname="Illig" age="32" >
            <comment>A cool guy for who has helped me out with all sorts of SVn information</comment>
        </person>
        <person name="Scott" surname="Hanselman" age="34" >
            <comment>Scott works for MS and has a great podcast available at http://www.hanselminutes.com </comment>
        </person>
    </people>
</data>
60
задан 3 revs, 3 users 100% 17 September 2009 в 15:11
поделиться

6 ответов

Здесь '

17
ответ дан 24 November 2019 в 17:49
поделиться

Я использую 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
8
ответ дан 24 November 2019 в 17:49
поделиться

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

Самое интересное в том, что начиная с версии 10g этот скрипт запускается каждый раз, когда мы подключаемся, а не только при первом запуске 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>
10
ответ дан 24 November 2019 в 17:49
поделиться

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

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

где query.sql -

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

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

4
ответ дан 24 November 2019 в 17:49
поделиться

Я считаю, что удобно использовать переменные столбца 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

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

3
ответ дан 24 November 2019 в 17:49
поделиться

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

$ rlwrap -c sqlplus username@database

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

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

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

Только оба этих совета работать на unix.

55
ответ дан 24 November 2019 в 17:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: