Oracle の ROW_NUMBER 関数で行番号を取得することができます。ここでは、以下の 従業員情報を格納した emp テーブルを例に ROW_NUMBER 関数の使用方法を確認します。
Tag Archives: sql
[ Oracle PL/SQL ] バインド変数を使用してセキュアに SQL を実行する
C# や Java などのプログラムから SQL を実行するときはバインド変数を使用して SQL インジェクション対策を行い、データを守るようにすることが一般的だと思いますが、Oracle データベース上で実行される PL / SQL から SQL を発行するときも同様です。Oracle が勝手に対策してくれるわけではありません。
[ Oracle ] Case ~ When ~ Then で null 判定 ( is not null )
Oracle データベースでは、SQL 内で if 文のような分岐を行う場合には Case ~ When ~ Then を使用することができますが、以下のような記述で null の判定を行うことはできません。
[ MySQL ] n分前, n時間前, n日後の日付を取得する ( INTERVAL )
データベースに限った話ではありませんが、10分前の時刻や、1か月後の日付などを求める機会は多くあります。MySQL では、四則演算のプラス・マイナス記号を使って直感的な SQL を記述して過去や未来の日時を取得することができます。
[ ODP.NET ] Oracle へ接続し SQL を発行する (OracleConnection / OracleCommand)
ODP.NET を使用して、SQL を発行するサンプルです。通常、よく使用するのは select / insert / update / delete 文 だと思いますが。大きく分けて結果が返される select 文と、結果が返されない insert / update / delete 文では SQL の発行方法が異なります。
[ Oracle SQL ] if 文や switch 文 ( CASE ~ WHEN ) を使って条件分岐を行う
一般的なプログラムで使われる if 文を SQL で記述するには CASE ~ WHEN を使用します。ここで掲載しているサンプルは Oracle で動作確認を行っていますが、MySQL や Postgres など他のデータベースでも動作するかもしません。
「安心してください。確認していません。」
[ Oracle SQL ] ソートした結果を union 句で結合する ( ORA-00933 )
まずは、間違った union all / union 句の使用例です。ソートした結果をマージしようとしていますがエラーとなってしまいます。ここでは、2パターンのエラーとなる SQL と正常に union を行う SQL サンプルを掲載しています。
[ Oracle ] 『ORA-00918: 列の定義が未確定です』 が発生するケース
ちょいちょい登場するこのエラーですが、どのような場合に出力されるか簡単なサンプルになります。SQL を正しく理解していれば原因の特定は比較的容易だと思われます。
「ORA-00918: 列の定義が未確定です。」は以下のような場合に発生します。言葉が堅苦しいのでわかりにくいですが、エラーメッセージそのものです。