PL/SQL 【PL/SQL】DBMS_RLSによる行レベルセキュリティの実装方法 行レベルセキュリティ(Row-Level Security, RLS)は、同じ表でもユーザーや状況に応じて「見える行」を自動的に絞り込む仕組みです。OracleではDBMS_RLS(Virtual Private Database, VPD... 2025.10.07 PL/SQL
PL/SQL 【PL/SQL】DBMS_WARNINGでコンパイル時の警告を制御する方法 PL/SQLのコードをコンパイルするとき、Oracleは潜在的な問題や非推奨な書き方を警告として通知してくれます。これらは実行エラーではないため無視されがちですが、将来的な不具合やパフォーマンス低下を防ぐ重要なヒントでもあります。DBMS_... 2025.10.07 PL/SQL
PL/SQL 【PL/SQL】DBMS_TRACEで処理の実行経路を追跡する方法 PL/SQLの実行経路(どのプロシージャや関数がどの順で呼ばれ、どの行で例外が起きたか)を可視化したいときは、DBMS_TRACEを使うとSQLトレースでは見えにくい「PL/SQL呼び出しの足跡」を取得できます。DBMS_PROFILERや... 2025.10.06 PL/SQL
PL/SQL 【PL/SQL】パーティションテーブルとPL/SQLの組み合わせ活用例 大規模データを扱うOracleでは、パーティションテーブルを前提にPL/SQLを設計すると性能と運用性が一気に上がります。読み取りはパーティションプルーニングで最小I/Oに、書き込みはパーティション単位のDMLやEXCHANGEで一括・高速... 2025.10.06 PL/SQL
PL/SQL 【PL/SQL】FORALLとSAVE EXCEPTIONSでバルクDMLのエラーを個別処理する方法 大量データを高速に処理する際、PL/SQLのFORALLはDMLをまとめて送ることでコンテキストスイッチを削減できる強力な構文です。ただしバッチ内の一部行だけが制約違反で失敗すると、通常は全体が例外で中断されてしまいます。SAVE EXCE... 2025.10.06 PL/SQL
PL/SQL 【PL/SQL】DBMS_LOCKを使った排他制御の実装方法 アプリケーションの同時実行制御をPL/SQLだけで実現したい場合、DBMS_LOCKは強力な選択肢になります。テーブル行ロックでは表現しづらい「任意の名前に対する排他」や「ジョブ名ごとの同時実行抑止」を、データ更新を伴わずに安全に行えます。... 2025.10.06 PL/SQL
PL/SQL 【PL/SQL】DBMS_ALERTとDBMS_PIPEでプロセス間通信を行う方法 Oracleデータベース内のセッション間で軽量に通知やメッセージをやり取りしたいとき、PL/SQLの標準パッケージであるDBMS_ALERTとDBMS_PIPEが役に立ちます。DBMS_ALERTは「イベント通知」に向いたコミット連動型の仕... 2025.10.06 PL/SQL
PL/SQL 【PL/SQL】エディションベースリディフィニション(EBR)とパッケージ管理 エディションベースリディフィニション(Edition-Based Redefinition, EBR)は、Oracle Databaseが提供するアプリケーションの無停止リリースを実現する仕組みです。従来はパッケージやビューを変更する際にセ... 2025.10.05 PL/SQL
PL/SQL 【PL/SQL】WITH FUNCTION句を使ってSQL内に関数を埋め込む方法 Oracle Database 12c以降では、SQL文のWITH句の中にPL/SQL関数を埋め込める「WITH FUNCTION句」が利用できます。これにより、そのSQL専用のローカル関数を定義し、外部スキーマに依存しない自己完結したSQ... 2025.10.05 PL/SQL
PL/SQL 【PL/SQL】マルチテーブルINSERTをPL/SQLから活用する方法 マルチテーブルINSERTは一度の表スキャンで複数の表へ同時に挿入できるOracle独自の拡張構文です。ETLやデータ移送、親子関係の同時作成、条件分岐での仕分けなどで威力を発揮し、PL/SQLからも通常のINSERTと同様に実行できます。... 2025.10.05 PL/SQL
PL/SQL 【PL/SQL】ファイングレイン監査(FGA)とPL/SQLの活用 ファイングレイン監査(FGA: Fine Grained Auditing)は、Oracleが提供する高度な監査機能で、特定の条件に合致したデータアクセスだけを記録できます。従来の監査が「誰がどの表にアクセスしたか」といった大まかな単位だっ... 2025.10.05 PL/SQL
PL/SQL 【PL/SQL】Invoker RightsとDefiner Rightsの違いと使い分け PL/SQLのストアドプロシージャやファンクションは、デフォルトでは「作成者の権限」で実行されます。これをDefiner Rights(定義者権限)と呼びます。一方でInvoker Rights(呼び出し者権限)を指定すると、実行時に呼び出... 2025.10.05 PL/SQL
PL/SQL 【PL/SQL】DBMS_APPLICATION_INFOで処理状況を監視に出力する方法 DBMS_APPLICATION_INFOは、実行中のPL/SQLやアプリケーション処理の「いま何をやっているか」をデータベース側へ明示するための標準パッケージです。V$SESSIONやAWR、ASHの画面にモジュール名やアクション名、長時... 2025.10.04 PL/SQL
PL/SQL 【PL/SQL】DBMS_PROFILERでコード実行時間を計測する方法 DBMS_PROFILERはPL/SQLコードの行単位で実行回数や経過時間を計測し、どこが遅いのかを数値で可視化できる標準パッケージです。体感やログだけでは見えないボトルネックを特定し、最小の修正で最大の効果を狙うための強力な手段になります... 2025.10.04 PL/SQL
PL/SQL 【PL/SQL】コレクション(配列・ネスト表)の基本と活用例 PL/SQLには配列やリストを表現できる「コレクション」という仕組みがあり、大量データを効率的に扱うために活用されます。代表的なコレクションには「連想配列」「ネスト表」「VARRAY」の3種類があり、それぞれ特徴と用途が異なります。ここでは... 2025.10.04 PL/SQL
PL/SQL 【PL/SQL】DBMS_METADATAでスキーマ定義を取得する方法 Oracleでテーブルやビュー、インデックス、シーケンスなどのオブジェクト定義を確認したいとき、DBMS_METADATAパッケージを使うと簡単にDDLを取得できます。GUIツールを使わずSQLだけで定義を取得できるため、スキーマ管理やバー... 2025.10.04 PL/SQL
PL/SQL 【PL/SQL】AUTONOMOUS TRANSACTIONで独立した処理を行う方法 PL/SQLのトランザクションは通常1セッション内で共有され、COMMITやROLLBACKは全体に影響します。しかし「本体トランザクションとは独立してログを書き込みたい」「監査やエラーログだけは確定させたい」といった場面では、AUTONO... 2025.10.04 PL/SQL
PL/SQL 【PL/SQL】SAVEPOINTを使った部分ロールバックの実装方法 トランザクションの一部だけを取り消して処理を継続したい時、PL/SQLではSAVEPOINTとROLLBACK TO SAVEPOINTを組み合わせることで安全に実現できます。Oracleのトランザクションはネストできませんが、名前付きのセ... 2025.10.03 PL/SQL
PL/SQL 【PL/SQL】REF CURSORを使った柔軟なデータ取得方法 REF CURSOR(参照カーソル)は、SELECTの結果集合への“ハンドル”を変数として受け渡せる仕組みです。固定の列構成に縛られず、呼び出し元へストリーミング的にデータを渡せるため、画面やレポートなど多様な取得要件に柔軟に対応できます。... 2025.10.03 PL/SQL
PL/SQL 【PL/SQL】コミットとロールバックの正しい使い方 トランザクション制御はPL/SQLの信頼性と性能に直結します。COMMITとROLLBACKはデータベースの一貫性を保ちつつ、いつ確定・取り消しを行うかを決める重要な操作です。誤用すると整合性崩壊やパフォーマンス劣化を招くため、基本的な仕組... 2025.10.03 PL/SQL