Works > 逆引きSQL比較 > ORACLE > SQL
ORACLE [ SQL ]  [ データベースの情報 ]  [ 手続き型言語 ]  [ その他 ] 
■SQL

この項で使用するサンプルテーブルについて ▲TOP

日付型データをフォーマットして表示するには? ▲TOP

日付の演算あれこれ ▲TOP

INSERT時にキーを自動的に連番で振るには? ▲TOP

同一テーブル内の別の行にある情報を結合して検索するには? ▲TOP

結合条件に合致しなくてもすべての行を表示させるには? ▲TOP

SELECT文の中で条件分岐するには? ▲TOP

クロス集計の方法は? ▲TOP

最大値と等しいデータを検索するには? ▲TOP

AテーブルにあってBテーブルにないデータを検索するには? ▲TOP

上位n件を検索するには? ▲TOP

『グループ単位での』上位n件を検索するには? ▲TOP

ソートでNULL列の行の順番を上に(下に)するには? ▲TOP

Aテーブルの列の内容でBテーブルを更新するには? ▲TOP

近似値を求めるには? ▲TOP

グルーピングした時の合計や件数を条件にするには? ▲TOP

列の内容を16進(ヘキサダンプ)で表示するには? ▲TOP

階層問い合わせをするには? ▲TOP

デバッグ用縦表示リストSELECT文生成 ▲TOP
開発時に便利な縦表示の見やすいリストを作成するためのスクリプト

ROWNUM を使用した擬似スクロール・カーソル ▲TOP
ORACLE7では、次の様に rownum を between で括る事ができました
(パフォチュー的な観点から私は between 使いませんが)。 しかし、この手法は、ORACLE7以前のバージョンでのみ可能で、 ORACLE8からは使えなくなっています
(エラーにはならないが、結果は帰ってこない)。
 
現在の仕様だと、rownum は『取得した結果セットの何番目か』 と言う風にしか判断できないのです。
ですからORACLE8以降では しか通りません。
しかし、次の様にすればORACLE8でも可能です。 このスクリプト自体は、かなり昔 NIFTYのオラクル・ステーションSORACLE(まだステーションになってなかった頃?)
で拾ったものを参考にしています。
これは、SELECT文のみでスクロールカーソルの様な機能を実現します(n1 と n2 を任意の範囲でインクリメント/デクリメント すればよい)。 
もちろん、パフォーマンスは保証できるものではなく、本当のカーソルではありませんから フェッチ時(笑)の整合性も保証されませんし。スケーラビリティの面でもまったく好ましいものではありません。
 
但し、既存システムをORACLE7からORACLE8に変更した際に、ORACLE8でのROWNUM の仕様変更に苦しむような場合、 ここに書いた事が、ひょっとしたら逃げ道になるかもしれません。
 
因みに、某掲示板では次のような書かれ方をしていました。こちらの方が、 パフォーマンス的には良好です。

BLOB型のあいまい検索もどき ▲TOP
これは、BLOB型等のあいまい検索について某掲示板で回答した時のSQLです。 大きいオブジェクト型のデータ(例えば画像ファイル)の、『似ている度』 を判断して検索するための実装案です。 この引数 n のバイト数を調節して『0 なら似てる。以外は似てない』 と判断するわけです。
 
ファイルタイプがGIFのみ、とかであれば、この方法で何となく、 それらしい結果が得られるかもしれません。ただし、 『内容が似ていてもバイナリレベルではまったく異なる』ようなファイル (→例えば同じ画像イメージを持っているJPGとGIFの場合) なんかだと使えないでしょう。
 
それと、パフォーマンスに関してもかなり疑問ありです (もっとも、どのような実装方法であっても速くはならないような気はします)。

ソートした先頭からn件表示するには? ▲TOP
8i 以降であればFROM句のインラインビューで ORDER BY が使えるので簡単ですが、 それ以前のバージョンではちょっとしたトリックが必要です。
これは NIFTYのオラクル・ステーションSORACLE で拾った方法です。
何故、これでうまく行くかと言うと、プランを見てもらえばわかるのですが、結合時に マージジョインする事で『暗黙的にソートされている』からです。
ただし、この方法は昇順でのみ可能である点と、オプティマイザのバージョンによっては使えない可能性 がある点に留意してください。
このページの先頭へ

ORACLE [ SQL ]  [ データベースの情報 ]  [ 手続き型言語 ]  [ その他 ] 
Works > 逆引きSQL比較 > ORACLE > SQL