プライマリ・コンテンツに移動
Oracle Database PL/SQL言語リファレンス
12
c
リリース1 (12.1)
B71296-06
索引
次
目次
例一覧
図一覧
表一覧
タイトルおよび著作権情報
はじめに
対象読者
ドキュメントのアクセシビリティについて
関連ドキュメント
表記規則
構文の説明
『Oracle Database PL/SQL言語リファレンス』のこのリリースの変更点
Oracle Database 12
c
リリース1(12.1)の変更点
実行者権限ファンクションの結果がキャッシュ可能である
PL/SQLとSQL間のインタフェースを越えられるPL/SQL専用データ型の追加
新しいACCESSIBLE BY句
FETCH FIRST句
PL/SQLパッケージとスタンドアロン・サブプログラムにロールを付与することが可能
より多くのデータ型の最大サイズがSQLとPL/SQLで同じに
PDBでのDATABASEトリガー
LIBRARYをDIRECTORYオブジェクトとしてCREDENTIALを使用して定義可能
暗黙的な文の結果
BEQUEATH CURRENT_USERビュー
INHERIT PRIVILEGESとINHERIT ANY PRIVILEGES権限
非表示列
タイプではなくオブジェクトに、エディションと非エディションがある
SQLより高速に実行されるPL/SQLファンクション
事前定義問合せディレクティブ$$PLSQL_UNIT_OWNERと$$PLSQL_UNIT_TYPE
コンパイル・パラメータPLSQL_DEBUGは非推奨
1
PL/SQLの概要
PL/SQLのメリット
SQLとの緊密な統合
高いパフォーマンス
高い生産性
移植性
スケーラビリティ
管理性
オブジェクト指向プログラミングのサポート
PL/SQLの主な特長
エラーの処理
ブロック
変数および定数
サブプログラム
パッケージ
トリガー
入出力
データの抽象化
カーソル
コンポジット変数
%ROWTYPE属性の使用
%TYPE属性の使用
抽象データ型
制御文
条件付きコンパイル
問合せ結果セットの一度に1行ずつの処理
PL/SQLのアーキテクチャ
PL/SQLエンジン
PL/SQLユニットおよびコンパイル・パラメータ
2
PL/SQL言語の基礎
キャラクタ・セット
データベース・キャラクタ・セット
各国語キャラクタ・セット
字句単位
デリミタ
識別子
予約語およびキーワード
事前定義の識別子
ユーザー定義の識別子
通常のユーザー定義の識別子
ユーザー定義の引用識別子
リテラル
プラグマ
コメント
単一行コメント
複数行コメント
字句単位の間の空白文字
宣言
NOT NULL制約
変数の宣言
「定数の宣言」
変数および定数の初期値
%TYPE属性を使用した項目の宣言
識別子に対する参照
識別子の有効範囲と可視性
変数への値の代入
代入文を使用した変数への値の代入
SELECT INTO文を使用した変数への値の代入
サブプログラムのパラメータとしての変数への値の代入
ブール変数への値の代入
式
連結演算子
演算子の優先順位
論理演算子
短絡評価
比較演算子
IS [NOT] NULL演算子
関係演算子
算術比較
ブール比較
文字比較
日付比較
LIKE演算子
BETWEEN演算子
IN演算子
ブール式
CASE式
単純なCASE式
検索CASE式
PL/SQL式でのSQLファンクション
エラー・レポート・ファンクション
条件付きコンパイル
条件付きコンパイルの動作方法
プリプロセッサ制御トークン
選択ディレクティブ
エラー・ディレクティブ
問合せディレクティブ
事前定義の問合せディレクティブ
問合せディレクティブへの値の代入
解決できない問合せディレクティブ
静的な式
静的なPLS_INTEGER式
静的なブール式
静的なVARCHAR2式
静的定数
DBMS_DB_VERSIONパッケージ
条件付きコンパイルの例
処理後のソース・テキストの取得と出力
条件付きコンパイル・ディレクティブの制限
3
PL/SQLのデータ型
SQLデータ型
最大サイズの相違
BINARY_FLOATおよびBINARY_DOUBLEの追加のPL/SQL定数
BINARY_FLOATおよびBINARY_DOUBLEの追加のPL/SQLサブタイプ
CHARおよびVARCHAR2変数
長すぎる値の代入または挿入
マルチバイト文字の変数の宣言
CHARとVARCHAR2のデータ型の違い
事前定義のサブタイプ
空白埋めの動作方法
値の比較
LONGおよびLONG RAW変数
ROWIDおよびUROWID変数
ブール・データ型
PLS_INTEGERおよびBINARY_INTEGERデータ型
PLS_INTEGERのオーバーフローの回避
PLS_INTEGERの事前定義のサブタイプ
PLS_INTEGERのSIMPLE_INTEGERサブタイプ
SIMPLE_INTEGERのオーバーフローの方法
SIMPLE_INTEGERと他のオペランドの両方を使用する式
SIMPLE_INTEGERの範囲内の整数リテラル
ユーザー定義のPL/SQLサブタイプ
無制約のサブタイプ
制約付きサブタイプ
同じデータ型ファミリ内のベース型を使用したサブタイプ
4
PL/SQLの制御文
条件付き選択文
IF THEN文
IF THEN ELSE文
IF THEN ELSIF文
単純なCASE文
検索CASE文
LOOP文
基本LOOP文
EXIT文
EXIT WHEN文
CONTINUE文
CONTINUE WHEN文
FOR LOOP文
FOR LOOP索引
下限と上限
FOR LOOP文内のEXIT WHENまたはCONTINUE WHEN文
WHILE LOOP文
順次制御文
GOTO文
NULL文
5
PL/SQLのコレクションおよびレコード
コレクション型
結合配列
連想配列の定数の宣言
文字列で索引付けされている結合配列に影響を与えるNLSパラメータ値
結合配列に移入した後のNLSパラメータ値の変更
VARCHAR2以外のデータ型の索引
リモート・データベースへの結合配列の受渡し
結合配列の適切な使用方法
VARRAY(可変サイズの配列)
VARRAYの適切な使用方法
ネストした表
ネストした表と配列の重要な相違点
ネストした表の適切な使用方法
コレクションのコンストラクタ
コレクション変数への値の代入
データ型の互換性
VARRAYまたはネストした表の変数へのNULL値の代入
ネストした表の変数へのSET演算結果の代入
多次元コレクション
コレクションの比較
VARRAYおよびネストした表の変数とNULLの比較
ネストした表が等しいかどうかの比較
ネストした表のSQL MULTISET条件による比較
コレクション・メソッド
DELETEコレクション・メソッド
TRIMコレクション・メソッド
EXTENDコレクション・メソッド
EXISTSコレクション・メソッド
FIRSTおよびLASTコレクション・メソッド
結合配列に対するFIRSTおよびLASTメソッド
VARRAYに対するFIRSTおよびLASTメソッド
ネストした表に対するFIRSTおよびLASTメソッド
COUNTコレクション・メソッド
VARRAYに対するCOUNTメソッド
ネストした表に対するCOUNTメソッド
LIMITコレクション・メソッド
PRIORおよびNEXTコレクション・メソッド
パッケージ仕様部で定義されたコレクション型
レコード変数
レコード変数の初期値
レコード定数の宣言
RECORD型
%ROWTYPE属性を使用した項目の宣言
常に行の全体を表すレコード変数の宣言
行の一部を表すことができるレコード変数の宣言
%ROWTYPE属性と仮想列
%ROWTYPE属性と非表示列
レコード変数への値の代入
あるレコード変数から別のレコード変数への代入
レコード変数への行の全体または一部の代入
SELECT INTOを使用した行のレコード変数への代入
FETCHを使用した行のレコード変数への代入
PL/SQLレコード変数に行を戻すSQL文の使用
レコード変数へのNULLの代入
レコードの比較
表へのレコードの挿入
レコードを使用した行の更新
レコードの挿入/更新に関する制限
6
PL/SQLの静的SQL
静的SQLの説明
文
擬似列
PL/SQLのCURRVALおよびNEXTVAL
カーソルの概要
暗黙カーソル
SQL%ISOPEN属性: カーソルがオープンしているかどうか
SQL%FOUND属性: 影響を受けた行があったかどうか
SQL%NOTFOUND属性: どの行も影響を受けなかったかどうか
SQL%ROWCOUNT属性: 影響を受けた行数
明示カーソル
明示カーソルの宣言および定義
明示カーソルのオープンおよびクローズ
明示カーソルによるデータのフェッチ
明示カーソル問合せの変数
明示カーソル問合せで列の別名が必要な場合
パラメータを受け入れる明示カーソル
デフォルト値を持つ仮カーソル・パラメータ
デフォルト値を持つ仮カーソル・パラメータの追加
明示カーソル属性
%ISOPEN属性: カーソルがオープンしているかどうか
%FOUND属性: 1行がフェッチされたかどうか
%NOTFOUND属性: どの行もフェッチされていないかどうか
%ROWCOUNT属性: フェッチされた行数
問合せ結果セットの処理
SELECT INTO文による問合せ結果セットの処理
単一行の結果セットの処理
多数の複数行の結果セットの処理
カーソルFOR LOOP文による問合せ結果セットの処理
明示カーソル、OPEN、FETCHおよびCLOSEによる問合せ結果セットの処理
副問合せによる問合せ結果セットの処理
カーソル変数
カーソル変数の作成
カーソル変数のオープンおよびクローズ
カーソル変数によるデータのフェッチ
カーソル変数への値の代入
カーソル変数問合せの変数
コレクションの問合せ
カーソル変数の属性
サブプログラム・パラメータとしてのカーソル変数
ホスト変数としてのカーソル変数
CURSOR式
トランザクションの処理および制御
COMMIT文
ROLLBACK文
SAVEPOINT文
暗黙的なロールバック
SET TRANSACTION文
デフォルトのロックの上書き
LOCK TABLE文
SELECT FOR UPDATEカーソルとFOR UPDATEカーソル
ROWID擬似列を使用したCURRENT OF句のシミュレート
自律型トランザクション
自律型トランザクションのメリット
トランザクション・コンテキスト
トランザクションの可視性
自律型ルーチンの宣言
自律型トランザクションの制御
自律型ルーチンの開始と終了
自律型トランザクションのコミットおよびロールバック
セーブポイント
自律型トランザクションでのエラーの回避
自律型トリガー
SQLからの自律型ファンクションの起動
7
PL/SQLの動的SQL
動的SQLが必要な場合
システム固有の動的SQL
EXECUTE IMMEDIATE文
OPEN FOR文、FETCH文およびCLOSE文
動的SQL文内でのプレースホルダ名の繰返し
動的SQL文が無名ブロックまたはCALL文でない
動的SQL文が無名ブロックまたはCALL文
DBMS_SQLパッケージ
DBMS_SQL.RETURN_RESULTプロシージャ
DBMS_SQL.GET_NEXT_RESULTプロシージャ
DBMS_SQL.TO_REFCURSORファンクション
DBMS_SQL.TO_CURSOR_NUMBERファンクション
SQLインジェクション
SQLインジェクション方法
文の変更
文のインジェクション
データ型変換
SQLインジェクションの回避
バインド変数
妥当性チェック
明示的な書式モデル
8
PL/SQLサブプログラム
サブプログラムを使用する理由
ネストしたサブプログラム、パッケージ・サブプログラムおよびスタンドアロン・サブプログラム
サブプログラムの起動
サブプログラムの各部
ファンクションの追加部分
RETURN文
ファンクションのRETURN文
プロシージャのRETURN文
無名ブロックのRETURN文
前方宣言
サブプログラムのパラメータ
サブプログラムの仮パラメータと実パラメータ
制約付きサブタイプの仮パラメータ
サブプログラムのパラメータの引渡し方法
サブプログラムのパラメータ・モード
サブプログラムのパラメータのエイリアシング
参照渡しパラメータによるサブプログラムのパラメータのエイリアシング
カーソル変数パラメータによるサブプログラムのパラメータのエイリアシング
サブプログラムのINパラメータのデフォルト値
実パラメータの位置表記法、名前表記法および混合表記法
サブプログラムの起動の解決
オーバーロードされたサブプログラム
数値データ型のみが異なる仮パラメータ
オーバーロードできないサブプログラム
サブプログラムのオーバーロード・エラー
再帰的サブプログラム
サブプログラムの副作用
PL/SQLファンクション結果キャッシュ
ファンクションの結果キャッシュの有効化
結果がキャッシュされるファンクションを使用するアプリケーションの開発
結果がキャッシュされるファンクションの制限
結果がキャッシュされるファンクションの例
結果がキャッシュされるアプリケーション構成パラメータ
結果がキャッシュされる再帰ファンクション
結果がキャッシュされるファンクションの高度なトピック
キャッシュ・ヒットの規則
結果キャッシュのバイパス
結果がキャッシュされるファンクションによるセッション固有の設定の処理
結果がキャッシュされるファンクションによるセッション固有のアプリケーション・コンテキストの処理
結果キャッシュの粒度の選択
Oracle RAC環境での結果キャッシュ
結果キャッシュの管理
結果がキャッシュされるファンクションが依存するPL/SQLユニットへのホット・パッチの適用
SQL文によって起動できるPL/SQLファンクション
実行者権限および定義者権限(AUTHIDプロパティ)
PL/SQLパッケージおよびスタンドアロン・サブプログラムへのロールの付与
IRユニットにはテンプレート・オブジェクトが必要
外部サブプログラム
9
PL/SQLトリガー
トリガーの概要
トリガーを使用する理由
DMLトリガー
トリガーを起動するDML文を検出する条件述語
INSTEAD OF DMLトリガー
複合DMLトリガー
複合DMLトリガーの構造
複合DMLトリガーの制限
複合DMLトリガーのパフォーマンス上のメリット
バルク挿入での複合DMLトリガーの使用
複合DMLトリガーを使用した変更表エラーの回避
参照整合性を保証するトリガー
子表に対する外部キー・トリガー
親表に対するUPDATEおよびDELETE RESTRICTトリガー
親表に対するUPDATEおよびDELETE SET NULLトリガー
親表に対するDELETE CASCADEトリガー
親表に対するUPDATE CASCADEトリガー
複雑な制約チェックに対するトリガー
複雑なセキュリティ認可に対するトリガー
透過的なイベント・ロギングに対するトリガー
導出列値に対するトリガー
複合更新可能ビューを作成するトリガー
ファイングレイン・アクセス制御に対するトリガー
相関名および疑似レコード
OBJECT_VALUE擬似列
システム・トリガー
SCHEMAトリガー
DATABASEトリガー
INSTEAD OF CREATEトリガー
トリガーによって起動されるサブプログラム
トリガーのコンパイル、無効化および再コンパイル
トリガーでの例外処理
トリガー設計のガイドライン
トリガーの制限
トリガーのサイズ制限
トリガーのLONGおよびLONG RAWデータ型の制約
変更表の制限
トリガーの起動順序
トリガーの有効化および無効化
トリガーの変更およびデバッグ
トリガーおよびOracle Databaseデータ転送ユーティリティ
イベントをパブリッシュするトリガー
イベント属性ファンクション
データベース・イベント・トリガーのイベント属性ファンクション
クライアント・イベント・トリガーのイベント属性ファンクション
トリガーに関する情報が表示されるビュー
10
PL/SQLパッケージ
パッケージ
パッケージを使用する理由
パッケージ仕様部
適切なパブリック項目
パッケージ仕様部の作成
パッケージ本体
パッケージのインスタンス化および初期化
パッケージの状態
SERIALLY_REUSABLEパッケージ
SERIALLY_REUSABLEパッケージの作成
SERIALLY_REUSABLEパッケージの作業単位
SERIALLY_REUSABLEパッケージの明示カーソル
パッケージ作成のガイドライン
パッケージの例
STANDARDパッケージによるPL/SQL環境の定義
11
PL/SQLのエラー処理
コンパイル時の警告
DBMS_WARNINGパッケージ
例外処理の概要
例外のカテゴリ
例外ハンドラのメリット
例外の回避および処理のガイドライン
内部的に定義された例外
事前定義の例外
ユーザー定義の例外
再宣言された事前定義の例外
例外の明示的な呼出し
RAISE文
ユーザー定義の例外のRAISE文による呼出し
内部的に定義された例外のRAISE文による呼出し
現行の例外のRAISE文による再呼出し
RAISE_APPLICATION_ERRORプロシージャ
例外の伝播
宣言の中で呼び出された例外の伝播
例外ハンドラの中で呼び出された例外の伝播
未処理例外
エラー・コードとエラー・メッセージの取得
例外処理後に実行を続ける方法
例外処理後のトランザクションの再試行
分散問合せでのエラー処理
12
PL/SQLの最適化とチューニング
PL/SQLオプティマイザ
サブプログラムのインライン化
チューニングの候補
CPUオーバーヘッドの最小化
SQL文のチューニング
問合せにおけるファンクションの起動のチューニング
サブプログラムの起動のチューニング
ループのチューニング
計算集中型PL/SQLコードのチューニング
ハードウェア算術を使用するデータ型の使用
パフォーマンスを重視するコードでの制約付きサブタイプの回避
暗黙的なデータ型変換の最少化
SQL文字関数の使用
最低コストの条件テストの先頭への配置
バルクSQLおよびバルク・バインド
FORALL文
疎コレクションに対するFORALL文の使用
FORALL文での未処理例外
FORALL例外の即時処理
FORALL文が完了した後のFORALL例外の処理
疎コレクションおよびSQL%BULK_EXCEPTIONS
FORALL文の影響を受ける行の数の取得
BULK COLLECT句
BULK COLLECT句を使用したSELECT INTO文
SELECT BULK COLLECT INTO文およびエイリアシング
SELECT BULK COLLECT INTO文の行の制限
コレクションのループのガイドライン
BULK COLLECT句を使用したFETCH文
FETCH BULK COLLECT文の行の制限
BULK COLLECT句を使用したRETURNING INTO句
FORALL文とBULK COLLECT句の併用
ホスト配列のクライアント・バルク・バインド
複数変換用のパイプライン・テーブル・ファンクションの連鎖
テーブル・ファンクションの概要
パイプライン・テーブル・ファンクションの作成
変換ファンクションとしてのパイプライン・テーブル・ファンクション
パイプライン・テーブル・ファンクションの連鎖
パイプライン・テーブル・ファンクションの結果からのフェッチ
パイプライン・テーブル・ファンクションへのCURSOR式の引渡し
パイプライン・テーブル・ファンクションの結果に対するDML文
NO_DATA_NEEDED例外
大規模な表のパラレルでの更新
ユーザー定義の識別子に関するデータの収集
PL/SQLプログラムのプロファイルおよびトレース
プロファイラAPI: DBMS_PROFILERパッケージ
トレースAPI: DBMS_TRACEパッケージ
システム固有の実行のためのPL/SQLユニットのコンパイル
PL/SQLのネイティブ・コンパイルを使用するかどうかの判断
PL/SQLのネイティブ・コンパイルの動作
依存性、無効化および再評価
PL/SQLのネイティブ・コンパイルで使用する新しいデータベースの設定
PL/SQLネイティブ・コンパイルまたは解釈コンパイルで使用するデータベース全体のコンパイル
13
PL/SQLの言語要素
代入文
AUTONOMOUS_TRANSACTIONプラグマ
基本LOOP文
ブロック
CASE文
CLOSE文
コレクション・メソッドの起動
コレクション変数の宣言
コメント
定数の宣言
CONTINUE文
カーソルFOR LOOP文
カーソル変数の宣言
DELETE文の拡張機能
EXCEPTION_INITプラグマ
例外宣言
例外ハンドラ
EXECUTE IMMEDIATE文
EXIT文
明示カーソルの宣言および定義
式
FETCH文
FOR LOOP文
FORALL文
仮パラメータの宣言
ファンクションの宣言および定義
GOTO文
IF文
暗黙カーソル属性
INLINEプラグマ
INSERT文の拡張機能
名前付きカーソル属性
NULL文
OPEN文
OPEN FOR文
PIPE ROW文
プロシージャの宣言および定義
RAISE文
レコード変数の宣言
RESTRICT_REFERENCESプラグマ
RETURN文
RETURNING INTO句
%ROWTYPE属性
スカラー変数の宣言
SELECT INTO文
SERIALLY_REUSABLEプラグマ
SQLCODEファンクション
SQLERRMファンクション
%TYPE属性
UDFプラグマ
UPDATE文の拡張機能
WHILE LOOP文
14
ストアドPL/SQLユニット用のSQL文
ALTER FUNCTION文
ALTER LIBRARY文
ALTER PACKAGE文
ALTER PROCEDURE文
ALTER TRIGGER文
ALTER TYPE文
CREATE FUNCTION文
CREATE LIBRARY文
CREATE PACKAGE文
CREATE PACKAGE BODY文
CREATE PROCEDURE文
CREATE TRIGGER文
CREATE TYPE文
CREATE TYPE BODY文
DROP FUNCTION文
DROP LIBRARY文
DROP PACKAGE文
DROP PROCEDURE文
DROP TRIGGER文
DROP TYPE文
DROP TYPE BODY文
A
PL/SQLのソース・テキストのラップ
PL/SQLソース・テキストのラップの制限
PL/SQLソース・テキストのラップのガイドライン
PL/SQLラッパー・ユーティリティによるPL/SQLソース・テキストのラップ
DBMS_DDLサブプログラムによるPL/SQLソース・テキストのラップ
B
PL/SQLの名前解決
修飾名およびドット表記法
列名の優先順位
PL/SQLとSQLでの名前解決ルールの相違点
静的SQL文における名前解決
取得
外部取得
同一有効範囲の取得
内部取得
SELECT文およびDML文の内部取得の回避
属性およびメソッドへの参照の修飾
行の式への参照の修飾
C
PL/SQLのプログラム上の制限
D
PL/SQLの予約語およびキーワード
E
PL/SQLの事前定義のデータ型
索引