63

多くの場合、SQLPLUS がジョブを処理する Oracle DB にすばやく接続する必要があります。

人々が 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';

この例では「COLUMN」設定をトリミングしましたが、基本的には、データが画面に収まるのに役立ちます。

日付形式を設定すると、日付の扱いが本当に簡単になります。

Windows でコマンド ウィンドウが開いたら、ウィンドウ レイアウトのプロパティを設定して、スクロールしたり、ウィンドウを広げたり、将来のウィンドウのために設定を保存したりできるようにします。

SQL*Plus を毎日使用している人はいますか? 任意のヒント?

4

6 に答える 6

55

rlwrapを使用して、readline サポートを 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 でのみ機能します。

于 2009-09-23T02:54:34.943 に答える
17

はい、Toad や SQL Developer よりも SQL Plus を毎日使用しています (データベースの参照には SQL Developer も使用しています)。

login.sql スクリプト (SQL Plus は自動的に実行されます) には次のものが含まれています。

1) デフォルトのエディター (メモ帳) を選択したものに置き換えます。

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

2) SQL プロンプトにデータベース名を表示させて、自分がどこにいるかがわかるようにします (これについては Tom Kyte に感謝します):

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 のprint_tableプロシージャも非常に便利です。

于 2009-09-17T14:36:40.563 に答える
10

SQL*Plus を開始するたびに自動的に実行される login.sql スクリプトにこれらの設定を入れることができることを思い出してください。 詳細をご覧ください。

これの素晴らしい点は、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>
于 2009-09-17T14:56:41.080 に答える
8

私は SQL*Plus だけを使用して Oracle を操作しています。他の回答では、いくつかの非常に便利な login.sql コンテンツが既に提供されています。

これは私のlogin.sqlです。そこにある Tom Kyte と William Robertson からのいくつかの提案をコピーしました。使いたいアイテムも見つかるかもしれません。

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
于 2009-09-17T20:00:43.563 に答える
4

オフラインで 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;
/

したがって、WindowsまたはUNIXのbat / scriptファイルでデータベースから情報を取得できます。

于 2009-09-17T15:22:40.153 に答える
3

ディレクティブ内で SQL*Plus 列変数を使用すると便利だと思います。たとえば、セッション中に頻繁にセッションに参加していて、既存の別のログを上書きしないように新しいファイル名にスプールしてこれを実行したい場合 (最初の 3 つのステートメント@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

次に、時間で並べ替えて新しいログを見つけます。必要に応じて、乱数以外の戦略をいつでも使用できます。

于 2009-09-17T14:54:35.463 に答える