SQL

Oracle SQL、PL/SQLに関する記事になります。
2018年12月まではOracle11gXEを使用して検証しています。
2019年1月からはOracle12cを使用して検証しています。
SQL

BLOBデータの圧縮とファイル出力

文字列をBLOBに変換及びzipで圧縮してテーブルに格納する方法です。 また、テーブルに格納されているBLOBデータ(zipファイル)を取り出し、ディレクトリオブジェクトを使用してファイル出力する方法も記載します。 文字 […]

SQL

BLOBデータをSPOOL

TB_SAMPLEテーブルのBLOBカラムに格納されているバイナリデータを文字列に変換して出力するPL/SQLサンプルです。 文字列で出力する関係上、CLOBに変換してからDBMS_OUTPUT.PUT_LINEを使って […]

SQL

BLOBデータ登録のサンプルPLSQL

BLOBカラムにはVARCHAR2で収まらないような大容量のデータを格納することができます。ただ、BLOBを扱うのはVARCHAR2に比べるとやっかいです。下記はBLOBカラムにBLOBデータを登録する超シンプルなサンプ […]

SQL

BLOBを文字列で出力する

テーブルに登録されているBLOBデータを出力するサンプルになります。 BLOBを通常の文字列で出力するには「UTL_RAW.CAST_TO_VARCHAR2」や「DBMS_LOB.SUBSTR」を使う必要があります。 B […]

SQL

特定の日付で抽出する

特定の日付のデータを抽出する方法です。 対象のカラムが日付型、タイムスタンプ型となっている場合のWHERE句の指定方法になります。 前提条件 TB_SAMPLEテーブルにDATE型、TIMESTAMP型のカラムを持たせて […]

SQL

NULLが入る項目にもINDEXの効果がある

昔、NULLが入る項目にINDEXを張っても効果が無いと聞いたことがあって、NULLが入る項目にはINDEXは使わないようにしていましたが、そんなことは無く「INDEX(RANGE SCAN)」してくれます。私の勘違いだ […]

SQL

FETCH FIRST

Oracle12cから追加されたFETCH FIRST N ROWS ONLYを紹介します。 Oracle11以前はORDER BY でソートした結果の1件目だけを抽出するというようなことをする場合、内部ビューを使う必要 […]

SQL

SQLでIF文は使えない

SQL文でIF文を使いたいと思う場合があると思います。PL/SQLであればIF文を使うことはできますが、ただのSQLではIF文は使えません。 SQLでIF文の様な分岐を表現したい場合はDECODE、またはCASEを使うの […]

SQL

SPOOLで不要な空行を出力させない

SPOOLで不要な空行を出力させない方法を紹介します。 また、データに改行コードが含まれていると不要な空行が出力されるという事象の解決方法も紹介します。 SPOOLで不要な空行を出力させないサンプルSQL テーブルから取 […]

SQL

UPDATE 処理速度検証

以前から気になっていた、UPDATE文の処理速度検証を行いました。 UPDATE文で内部ビューを使用した場合と、EXISTS句を使った場合で、どちらが速いか検証しました。 前提条件 下記の検証SQL1、検証SQL2を使っ […]