多くの場合、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でコマンドウィンドウが開いたら、ウィンドウレイアウトプロパティを設定して、スクロールしたり、ウィンドウを広げたり、将来のウィンドウ用に設定を保存できるようにします。
他の誰かがSQLPLUSを毎日使用していますか?任意のヒント?
rlwrap を使用して、readplusサポートをsqlplusに追加できます。次のようにsqlplusを実行します。
$ rlwrap -c sqlplus username@database
これで、上下にコマンド履歴がスクロールされます。 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でのみ機能します。
はい、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 プロシージャも非常に便利だと思います。
これらの設定は、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>
私は、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
オフラインで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ファイルでデータベースから情報を取得できます。
ディレクティブ内でSQL * Plus列変数を使用すると便利です。たとえば、セッション中に頻繁に新しいファイル名にスプールして、既に存在する可能性のある別のログを上書きしないようにします(最初の3つのステートメント@ファイルを介して):
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
次に、時間でソートして新しいログを見つけます。必要に応じて、乱数以外の戦略をいつでも使用できます。