Oracle

【Oracle】バインド変数完全ガイド|ハードパース削減・CURSOR_SHARING・アダプティブカーソル共有まで解説

Oracle のバインド変数(Bind Variables)を完全解説。ハードパースとソフトパースの違い・バインド変数がライブラリキャッシュヒット率を高めるしくみ・EXECUTE IMMEDIATE の USING 句でバインド変数を渡す方法・CURSOR_SHARING パラメータ(EXACT / FORCE)の特徴と副作用・バインド変数ピーキング(Bind Variable Peeking)と実行計画の固定化問題・Adaptive Cursor Sharing(アダプティブカーソル共有)で異なる値に最適な計画を使い分ける方法まで実例で解説します。
Oracle

【Oracle】パイプライン表関数(Pipelined Table Function)完全ガイド|PIPELINED・PIPE ROW によるストリーミング処理・並列実行まで解説

Oracle のパイプライン表関数(Pipelined Table Function)を完全解説。PIPELINED キーワードと PIPE ROW() を使って FROM 句で呼び出せる関数を作成する方法・通常の TABLE 関数との違い(ストリーミングでメモリ効率が高い)・戻り値の型定義(コレクション型・オブジェクト型)の書き方・PARALLEL ENABLE PARTITION BY で並列クエリに対応する方法・ETL 処理・大規模ログ変換・CSV 分割など実務的なユースケースまで実例で解説します。
Oracle

【Oracle】ORA-04068 完全ガイド|パッケージ状態が破棄されるエラーの原因・対処・PRAGMA SERIALLY_REUSABLE まで解説

Oracle の ORA-04068 エラー(existing state of packages has been discarded)を完全解説。ORA-04068 が発生する仕組み(パッケージの再コンパイル後にセッションの状態が無効になる)・2 回目の呼び出しで自動的に復帰するメカニズム・アプリケーション側でのリトライ処理の実装方法・PRAGMA SERIALLY_REUSABLE でパッケージ変数をセッション間でリセットする方法・コネクションプール環境での ORA-04068 の特性・パッケージの再コンパイル時の影響を最小化する方法まで実例で解説します。
Oracle

【Oracle】LATERAL・CROSS APPLY・OUTER APPLY完全ガイド|Oracle 12c 以降の外部参照サブクエリ・グループ内 Top-N まで解説

Oracle 12c で導入された LATERAL 句と CROSS APPLY / OUTER APPLY を完全解説。LATERAL でインラインビューから外部クエリの列を参照できる仕組み・CROSS APPLY で結合先のインラインビューが行を返す場合のみ結合する方法・OUTER APPLY で結合先が空でも LEFT OUTER JOIN のように NULLで補完する方法・LATERAL を使ったグループ内 Top-N(各部門の上位3人の給与など)の書き方・相関サブクエリや RANK() OVER による従来の方法との比較まで実例で解説します。
Oracle

【Oracle】近似クエリ(Approximate Query Processing)完全ガイド|APPROX_COUNT_DISTINCT・APPROX_PERCENTILE で大規模データを高速集計する

Oracle 12.2 以降で使えるアプリケーション近似クエリ(Approximate Query Processing)を完全解説。APPROX_COUNT_DISTINCT で COUNT(DISTINCT) より高速にカーディナリティを推定する方法・APPROX_PERCENTILE で中央値・パーセンタイル値を高速計算する方法・APPROX_SUM / APPROX_COUNT / APPROX_MEDIAN(Oracle 19c 以降)の使い方・近似クエリの誤差保証と正確クエリとの使い分け基準・リアルタイムダッシュボード・大規模ログ分析での活用方法まで実例で解説します。
Oracle

【Oracle】DBMS_RANDOM完全ガイド|乱数・ランダム文字列の生成・テストデータ作成・ランダムサンプリングまで解説

Oracle の DBMS_RANDOM パッケージを完全解説。DBMS_RANDOM.VALUE で 0〜1 の乱数や範囲指定の乱数を生成する方法・DBMS_RANDOM.STRING で大文字・小文字・英数字混合のランダム文字列を生成する方法・DBMS_RANDOM.NORMAL で正規分布の乱数を生成する方法・DBMS_RANDOM.SEED でシードを設定して再現性のあるテストデータを生成する方法・ORDER BY DBMS_RANDOM.VALUE でランダムに行を取得するサンプリング方法・テストデータ一括生成スクリプトまで実例で解説します。
Oracle

【Oracle】DBMS_ASSERT完全ガイド|動的 SQL の SQL インジェクション対策・入力値の検証方法まで解説

Oracle の DBMS_ASSERT パッケージを完全解説。動的 SQL に渡す入力値の SQL インジェクションリスクを軽減する仕組み・ENQUOTE_NAME でオブジェクト名をダブルクォートでエスケープする方法・ENQUOTE_LITERAL で文字列リテラルをシングルクォートでエスケープする方法・SCHEMA_NAME / SQL_OBJECT_NAME / QUALIFIED_SQL_NAME で識別子の存在を検証する方法・EXECUTE IMMEDIATE と組み合わせた安全な動的テーブル名・列名の使い方まで実例で解説します。
Oracle

【Oracle】不可視列(Invisible Column)完全ガイド|SELECT * に表示しない列の追加・段階的スキーマ移行・Oracle 12c 以降の新機能

Oracle 12c で導入された不可視列(Invisible Column)を完全解説。INVISIBLE 列は SELECT * や DESCRIBE に表示されない特殊な列・CREATE TABLE / ALTER TABLE MODIFY で列を不可視にする方法・不可視列を明示的に参照する方法と INSERT 時の扱い・既存アプリケーションを変更せずに新列を追加するユースケース(段階的スキーマ移行)・USER_TAB_COLUMNS.HIDDEN_COLUMN で不可視列を確認する方法・不可視列に作成できるインデックスや制約の制限まで実例で解説します。
Oracle

【Oracle】MATCH_RECOGNIZE完全ガイド|行パターンマッチングで時系列データのイベントを SQL で検出する

Oracle 12c で導入された MATCH_RECOGNIZE 句を完全解説。正規表現ライクなパターンで行の並びを検索する仕組み・PATTERN 句・DEFINE 句・MEASURES 句の記述方法・ONE ROW PER MATCH と ALL ROWS PER MATCH の違い・AFTER MATCH SKIP でマッチ後の開始位置を制御する方法・株価の上昇→下降パターン検出・ユーザーセッション集計・ウィンドウ関数(分析関数)では難しい連続パターンの検出まで実例で解説します。
Oracle

【Oracle】マルチテーブル INSERT 完全ガイド|INSERT ALL・INSERT FIRST で 1 つの SELECT から複数テーブルに同時挿入する

Oracle のマルチテーブル INSERT を完全解説。INSERT ALL で同じレコードを複数テーブルに同時挿入する方法・条件付き INSERT ALL(WHEN〜THEN〜INTO)で条件に応じて挿入先を振り分ける方法・INSERT FIRST で最初に一致した条件のテーブルにのみ挿入する方法・ETL でステージングテーブルからファクト・ディメンションテーブルに一括ロードするパターン・INSERT ALL とシーケンスを組み合わせる際の注意点・EXECUTE IMMEDIATE でのマルチテーブル INSERT の制限まで実例で解説します。
Oracle

【Oracle】テーブル圧縮完全ガイド|基本圧縮・Advanced Row Compression・ALTER TABLE MOVE COMPRESS まで解説

Oracle のテーブル圧縮を完全解説。基本圧縮(COMPRESS)とAdvanced Row Compression(ROW STORE COMPRESS ADVANCED)の違い・基本圧縮はダイレクトパス INSERT のみで有効な理由・Advanced Row Compression で通常の DML(INSERT/UPDATE)にも圧縮を適用する方法・ALTER TABLE MOVE COMPRESS で既存テーブルに圧縮を適用する方法・DBA_TABLES.COMPRESSION で圧縮状態を確認する方法・DBMS_COMPRESSION で圧縮率を事前に見積もる方法まで実例で解説します。
Oracle

【Oracle】補足ロギング(Supplemental Logging)完全ガイド|LogMiner・GoldenGate 向けの設定と DBA_LOG_GROUPS での確認方法まで解説

Oracle の補足ロギング(Supplemental Logging)を完全解説。補足ロギングが必要な理由(LogMiner・Oracle GoldenGate・レプリケーション)・データベースレベルの補足ロギング設定(最小・ALL・主キー・一意キー・外部キー)・テーブルレベルの補足ロググループの作成方法・V$DATABASE および DBA_LOG_GROUPS / DBA_LOG_GROUP_COLUMNS で設定を確認する方法・補足ロギングが REDO ログサイズに与える影響と適切な設定の選び方まで解説します。
Oracle

【Oracle】インデックス圧縮完全ガイド|キー圧縮(COMPRESS)・Advanced Index Compression でストレージと I/O を削減する

Oracle のインデックス圧縮を完全解説。インデックスキー圧縮(KEY COMPRESSION)の仕組みと COMPRESS n の指定方法・複合インデックスで先行列の繰り返しを圧縮して領域を削減する効果・Oracle 12c 以降の Advanced Index Compression(COMPRESS ADVANCED LOW/HIGH)の違い・既存インデックスを圧縮付きで再構築する ALTER INDEX REBUILD COMPRESS・DBA_INDEXES.COMPRESSION / LEAF_BLOCKS で圧縮効果を確認する方法・一意インデックスへの圧縮適用の制限まで実例で解説します。
Oracle

【Oracle】XMLType完全ガイド|XML の格納・XMLQuery・XMLTABLE・XMLElement/XMLAgg まで解説

Oracle の XMLType を完全解説。XMLType 列でテーブルに XML データを格納する方法・XMLQuery / XMLExists で XQuery を使って XML を検索する方法・XMLTABLE で XML データをリレーショナル行に変換する方法・XMLElement / XMLForest / XMLAgg で SELECT 結果を XML に変換する方法・EXTRACT / EXTRACTVALUE(旧 API)と XMLQuery(推奨)の違い・XML インデックスで XML 検索を高速化する方法まで実例で解説します。
Oracle

【Oracle】DBMS_UTILITY完全ガイド|FORMAT_ERROR_BACKTRACE・COMPILE_SCHEMA・GET_TIME など実用関数を徹底解説

Oracle の DBMS_UTILITY パッケージを完全解説。FORMAT_ERROR_BACKTRACE でエラーの発生箇所を特定する方法・FORMAT_CALL_STACK で呼び出しスタックを取得する方法・COMPILE_SCHEMA でスキーマ内の無効オブジェクトを一括再コンパイルする方法・NAME_RESOLVE で PL/SQL オブジェクト名を解決する方法・GET_TIME で処理時間を計測する方法・COMMA_TO_TABLE / TABLE_TO_COMMA で文字列とコレクションを変換する方法まで実例で解説します。
Oracle

【Oracle】PL/SQL ネイティブコンパイル完全ガイド|NATIVE モードで演算処理を高速化・コンパイルモードの変更まで解説

Oracle PL/SQL のネイティブコンパイル(Native Compilation)を完全解説。INTERPRETED モードと NATIVE モードの違い・PLSQL_CODE_TYPE パラメータで NATIVE モードに変更する方法・ALTER PROCEDURE / ALTER PACKAGE を使って既存コードを NATIVE に再コンパイルする手順・ネイティブコンパイルが効果的な処理(数値演算・ループ)と効果が薄い処理(SQL 主体)・DBA_PLSQL_OBJECT_SETTINGS でコンパイルモードを確認する方法まで解説します。
Oracle

【Oracle】コンパウンドトリガー完全ガイド|ORA-04091 ミュータルテーブルの解決・一括 DML の効率化まで解説

Oracle 11g 以降で使えるコンパウンドトリガー(Compound Trigger)を完全解説。1 つのトリガーに BEFORE STATEMENT・BEFORE EACH ROW・AFTER EACH ROW・AFTER STATEMENT の4 つのタイミングポイントを定義できる仕組み・ORA-04091 ミュータルテーブルエラーを解決する AFTER EACH ROW + AFTER STATEMENT パターン・行単位ループを避けてパフォーマンスを改善する一括 INSERT(FORALL)パターン・コンパウンドトリガーの変数共有とセッション間での初期化まで実例で解説します。
Oracle

【Oracle】DBMS_SQL完全ガイド|動的 SQL のカーソル操作・列数不定の SELECT・EXECUTE IMMEDIATE との使い分けまで解説

Oracle の DBMS_SQL パッケージを完全解説。OPEN_CURSOR・PARSE・BIND_VARIABLE・EXECUTE・FETCH_ROWS・COLUMN_VALUE の基本フロー・実行時まで列数・列型が不明な SELECT に対応する方法(DESCRIBE_COLUMNS)・EXECUTE IMMEDIATE との機能比較と使い分け・バインド変数を使った安全な動的 DML の実行方法・DBMS_SQL.TO_REFCURSOR で結果を REF CURSOR に変換する方法まで実例で解説します。
Oracle

【Oracle】DBMS_JOB完全ガイド|ジョブの作成・変更・停止・DBMS_SCHEDULER との違いまで解説

Oracle の DBMS_JOB パッケージ(旧ジョブスケジューラ)を完全解説。DBMS_JOB.SUBMIT でジョブを登録する方法・実行間隔(interval)パラメータの設定方法(SYSDATE+1/24 など)・DBMS_JOB.CHANGE でジョブを変更する方法・DBMS_JOB.BROKEN でジョブを停止する方法・USER_JOBS / DBA_JOBS でジョブを管理・確認する方法・DBMS_JOB と DBMS_SCHEDULER の違いと移行方法まで解説します。
Oracle

【Oracle】ビットマップインデックス完全ガイド|低カーディナリティ列・DWH クエリの高速化・B-Tree との使い分けまで解説

Oracle のビットマップインデックス(Bitmap Index)を完全解説。通常の B-Tree インデックスとビットマップインデックスの内部構造の違い・CREATE BITMAP INDEX の作成方法・低カーディナリティ列(性別・ステータスなど)でのビットマップの効果・AND/OR/NOT を組み合わせた複数列ビットマップ演算の仕組み・OLTP ではなく DWH・分析クエリに適した理由(DML 時のロック競合)・ビットマップジョインインデックスの活用まで実例で解説します。