Oracle

目次

SQL文(小技)

指定件数selectしたい

userdataテーブルのレコードを5件検索したいんです!という時。

SQL> select * from USERDATA where rownum between 1 and 5;

UID        NAME BIRTHDAY
---------- ---- -----------
0000000001 KKTK 18-MAR-1983
0000000002 HGYS 13-NOV-1980
0000000003 NJAR 21-FEB-1983
0000000004 STKK 28-DEC-1982
0000000005 YMNY 08-AUG-1981

レコードを誕生日順にソートして尚且つ5件だけ表示させたいの!という場合はこんな感じ。

SQL> select * from (select UID, NAME, BIRTHDAY from 
  2  (select * from USERDATA order by BIRTHDAY))
  3  where rownum between 1 and 5;

UID        NAME BIRTHDAY
---------- ---- -----------
0000000002 HGYS 13-NOV-1980
0000000005 YMNY 08-AUG-1981
0000000004 STKK 28-DEC-1982
0000000003 NJSR 21-FEB-1983
0000000001 KKTK 18-MAR-1983

これで5人の中でKKTKが一番若いって事が分かる訳です。非常に画期的!


データ・ディクショナリ

ALL_SOURCE/DBA_SOURCE/USER_SOURCE

ストアド・オブジェクトのテキスト・ソースを表示。

SQL> desc user_source
Name            Null?    Type
-------------- -------- ----------------------------
NAME                     VARCHAR2(30)
TYPE                     VARCHAR2(12)
LINE                     NUMBER
TEXT                     VARCHAR2(4000)

エラー

ここを見るのが一番早いかも
oracleのアカウントを持ってる人はここが便利かも

上記以外
・ORA-00933: SQL command not properly ended
→SQL コマンドが正しく終了されていません。

メモ

SQL*Loader

SQL*Loaderで大量にデータを投入する際の留意点メモ。
・UNDO領域の領域不足
→デフォルトで64行毎にcommitされるので、1レコード長*64以上の領域が必要。

・アーカイブREDOログファイルの肥大

※ 尚、ダイレクト・パスモードで実行する場合は、上記について考慮する必要無し。


columnコマンド

ある特定の列の表示属性を指定する。表示属性は以下のとおり。
・列見出しのテキスト
・列見出しの文字位置
・数値データのフォーマット
・列データの折返し

構文
column [{column|expr} [option ...]]
optionは幾つかあるが、今回は業務で必要なもののみ記載。

format
列の表示フォーマットを指定する。
usernameカラムの長さ(表示)を10にしたい場合は以下のとおり。
SQL> column username format a10

rownum

件数を指定してする。
とりあえずここ参照

おまじない

set lines n
→結果の1行の文字数をnに設定する。
set pages n
→結果の1ページの行数を指定する。
set feed {n|OFF|ON}
→問い合わせがn件以上だった場合に、戻される行数を表示する。 set echo on/off
→入力文のエコー表示をするかどうかの設定を変更する。

TRUNCATE TABLE

データの件数の関係なく非常に高速にデータを削除することができる。
また、HWM(High Water Mark)をリセットできる。
SQL> TRUNCATE TABLE テーブル名

※HWMって何?って人はGoogleに…