SQL

Oracle SQL、PL/SQLに関する記事になります。
2018年12月まではOracle11gXEを使用して検証しています。
2019年1月からはOracle12cを使用して検証しています。
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を使っ […]

SQL

テストデータ自動生成(一括登録) PL/SQL

前回はテストデータを自動生成するPL/SQLサンプルを紹介しました。しかし、1件ずつINSERTを行う作りになっていたため、大量データを作るのに時間がかかります。 それを改善するために、今回はFORALLを使って、一括で […]

SQL

テストデータ自動生成 PL/SQL

SQLのパフォーマンス計測を行うために、テストデータを大量に作成したい場合はよくあると思いますが、ランダム関数を使用して大量にデータを作成するPL/SQLサンプルを紹介します。 テストデータ自動生成 サンプルPL/SQL […]