ヘッダーをスキップ
Oracle Database PL/SQL言語リファレンス
11
g
リリース1(11.1)
E05670-03
索引
次へ
目次
例一覧
図一覧
表一覧
タイトルおよび著作権表示
はじめに
対象読者
ドキュメントのアクセシビリティについて
関連ドキュメント
表記規則
構文の説明
サポートおよびサービス
PL/SQLの新機能
11
g
リリース1 (11.1)でのPL/SQLの新機能
1
PL/SQLの概要
PL/SQLのメリット
SQLとの緊密な統合
高いパフォーマンス
高い生産性
完全な移植性
優れたセキュリティ
事前定義パッケージへのアクセス
オブジェクト指向プログラミングのサポート
WebアプリケーションおよびServer Pages開発のサポート
PL/SQLの主な特長
PL/SQLブロック
PL/SQLのエラー処理
PL/SQLの入出力
PL/SQLの変数および定数
PL/SQL変数の宣言
変数への値の代入
PL/SQL定数の宣言
バインド変数
PL/SQLのデータの抽象化
カーソル
%TYPE属性
%ROWTYPE属性
コレクション
レコード
オブジェクト型
PL/SQLの制御構造
条件制御
反復制御
順次制御
PL/SQLサブプログラム
スタンドアロンPL/SQLサブプログラム
トリガー
PL/SQLパッケージ(PL/SQLで記述されたAPI)
条件付きコンパイル
埋込みSQL文
PL/SQLのアーキテクチャ
PL/SQLエンジン
PL/SQLユニットおよびコンパイル・パラメータ
2
PL/SQL言語の基礎
キャラクタ・セットおよび字句単位
デリミタ
識別子
予約語およびキーワード
事前定義の識別子
二重引用符で囲んだ識別子
リテラル
数値リテラル
文字リテラル
文字列リテラル
ブール・リテラル
日付および時間リテラル
コメント
単一行コメント
複数行コメント
宣言
変数
定数
DEFAULTの使用
NOT NULLの使用
%TYPE属性の使用
%ROWTYPE属性の使用
集計代入
エイリアシングの使用
宣言の制限
ネーミング規則
有効範囲
大/小文字の区別
名前解決
シノニム
PL/SQLの識別子の有効範囲と可視性
変数への値の代入
ブール値の代入
PL/SQL変数へのSQL問合せ結果の代入
PL/SQLの式および比較
連結演算子
演算子の優先順位
論理演算子
評価の順序
短絡評価
比較演算子
ブール式
ブール算術式
ブール文字式
ブール日付式
ブール式のガイドライン
CASE式
単純なCASE式
検索CASE式
比較文と条件文でのNULL値の扱い
NULL値とNOT演算子
NULL値と長さ0(ゼロ)の文字列
NULL値と連結演算子
組込みファンクションの引数としてのNULL値
PL/SQLエラー・レポート・ファンクション
PL/SQLでのSQLファンクションの使用
条件付きコンパイル
条件付きコンパイルの動作方法
条件付きコンパイルの制御トークン
条件付きコンパイルの選択ディレクティブの使用
条件付きコンパイルのエラー・ディレクティブの使用
条件付きコンパイルの問合せディレクティブの使用
条件付きコンパイルでの事前定義問合せディレクティブの使用
条件付きコンパイルでの静的な式の使用
DBMS_DB_VERSIONパッケージ定数の使用
条件付きコンパイルの例
条件付きコンパイルを使用してデータベースのバージョンのコードを指定する方法
DBMS_PREPROCESSORプロシージャを使用してソース・テキストの印刷または取出しを行う方法
条件付きコンパイルの制限
PL/SQLを使用してWebアプリケーションを作成する方法
PL/SQLを使用してServer Pagesを作成する方法
3
PL/SQLのデータ型
事前定義のPL/SQLのスカラー・データ型およびサブタイプ
事前定義のPL/SQLの数値データ型およびサブタイプ
PLS_INTEGERおよびBINARY_INTEGERデータ型
PLS_INTEGERのSIMPLE_INTEGERサブタイプ
BINARY_FLOATおよびBINARY_DOUBLEデータ型
NUMBERデータ型
事前定義のPL/SQLの文字データ型およびサブタイプ
CHARおよびVARCHAR2データ型
RAWデータ型
NCHARおよびNVARCHAR2データ型
LONGおよびLONG RAWデータ型
ROWIDおよびUROWIDデータ型
事前定義のPL/SQLのブール・データ型
事前定義のPL/SQLの日時データ型および時間隔データ型
DATEデータ型
TIMESTAMPデータ型
TIMESTAMP WITH TIME ZONEデータ型
TIMESTAMP WITH LOCAL TIME ZONEデータ型
INTERVAL YEAR TO MONTHデータ型
INTERVAL DAY TO SECONDデータ型
日時および時間隔の演算
日付および時刻のサブタイプを使用する場合の切捨て問題の回避
事前定義のPL/SQLのラージ・オブジェクト(LOB)・データ型
BFILEデータ型
BLOBデータ型
CLOBデータ型
NCLOBデータ型
ユーザー定義のPL/SQLサブタイプ
サブタイプの定義
サブタイプの使用
サブタイプのデータ型の互換性
サブタイプの制約およびデフォルト値
PL/SQLのデータ型変換
明示的な変換
暗黙的な変換
4
PL/SQLの制御構造の使用
PL/SQLの制御構造の概要
条件テスト(IF文およびCASE文)
IF-THEN文の使用
IF-THEN-ELSE文の使用
IF-THEN-ELSEIF文の使用
単純なCASE文の使用
検索CASE文の使用
IF文およびCASE文のガイドライン
ループの反復の制御(LOOP文、EXIT文およびCONTINUE文)
基本LOOP文の使用
EXIT文の使用
EXIT-WHEN文の使用
CONTINUE文の使用
CONTINUE-WHEN文の使用
PL/SQLループのラベル付け
WHILE-LOOP文の使用
FOR-LOOP文の使用
PL/SQLループの反復方法
ループの動的な範囲
ループ・カウンタ変数の有効範囲
FORループでのEXIT文の使用
順次制御(GOTO文およびNULL文)
GOTO文の使用
GOTO文の制限
NULL文の使用
5
PL/SQLのコレクションおよびレコードの使用
PL/SQLコレクション型の理解
結合配列(索引付き表)の理解
ネストした表の理解
可変サイズの配列(VARRAY)の理解
PL/SQLコレクション型の選択
ネストした表と結合配列の選択
ネストした表とVARRAYとの使い分け
コレクション型の定義
コレクション変数の宣言
コレクションの初期化および参照
コレクション要素の参照
コレクションへの値の代入
コレクションの比較
多次元コレクションの使用
コレクション・メソッドの使用
コレクション要素の存在のチェック(EXISTSメソッド)
コレクション内の要素数のカウント(COUNTメソッド)
コレクションの最大サイズのチェック(LIMITメソッド)
最初または最後のコレクション要素の検索(FIRSTメソッドとLASTメソッド)
コレクションの各要素のループ(PRIORメソッドとNEXTメソッド)
コレクションのサイズの拡大(EXTENDメソッド)
コレクションのサイズの縮小(TRIMメソッド)
コレクション要素の削除(DELETEメソッド)
コレクション・パラメータへのメソッドの適用
コレクション例外の回避
レコードの定義と宣言
サブプログラムのパラメータおよびファンクションの戻り値としてのレコードの使用
レコードへの値の代入
レコードの比較
データベースへのレコードの挿入
レコード値を使用したデータベースの更新
レコードの挿入/更新に関する制約
レコードのコレクションへのデータの問合せ
6
静的SQLの使用
静的SQLの説明
データ操作言語(DML)文
トランザクション制御言語(TCL)文
SQLファンクション
SQL擬似列
CURRVALとNEXTVAL
LEVEL
ROWID
ROWNUM
SQL演算子
比較演算子
集合演算子
行演算子
PL/SQLでのカーソルの管理
SQLカーソル(暗黙)
SQLカーソルの属性
SQLカーソルの属性を使用する場合のガイドライン
明示カーソル
カーソルの宣言
カーソルのオープン
カーソルを使用したフェッチ
カーソルを使用したバルク・データのフェッチ
カーソルのクローズ
明示カーソルの属性
PL/SQLを使用したデータの問合せ
1行のみの選択(SELECT INTO文)
複数行の選択(BULK COLLECT句)
複数行のループ(カーソルFORループ)
複雑な問合せの処理の実行(明示カーソル)
カーソルFORループ
SQLカーソルFOR LOOP
明示的カーソルFORループ
カーソルFORループ内の式の別名の定義
副問合せの使用
相関副問合せの使用
メンテナンス可能なPL/SQL副問合せの作成
カーソル変数(REF CURSOR)の使用
カーソル変数(REF CURSOR)
変数を使用する理由
REF CURSOR型およびカーソル変数の宣言
パラメータとしてのカーソル変数の引渡し
カーソル変数の制御(OPEN-FOR、FETCHおよびCLOSE文)
カーソル変数のオープン
ホスト変数としてのカーソル変数の使用
カーソル変数からのフェッチ
カーソル変数のクローズ
ホスト・カーソル変数をPL/SQLに渡すときのネットワークの通信量の削減
カーソル変数でのエラーの回避
カーソル変数の制限
カーソル式の使用
PL/SQLにおけるトランザクション処理の概要
PL/SQLでのCOMMITの使用
PL/SQLでのROLLBACKの使用
PL/SQLでのSAVEPOINTの使用
データベースによる暗黙的なロールバックの実行方法
トランザクションの終了
トランザクション・プロパティの設定(SET TRANSACTION文)
デフォルトのロックの上書き
FOR UPDATEの使用
LOCK TABLEの使用
コミットにまたがるフェッチ
自律型トランザクションによる独立した作業単位の実行
自律型トランザクションのメリット
自律型トランザクションの定義
自律型トランザクションとネストしたトランザクションの比較
トランザクション・コンテキスト
トランザクションの可視性
自律型トランザクションの制御
開始と終了
コミットとロールバック
セーブポイントの使用
自律型トランザクションでのエラーの回避
自律型トリガーの使用
SQLからの自律型ファンクションの起動
7
動的SQLの使用
動的SQLが必要な場合
システム固有の動的SQLの使用
EXECUTE IMMEDIATE文の使用
OPEN-FOR文、FETCH文およびCLOSE文の使用
動的SQL文内でのプレースホルダ名の繰返し
動的SQL文が無名ブロックまたはCALL文でない
動的SQL文が無名ブロックまたはCALL文
DBMS_SQLパッケージの使用
DBMS_SQL.TO_REFCURSORファンクション
DBMS_SQL.TO_CURSOR_NUMBERファンクション
PL/SQLでのSQLインジェクションの回避
SQLインジェクション方法の概要
文の変更
文のインジェクション
データ型変換
SQLインジェクションの回避
バインド引数を使用したSQLインジェクションの回避
妥当性チェックを使用したSQLインジェクションの回避
明示的な書式モデルを使用したSQLインジェクションの回避
8
PL/SQLのサブプログラムの使用
PL/SQLサブプログラムの概要
サブプログラムの各部
相互に起動し合うネストしたサブプログラムの作成
サブプログラムのパラメータの宣言および引渡し
サブプログラムの仮パラメータと実パラメータ
サブプログラムのパラメータのモードの指定
INモードの使用
OUTモードの使用
IN OUTモードの使用
サブプログラムのパラメータのモードの概要
サブプログラムのパラメータのデフォルト値の指定
位置表記法、名前表記法または混合表記法でのサブプログラムの実パラメータの引渡し
PL/SQLサブプログラム名のオーバーロード
数値型のオーバーロードのガイドライン
オーバーロードの制限
コンパイラがオーバーロード・エラーを捕捉する場合
PL/SQLサブプログラムのコールの解決方法
実行者権限または定義者権限の使用(AUTHID句)
AUTHID CURRENT_USERとAUTHID DEFINERとの使い分け
AUTHIDおよびSQLコマンドSET ROLE
IRサブプログラムでのテンプレート・オブジェクトの必要性
IRサブプログラムでのデフォルトの名前解決のオーバーライド
IRサブプログラムでのビューおよびデータベース・トリガーの使用
IRサブプログラムでのデータベース・リンクの使用
IRサブプログラムでのオブジェクト型の使用
IRインスタンス・メソッドの起動
再帰的PL/SQLサブプログラムの使用
外部サブプログラムの起動
PL/SQLサブプログラムの副作用の制御
PL/SQLサブプログラムのパラメータのエイリアシングの理解
PL/SQLファンクション結果キャッシュの使用
ファンクションの結果キャッシュの有効化
結果がキャッシュされるファンクションを使用するアプリケーションの開発
結果がキャッシュされるファンクションの制限
結果がキャッシュされるファンクションの例
結果がキャッシュされるアプリケーション構成パラメータ
結果がキャッシュされる再帰ファンクション
結果がキャッシュされるファンクションの高度なトピック
キャッシュ・ヒットの規則
結果キャッシュのバイパス
結果がキャッシュされるファンクションによるセッション固有の設定の処理
結果がキャッシュされるファンクションによるセッション固有のアプリケーション・コンテキストの処理
結果キャッシュの粒度の選択
Oracle RAC環境での結果キャッシュ
結果キャッシュの管理
結果がキャッシュされるファンクションが依存するPL/SQLユニットへのホット・パッチの適用
9
トリガーの使用
トリガーの概要
トリガーのタイプ
トリガーの状態
トリガーのデータ・アクセス
トリガーの使用
トリガーを設計する場合のガイドライン
トリガーの使用に必要な権限
トリガーの作成
トリガーの名前指定
トリガーが起動するタイミング
インポートおよびSQL*Loaderによるトリガーの起動
列リストのUPDATEトリガーに対する影響
トリガーが起動するタイミングの制御(BEFOREオプションおよびAFTERオプション)
トリガーの順序
複合ビューの変更(INSTEAD OFトリガー)
INSTEAD OFトリガーが必要なビュー
ネストした表のビューの列に対するトリガー
例: INSTEAD OFトリガー
トリガーの1回または複数回の起動(FOR EACH ROWオプション)
条件に基づいたトリガーの起動(WHEN句)
複合トリガー
複合トリガーを使用する理由
複合トリガーの部分
複合トリガーのトリガーを起動する文
複合トリガーの制限
複合トリガーの例
複合トリガーを使用した変更表エラーの回避
トリガー本体のコーディング
行トリガーでの列値へのアクセス
例: トリガーを使用したLOB列の変更
ネストした表のビューの列に対するINSTEAD OFトリガー
トリガーとの名前の競合の回避(REFERENCINGオプション)
トリガーを起動したDML操作の検出
トリガー本体内のエラー条件および例外
オブジェクト表に対するトリガー
トリガーおよびリモート例外処理
トリガー作成の制限
トリガーの最大サイズ
トリガー本体で使用可能なSQL文
LONGおよびLONG RAWデータ型に対するトリガー制限
変更表に対するトリガー制限
変更表に対する制限の緩和
システム・トリガーの制限
外部ファンクションのコールアウト
トリガーを使用するユーザー
トリガーのコンパイル
トリガーの依存性
トリガーの再コンパイル
トリガーの変更
トリガーのデバッグ
トリガーの有効化
トリガーの無効化
トリガーに関する情報の表示
トリガー・アプリケーションの例
トリガーを使用した監査
制約およびトリガー
トリガーを使用した参照整合性
子表に対する外部キー・トリガー
親表に対するUPDATEおよびDELETE RESTRICTトリガー
親表に対するUPDATEおよびDELETE SET NULLトリガー
親表に対するDELETE CASCADEトリガー
親表に対するUPDATE CASCADEトリガー
複雑なチェック制約に対するトリガー
複雑なセキュリティ認可およびトリガー
透過的なイベント・ロギングおよびトリガー
導出列値およびトリガー
トリガーを使用した複合更新可能ビューの作成
トリガーを使用したファイングレイン・アクセス制御
トリガーを介したデータベース・イベントに対する応答
トリガーを介したイベントのパブリッシュ方法
パブリケーション・コンテキスト
エラーの処理
実行モデル
イベント属性ファンクション
データベース・イベント
クライアント・イベント
10
PL/SQLパッケージの使用
PL/SQLパッケージ
PL/SQLパッケージの内容
PL/SQLパッケージのメリット
PL/SQLパッケージ仕様部の理解
PL/SQLパッケージの内容の参照
PL/SQLパッケージ本体の理解
PL/SQLパッケージ機能の例
PL/SQLパッケージのプライベート項目とパブリック項目
STANDARDパッケージによるPL/SQL環境の定義
製品固有のPL/SQLパッケージの概要
DBMS_ALERTパッケージ
DBMS_OUTPUTパッケージ
DBMS_PIPEパッケージ
DBMS_CONNECTION_POOLパッケージ
HTFパッケージおよびHTPパッケージ
UTL_FILEパッケージ
UTL_HTTPパッケージ
UTL_SMTPパッケージ
PL/SQLパッケージ作成のガイドライン
PL/SQLパッケージでのカーソル仕様部と本体の分離
11
PL/SQLエラーの処理
PL/SQLのランタイム・エラー処理の概要
PL/SQLエラーと例外の回避および処理のガイドライン
PL/SQL例外のメリット
事前定義のPL/SQL例外
独自のPL/SQL例外の定義
PL/SQL例外の宣言
PL/SQL例外の有効範囲規則
PL/SQL例外と番号の関連付け(EXCEPTION_INITプラグマ)
独自のエラー・メッセージの定義(RAISE_APPLICATION_ERRORプロシージャ)
事前定義の例外の再宣言
PL/SQL例外の呼出し
PL/SQL例外の伝播
PL/SQL例外の再呼出し
呼び出されたPL/SQL例外の処理
宣言の中で呼び出された例外
例外ハンドラの中で呼び出された例外の処理
例外ハンドラへの分岐と例外ハンドラからの分岐
エラー・コードとエラー・メッセージの取得
未処理例外の捕捉
PL/SQLエラーの処理のガイドライン
例外が呼び出された後に実行を続ける方法
トランザクションの再試行
ロケータ変数を使用した例外の位置の識別
PL/SQLのコンパイル時の警告の概要
PL/SQLの警告カテゴリ
PL/SQL警告メッセージの制御
DBMS_WARNINGパッケージの使用
12
PL/SQLアプリケーションのパフォーマンスのチューニング
PL/SQLでプログラムを最適化する方法
PL/SQLコードをチューニングする場合
PL/SQLのパフォーマンス問題を回避するためのガイドライン
PL/SQLコードでのCPUオーバーヘッドの回避
SQL文の最大限の効率化
ファンクション・コールの最大限の効率化
ループの最大限の効率化
組込み文字列ファンクションの使用
最低コストの条件テストの先頭への配置
データ型変換の最少化
整数の算術計算でのPLS_INTEGERまたはSIMPLE_INTEGERの使用
浮動小数点の算術計算でのBINARY_FLOAT、BINARY_DOUBLE、SIMPLE_FLOATおよびSIMPLE_DOUBLEの使用
PL/SQLコードでのメモリー・オーバーヘッドの回避
4000文字以上のVARCHAR2変数の宣言
関連するサブプログラムのパッケージへのグループ化
共有メモリー・プールでのパッケージの確保
コンパイラ警告のアドバイスの適用
ユーザー定義の識別子に関するデータの収集
PL/SQLプログラムのプロファイルおよびトレース
プロファイラAPIの使用: DBMS_PROFILERパッケージ
トレースAPIの使用: DBMS_TRACEパッケージ
バルクSQLによる、DML文および問合せのループ・オーバーヘッドの削減
1つのDML文の複数回の実行(FORALL文)
FORALLがロールバックに与える影響
FORALLによる影響を受ける行カウント(%BULK_ROWCOUNT属性)
FORALL例外の処理(%BULK_EXCEPTIONS属性)
コレクションへの問合せ結果の取出し(BULK COLLECT句)
カーソルからのバルク・フェッチの例
バルク・フェッチ操作の対象行の制限(LIMIT句)
コレクションへのDML結果の取出し(RETURNING INTO句)
FORALLとBULK COLLECTの併用
バルク・バインドとホスト配列の併用
SELECT BULK COLLECT INTO文およびエイリアシング
計算集中型PL/SQLプログラムの記述
EXECUTE IMMEDIATE文およびカーソル変数を使用した動的SQLのチューニング
NOCOPYヒントを使用したPL/SQLサブプログラム・コールのチューニング
システム固有の実行のためのPL/SQLユニットのコンパイル
PL/SQLのネイティブ・コンパイルを使用するかどうかの判断
PL/SQLのネイティブ・コンパイルの動作
依存性、無効化および再評価
PL/SQLのネイティブ・コンパイルで使用する新しいデータベースの設定
PL/SQLネイティブ・コンパイルまたは解釈コンパイルで使用するデータベース全体のコンパイル
パイプライン・テーブル・ファンクションを使用した複数の変換の実行
パイプライン・テーブル・ファンクションの概要
パイプライン・テーブル・ファンクションの記述
変換へのパイプライン・テーブル・ファンクションの使用
パイプライン・テーブル・ファンクションからの結果の戻し
PL/SQLテーブル・ファンクション間のデータのパイプライン
パイプライン・テーブル・ファンクションに対する複数コールの最適化
パイプライン・テーブル・ファンクションの結果からのフェッチ
カーソル変数によるデータの引渡し
パイプライン・テーブル・ファンクション内でのDML操作の実行
パイプライン・テーブル・ファンクションへのDML操作の実行
パイプライン・テーブル・ファンクションの例外処理
13
PL/SQLの言語要素
代入文
AUTONOMOUS_TRANSACTIONプラグマ
ブロック
CASE文
CLOSE文
コレクション
コレクション・メソッド・コール
コメント
定数
CONTINUE文
カーソル属性
カーソル変数宣言
EXCEPTION_INITプラグマ
例外宣言
例外ハンドラ
EXECUTE IMMEDIATE文
EXIT文
明示カーソル
式
FETCH文
FORALL文
ファンクション宣言と定義
GOTO文
IF文
INLINEプラグマ
リテラル
LOOP文
NULL文
OPEN文
OPEN-FOR文
パラメータ宣言
プロシージャ宣言と定義
RAISE文
レコード定義
RESTRICT_REFERENCESプラグマ
RETURN文
RETURNING INTO句
%ROWTYPE属性
SELECT INTO文
SERIALLY_REUSABLEプラグマ
SQLの(暗黙)カーソル属性
SQLCODEファンクション
SQLERRMファンクション
%TYPE属性
変数
14
ストアドPL/SQLユニット用のSQL文
ALTER FUNCTION文
ALTER PACKAGE文
ALTER PROCEDURE文
ALTER TRIGGER文
ALTER TYPE文
CREATE FUNCTION文
CREATE PACKAGE文
CREATE PACKAGE BODY文
CREATE PROCEDURE文
CREATE TRIGGER文
CREATE TYPE文
CREATE TYPE BODY文
DROP FUNCTION文
DROP PACKAGE文
DROP PROCEDURE文
DROP TRIGGER文
DROP TYPE文
DROP TYPE BODY文
A
PL/SQLのソース・コードのラップ
ラップの概要
ラップのガイドライン
ラップの制限
wrapユーティリティを使用したPL/SQLコードのラップ
PL/SQLのwrapユーティリティの入力ファイルと出力ファイル
wrapユーティリティの実行
PL/SQLのwrapユーティリティの制限
DBMS_DDLサブプログラムを使用したPL/SQLコードのラップ
DBMS_DDL.CREATE_WRAPPEDプロシージャの使用
DBMS_DDL.WRAPファンクションの制限
B
PL/SQLでの識別子名の解決
名前解決
修飾名およびドット表記法の例
PL/SQLとSQLでの名前解決の相違点
取得
内部取得
同一有効範囲の取得
外部取得
DML文の内部取得の回避
属性およびメソッドへの参照の修飾
行の式への参照の修飾
C
PL/SQLのプログラム上の制限
D
PL/SQLの予約語およびキーワード
索引