Oracle® TimesTen In-Memory Database

PL/SQLパッケージ・リファレンス

11gリリース2(11.2.2)

B66725-05(原本部品番号:E21645-06)

2014年10月

Oracle TimesTen In-Memory Database PL/SQLパッケージ・リファレンス, 11gリリース2(11.2.2)

B66725-05

Copyright © 1996, 2014, Oracle and/or its affiliates.All rights reserved.

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

目次

タイトルおよび著作権情報

はじめに

- 対象読者

- 関連ドキュメント

- 表記規則

- ドキュメントのアクセシビリティについて

新機能

- リリース11.2.2.5.0の新機能

- リリース11.2.2.1.0の新機能

1 TimesTenが提供するPL/SQLパッケージおよびタイプの概要

- パッケージの概要

- パッケージのコンポーネント

- TimesTenが提供するパッケージの使用

- パッケージ内容の参照

- パッケージの例の実行

- TimesTenが提供するPL/SQLパッケージの概要

2 DBMS_LOB

- DBMS_LOBの使用方法

- 概要

- セキュリティ・モデル

- 定数

- データ・タイプ

- ルールおよび制限

- 一般的なルールおよび制限

- 最大LOBサイズ

- 最大バッファ・サイズ

- 使用上の注意

- 永続LOB

- 一時LOB

- 例外

- DBMS_LOBサブプログラムの要約

- APPENDプロシージャ

- CLOSEプロシージャ

- COMPAREファンクション

- CONVERTTOBLOBプロシージャ

- CONVERTTOCLOBプロシージャ

- COPYプロシージャ

- CREATETEMPORARYプロシージャ

- ERASEプロシージャ

- FREETEMPORARYプロシージャ

- GETCHUNKSIZEファンクション

- GETLENGTHファンクション

- GET_STORAGE_LIMITファンクション

- INSTRファンクション

- ISOPENファンクション

- ISTEMPORARYファンクション

- OPENプロシージャ

- READプロシージャ

- SUBSTRファンクション

- TRIMプロシージャ

- WRITEプロシージャ

- WRITEAPPENDプロシージャ

3 DBMS_LOCK

- DBMS_LOCKの使用

- DBMS_LOCKサブプログラムの要約

- SLEEPプロシージャ

4 DBMS_OUTPUT

- DBMS_OUTPUTの使用

- 概要

- 使用上の注意

- ルールおよび制限

- 例外

- 例

- データ構造

- CHARARR表タイプ

- DBMSOUTPUT_LINESARRAY表タイプ

- DBMS_OUTPUTサブプログラムの要約

- DISABLEプロシージャ

- ENABLEプロシージャ

- GET_LINEプロシージャ

- GET_LINESプロシージャ

- NEW_LINEプロシージャ

- PUTプロシージャ

- PUT_LINEプロシージャ

5 DBMS_PREPROCESSOR

- DBMS_PREPROCESSORの使用

- 概要

- 使用上の注意

- データ構造

- SOURCE_LINES_T表タイプ

- DBMS_PREPROCESSORサブプログラムの要約

- GET_POST_PROCESSED_SOURCEファンクション

- PRINT_POST_PROCESSED_SOURCEプロシージャ

6 DBMS_RANDOM

- DBMS_RANDOMの使用

- 使用上の注意

- DBMS_RANDOMサブプログラムの要約

- INITIALIZEプロシージャ

- NORMALファンクション

- RANDOMファンクション

- SEEDプロシージャ

- STRINGファンクション

- TERMINATEプロシージャ

- VALUEファンクション

7 DBMS_SQL

- DBMS_SQLの使用

- 概要

- セキュリティ・モデル

- 定数

- 使用上の注意

- 実行フロー

- 問合せの処理

- 更新、挿入および削除の処理

- エラーの位置

- 例外

- 例

- データ構造

- DESC_RECレコード・タイプ

- DESC_REC2レコード・タイプ

- DESC_REC3レコード・タイプ

- BINARY_DOUBLE_TABLE表タイプ

- BINARY_FLOAT_TABLE表タイプ

- BLOB_TABLE表タイプ

- CLOB_TABLE表タイプ

- DATE_TABLE表タイプ

- DESC_TAB表タイプ

- DESC_TAB2表タイプ

- DESC_TAB3表タイプ

- INTERVAL_DAY_TO_SECOND_TABLE表タイプ

- INTERVAL_YEAR_TO_MONTH_TABLE表タイプ

- NUMBER_TABLE表タイプ

- TIME_TABLE表タイプ

- TIMESTAMP_TABLE表タイプ

- VARCHAR2_TABLE表タイプ

- VARCHAR2A表タイプ

- VARCHAR2S表タイプ

- DBMS_SQLサブプログラムの要約

- BIND_ARRAYプロシージャ

- BIND_VARIABLEプロシージャ

- CLOSE_CURSORプロシージャ

- COLUMN_VALUEプロシージャ

- DEFINE_ARRAYプロシージャ

- DEFINE_COLUMNプロシージャ

- DESCRIBE_COLUMNSプロシージャ

- DESCRIBE_COLUMNS2プロシージャ

- DESCRIBE_COLUMNS3プロシージャ

- EXECUTEファンクション

- EXECUTE_AND_FETCHファンクション

- FETCH_ROWSファンクション

- IS_OPENファンクション

- LAST_ERROR_POSITIONファンクション

- LAST_ROW_COUNTファンクション

- LAST_ROW_IDファンクション

- LAST_SQL_FUNCTION_CODEファンクション

- OPEN_CURSORファンクション

- PARSEプロシージャ

- TO_CURSOR_NUMBERファンクション

- TO_REFCURSORファンクション

- VARIABLE_VALUEプロシージャ

8 DBMS_UTILITY

- DBMS_UTILITYの使用

- セキュリティ・モデル

- 定数

- データ・タイプ

- dblink_array

- index_table_type

- instance_record

- lname_array

- name_array

- number_array

- uncl_array

- 例外

- DBMS_UTILITYサブプログラムの要約

- CANONICALIZEプロシージャ

- COMMA_TO_TABLEプロシージャ

- COMPILE_SCHEMAプロシージャ

- DB_VERSIONプロシージャ

- FORMAT_CALL_STACKファンクション

- FORMAT_ERROR_BACKTRACEファンクション

- FORMAT_ERROR_STACKファンクション

- GET_CPU_TIMEファンクション

- GET_DEPENDENCYプロシージャ

- GET_ENDIANNESSファンクション

- GET_HASH_VALUEファンクション

- GET_SQL_HASHファンクション

- GET_TIMEファンクション

- INVALIDATEプロシージャ

- IS_BIT_SETファンクション

- NAME_RESOLVEプロシージャ

- NAME_TOKENIZEプロシージャ

- TABLE_TO_COMMAプロシージャ

- VALIDATEプロシージャ

9 TT_DB_VERSION

- TT_DB_VERSIONの使用

- 概要

- 定数

- 例

10 TT_STATS

- TT_STATSの使用

- 概要

- セキュリティ・モデル

- 使用上の注意

- TT_STATSサブプログラムの要約

- CAPTURE_SNAPSHOTプロシージャおよびファンクション

- DROP_SNAPSHOTS_RANGEプロシージャ

- GENERATE_REPORT_HTMLプロシージャ

- GENERATE_REPORT_TEXTプロシージャ

- GET_CONFIGプロシージャ

- SET_CONFIGプロシージャ

- SHOW_SNAPSHOTSプロシージャ

11 UTL_FILE

- UTL_FILEの使用

- セキュリティ・モデル

- 使用上の注意

- ルールおよび制限

- 例外

- 例

- データ構造

- FILE_TYPEレコード・タイプ

- UTL_FILEサブプログラムの要約

- FCLOSEプロシージャ

- FCLOSE_ALLプロシージャ

- FCOPYプロシージャ

- FFLUSHプロシージャ

- FGETATTRプロシージャ

- FGETPOSファンクション

- FOPENファンクション

- FOPEN_NCHARファンクション

- FREMOVEプロシージャ

- FRENAMEプロシージャ

- FSEEKプロシージャ

- GET_LINEプロシージャ

- GET_LINE_NCHARプロシージャ

- GET_RAWプロシージャ

- IS_OPENファンクション

- NEW_LINEプロシージャ

- PUTプロシージャ

- PUT_LINEプロシージャ

- PUT_LINE_NCHARプロシージャ

- PUT_NCHARプロシージャ

- PUT_RAWプロシージャ

- PUTFプロシージャ

- PUTF_NCHARプロシージャ

12 UTL_IDENT

- UTL_IDENTの使用

- 概要

- セキュリティ・モデル

- 定数

- 例

13 UTL_RAW

- UTL_RAWの使用

- 概要

- 使用上の注意

- UTL_RAWサブプログラムの要約

- BIT_ANDファンクション

- BIT_COMPLEMENTファンクション

- BIT_ORファンクション

- BIT_XORファンクション

- CAST_FROM_BINARY_DOUBLEファンクション

- CAST_FROM_BINARY_FLOATファンクション

- CAST_FROM_BINARY_INTEGERファンクション

- CAST_FROM_NUMBERファンクション

- CAST_TO_BINARY_DOUBLEファンクション

- CAST_TO_BINARY_FLOATファンクション

- CAST_TO_BINARY_INTEGERファンクション

- CAST_TO_NUMBERファンクション

- CAST_TO_NVARCHAR2ファンクション

- CAST_TO_RAWファンクション

- CAST_TO_VARCHAR2ファンクション

- COMPAREファンクション

- CONCATファンクション

- CONVERTファンクション

- COPIESファンクション

- LENGTHファンクション

- OVERLAYファンクション

- REVERSEファンクション

- SUBSTRファンクション

- TRANSLATEファンクション

- TRANSLITERATEファンクション

- XRANGEファンクション

14 UTL_RECOMP

- UTL_RECOMPの使用

- 概要

- 使用上の注意

- 例

- UTL_RECOMPサブプログラムの要約

- RECOMP_PARALLELプロシージャ

- RECOMP_SERIALプロシージャ

索引

はじめに

Oracle TimesTen In-Memory Database (TimesTen)は、迅速な応答およびスループット用にメモリーが最適化されたリレーショナル・データベースです。実行時にはデータベース全体がメモリーに常駐し、リカバリおよび再起動できるようにディスク記憶域に保存されます。レプリケーション機能によって、高可用性が実現します。TimesTenでは、OracleインタフェースであるPL/SQL、OCIおよびPro*C/C++に加えて、標準的なアプリケーション・インタフェースであるJDBC、ODBCおよびODP.NETがサポートされます。TimesTenは、単独で使用することもOracle Databaseのキャッシュとして使用することもできます。

このマニュアルでは、TimesTenに用意されているPL/SQLパッケージを参照します。

ここでは、次の項目について説明します。

- 対象読者

- 関連ドキュメント

- 表記規則

- ドキュメントのアクセシビリティについて

対象読者

『Oracle TimesTen In-Memory Database PL/SQLパッケージ・リファレンス』は、プログラマ、システム・アナリスト、プロジェクト・マネージャ、およびPL/SQLを使用したデータベース・アプリケーションの開発に関心のあるユーザーを対象としています。このマニュアルでは、読者にアプリケーション・プログラミングについての作業知識があること、リレーショナル・データベース・システムの情報にアクセスするためのSQLおよびPL/SQLの使用経験が十分にあることを前提としています。

関連ドキュメント

TimesTenのドキュメントは、次のURLのOracle Technology Networkで入手できます。

http://www.oracle.com/technetwork/database/database-technologies/timesten/documentation/index.html

『Oracle TimesTen In-Memory Database PL/SQL開発者ガイド』が特に関連しています。

Oracle Databaseのドキュメントは、Oracle Technology Networkでも入手できます。これは、TimesTenでサポートされているが、詳しく説明されていないOracle Databaseの機能の場合に役立ちます。

http://www.oracle.com/pls/db112/homepage

特に、次のOracle Databaseドキュメントが役立ちます。

- 『Oracle Database PL/SQL言語リファレンス』

- 『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』

- 『Oracle Database SQL言語リファレンス』

- 『Oracle Databaseリファレンス』

また、PL/SQLについて詳しく説明しているサードパーティのドキュメントも多数利用できます。

表記規則

TimesTenは複数のプラットフォームをサポートしています。このマニュアルに記述されている内容は、特に表記しないかぎり、サポートされるすべてのプラットフォームに適用されます。Windowsという用語は、サポートされているすべてのWindowsプラットフォームを指します。UNIXという用語は、サポートされるすべてのUNIXおよびLinuxプラットフォームを表します。TimesTenでサポートされるプラットフォームの具体的なバージョンについては、『Oracle TimesTen In-Memory Databaseリリース・ノート』のプラットフォームに関する説明を参照してください。

注意:
TimesTenドキュメントでは、用語としての「データ・ストア」と「データベース」は同じです。両方の用語は、TimesTenデータベースを指します。

このマニュアルでは次の表記規則を使用します。

規則

意味

イタリック体

イタリックは、テキストで定義される用語、ドキュメントのタイトルまたは強調を示します。

固定幅フォント

固定幅フォントは、コマンド、URL、プロシージャ名、ファンクション名、パッケージ名、属性名、ディレクトリ名、ファイル名、画面に表示されるテキスト、または入力するテキストを示します。

固定幅フォントのイタリック

固定幅フォントのイタリックは、次の例のように、置き換える必要があるコード例の変数です。
Driver=install_dir/lib/libtten.sl

これは、install_dirをご使用のTimesTenインストール・ディレクトリに置き換える必要があることを意味します。

[ ]

大カッコは、カッコ内の項目を任意に選択することを表します(大カッコは、入力しないでください)。

{ }

中カッコは、カッコ内の項目のうち、1つが必須であることを表します(中カッコは、入力しないでください)。

|

選択項目の引数を区切る縦線(パイプ)。

. . .

引数の後の水平の省略記号は、1行のコマンドラインで複数の引数を使用できることを表します。

%

%は、UNIXのシェル・プロンプトを表します。

TimesTenのマニュアルでは、次の変数を使用して、パス、ファイルおよびユーザー名を表します。

規則

意味

install_dir

TimesTenがインストールされているディレクトリのパスです。

TTinstance

TimesTenのインストールで指定するインスタンス名です。インストール時に、一意のインスタンス名でTimesTenの各インストールを識別する必要があります。この名前はインストール・パスに表示されます。

bitsまたはbb

32または64の2桁の数字は、32-bitまたは64-bitのオペレーティング・システムを表します。

releaseまたはrr

リリース番号の最初の3つの部分(ドットが付く場合と付かない場合があります)。リリース番号の最初の3つの部分は、TimesTenのメジャー・リリースを表します。たとえば、1122または11.2.2は、TimesTen 11gリリース2(11.2.2)を表します。

DSN

データソースの名前(TimesTenデータベース用)です。

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

Oracleサポート・サービスでは、My Oracle Supportを通して電子支援サービスを提供しています。詳細情報は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info)か、聴覚に障害のあるお客様は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs)を参照してください。

新機能

この項では、このマニュアルで説明するOracle TimesTen In-Memory Database 11gリリース2(11.2.2)の新機能を説明し、詳細情報へのリンクを示します。

リリース11.2.2.5.0の新機能

- TT_STATS
このパッケージは、TimesTenでデータベース・メトリックのスナップショットの収集および比較をサポートするために追加されています。

第10章「TT_STATS」を参照してください。

リリース11.2.2.1.0の新機能

- DBMS_LOB
このパッケージは、TimesTenでLOBをサポートするために追加されています。

第2章「DBMS_LOB」を参照してください。

- DBMS_SQL
このパッケージは、プロシージャおよびファンクションでLOBシグネチャをサポートするように更新されています。

第7章「DBMS_SQL」を参照してください。

1 TimesTenが提供するPL/SQLパッケージおよびタイプの概要

TimesTenのPL/SQLを有効にすると、一連のPL/SQLパッケージがインストールされます。これらのパッケージによって、データベース機能が拡張され、SQL機能へのPL/SQLアクセスが可能になります。現在TimesTenにインストールされているパッケージ一覧を表示するには、SYSが所有するオブジェクトについて、システム・ビューのALL_PROCEDURESを使用します。この例は次に示します(出力では内部パッケージは省略しています)。他のALL_*システム・ビューの場合と同様、すべてのユーザーには、ALL_PROCEDURESシステム・ビューに対するSELECT権限があります。

Command> select distinct object_name from all_procedures where owner='SYS';
< DBMS_LOB >
< DBMS_LOCK >
< DBMS_OUTPUT >
< DBMS_PREPROCESSOR >
< DBMS_RANDOM >
< DBMS_SQL >
...
< DBMS_UTILITY >
...
< TT_STATS >
< UTL_FILE >
< UTL_RAW >
< UTL_RECOMP >
< UTL_IDENT >
< TT_DB_VERSION >
19 rows found.

このマニュアルでは、これらのパブリック・パッケージについて説明します(「TimesTenが提供するPL/SQLパッケージの概要」で簡単に説明しています)。PL/SQL言語自体の一部であるパッケージまたはOracle Database内部でのみ使用されるパッケージは示しておらず、このマニュアルでは説明していません。

この章の残りでは、次の項目について説明します。

- パッケージの概要

- TimesTenが提供するPL/SQLパッケージの概要

PL/SQLおよびPL/SQLパッケージの詳細は、次を参照してください。

- 『Oracle TimesTen In-Memory Database PL/SQL開発者ガイド』

- 『Oracle Database PL/SQL言語リファレンス』

- 『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』

パッケージの概要

パッケージとは、関連するプログラム・オブジェクトをカプセル化した集合体で、データベースにまとめて格納されています。プログラム・オブジェクトには、プロシージャ、ファンクション、変数、定数、カーソルおよび例外があります。

このセクションの内容は次のとおりです。

- パッケージのコンポーネント

- TimesTenが提供するパッケージの使用

- パッケージ内容の参照

- パッケージの例の実行

パッケージ・コンポーネント

PL/SQLパッケージには、仕様部と本体の2つの部分がありますが、本体は不要な場合もあります。仕様部はアプリケーションへのインタフェースです。使用可能なタイプ、変数、定数、例外、カーソルおよびサブプログラムを宣言します。本体はカーソルとサブプログラムを完全に定義し、仕様部を完全に実装します。

パッケージは、サブプログラムとは異なり、コール、パラメータ化またはネスト化することはできません。ただし、パッケージおよびサブプログラムのフォーマットは類似しています。

CREATE PACKAGE name AS  -- specification (visible part)
-- public type and item declarations
-- subprogram specifications
END [name];

CREATE PACKAGE BODY name AS  -- body (hidden part)
-- private type and item declarations
-- subprogram bodies
[BEGIN
-- initialization statements]
END [name];

仕様部には、アプリケーションで参照できるパブリック宣言が含まれています。本体には、実装の詳細およびプライベート宣言が含まれていますが、アプリケーションからは参照できません。仕様部を変更せずに、パッケージ本体をデバッグ、拡張または置換できます。パッケージ本体の実装の詳細はアプリケーションから隠されているため、コール元プログラムを再コンパイルせずに、パッケージ本体を変更できます。

TimesTenが提供するパッケージの使用

TimesTenが提供するパッケージは、データベースが作成されるときに自動的にインストールされます。

すべてのユーザーには、UTL_RECOMPおよびUTL_FILE(それぞれの章を参照)を除く、このマニュアルで説明するパッケージに対するEXECUTE権限があります。

PL/SQLファンクションで定義されたビューを検索するには、そのビューのSELECT権限が必要です。ビューを検索するには個々のEXECUTE権限は必要ありません。パッケージに関する特別要件については、それぞれの章の記述を参照してください。

注意:
TimesTenでは、インスタンス管理者として実行することは、Oracle DatabaseユーザーSYSDBAとして実行することに相当します。ADMINユーザーとして実行することは、Oracle DatabaseユーザーDBAとして実行することに相当します。

パッケージ内容の参照

パッケージ仕様部で宣言されたタイプ、アイテムおよびサブプログラムを参照するには、ドット表記法を使用します。次に例を示します。

package_name.type_name
package_name.item_name
package_name.subprogram_name

パッケージの例の実行

このマニュアルのパッケージの例の出力を確認するには、ttIsqlで最初に次のコマンドを実行します。

Command> set serveroutput on

TimesTenが提供するPL/SQLパッケージの概要

表1-1は、一般利用のためにTimesTenで提供されるPL/SQLパッケージを示しています。これらのパッケージは、パッケージ所有者ではなく起動ユーザーとして実行されます。

注意:

- これらのパッケージが提供するプロシージャとファンクションおよびその外部インタフェースはOracle Databaseに付属するもので、変更される可能性があります。

- 提供されたパッケージを変更すると、内部エラーおよびデータベースのセキュリティ違反が発生する可能性があります。提供されたパッケージを変更しないでください。

表1-1 TimesTenが提供するPL/SQLパッケージの概要

パッケージ名

説明

DBMS_LOB

バイナリ・ラージ・オブジェクトおよびキャラクタ・ラージ・オブジェクト(BLOB、CLOBおよびNCLOB)で動作するサブプログラムを提供します。

DBMS_LOCK

ロック管理サービスへのインタフェースを提供します。TimesTenでは、指定した期間セッションを一時停止するSLEEPプロシージャのみがサポートされます。

DBMS_OUTPUT

ストアド・プロシージャおよびパッケージからメッセージを送信できます。

DBMS_PREPROCESSOR

後処理された形式でPL/SQLユニットのソース・テキストの出力または取出しを行うためのインタフェースを提供します。

DBMS_RANDOM

組込み式の乱数ジェネレータを提供します。

DBMS_SQL

動的SQLを使用してデータベースへのアクセスを可能にします。

DBMS_UTILITY

様々なユーティリティ・ルーチンを提供します。

TT_DB_VERSION

TimesTenのメジャーおよびマイナー・バージョン番号を示します。

TT_STATS

データベース・メトリックのスナップショットを収集し、スナップショット間の比較に基づくレポートを生成します。

UTL_FILE

PL/SQLプログラムで、オペレーティング・システムのテキスト・ファイルの読込みおよび書込みを可能にし、標準オペレーティング・システムのストリーム・ファイルI/Oの制限付きバージョンを提供します。

UTL_IDENT

PL/SQLを実行しているのがデータベースなのかクライアントなのか(TimesTenとOracle Database、サーバーとクライアントなど)を示します。(PL/SQLを実行する各データベースまたはクライアントには、このパッケージのコピーがあります。)

UTL_RAW

RAWデータ・タイプを操作するためのSQLファンクションを提供します。

UTL_RECOMP

無効なPL/SQLモジュールを再コンパイルします。

注意:

- PLS_INTEGERデータ・タイプとBINARY_INTEGERデータ・タイプは同じです。このドキュメントでは、リファレンス情報でデータ・タイプ(表タイプ、レコード・タイプ、サブプログラム・パラメータ、サブプログラム戻り値など)を示す場合にBINARY_INTEGERを使用しますが、説明および例ではいずれも使用される場合があります。

- INTEGERデータ・タイプとNUMBER(38)データ・タイプも同じです。このドキュメントでは、全体をとおしてINTEGERを使用します。

2 DBMS_LOB

DBMS_LOBパッケージは、BLOB、CLOB、およびNCLOBを操作するためのサブプログラムを提供します。DBMS_LOBを使用すると、LOBの特定の部分またはLOB全体に対するアクセスおよび操作ができます。

この章の内容は次のとおりです。

- DBMS_LOBの使用方法

- 概要

- セキュリティ・モデル

- 定数

- データ・タイプ

- ルールおよび制限

- 使用上の注意

- 例外

- DBMS_LOBサブプログラムの要約

『Oracle TimesTen In-Memory Database PL/SQL開発者ガイド』のラージ・オブジェクト(LOB)に関する説明も参照してください。

DBMS_LOBの使用方法

- 概要

- セキュリティ・モデル

- 定数

- データ・タイプ

- ルールおよび制限

- 使用上の注意

- 例外

概要

DBMS_LOBでは、BLOB、CLOBおよびNCLOBの読取り、操作および変更ができます。

LOBの概要は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』のラージ・オブジェクトの概要に関する項を参照してください。

セキュリティ・モデル

このパッケージが提供する操作は、パッケージ所有者SYSではなく、現行のコール・ユーザーのもとで実行されます。

無名PL/SQLブロックからコールされたDBMS_LOBサブプログラムは、カレント・ユーザーの権限を使用して実行されます。ストアド・プロシージャからコールされたDBMS_LOBサブプログラムは、そのストアド・プロシージャの所有者の権限を使用して実行されます。

ユーザーはプロシージャの作成時に、AUTHIDを設定して定義者の権限または実行者の権限のどちらを使用するのかを指示できます。次に例を示します。

CREATE PROCEDURE proc1 AUTHID DEFINER ...

または

CREATE PROCEDURE proc1 AUTHID CURRENT_USER ...

AUTHIDについては、『Oracle TimesTen In-Memory Database PL/SQL開発者ガイド』の定義者の権限および実行者の権限に関する説明を参照してください。一時LOBに関係するセキュリティ・モデルについては「使用上の注意」を参照してください。

定数

DBMS_LOBパッケージでは、表2-1に示す定数が使用されます。

表2-1 DBMS_LOBの定数

定数

タイプ

値

説明

CALL

BINARY_INTEGER

12

コール継続時間を含む一時LOBを作成します。

DEFAULT_CSID

INTEGER

0

これがデフォルトのキャラクタ・セットIDです。

DEFAULT_LANG_CTX

INTEGER

0

これがデフォルトの言語コンテキストです。

LOB_READONLY

BINARY_INTEGER

0

指定したLOBを読取り専用モードでオープンします。

LOB_READWRITE

BINARY_INTEGER

1

指定したLOBを読取り/書取りモードでオープンします。

BLOBMAXSIZE

INTEGER

16777216(16 MB)

BLOBの最大サイズをバイトで設定します。

CLOBMAXSIZE

INTEGER

4194304(4 MB)

CLOBの最大サイズをバイトで設定します。

NO_WARNING

INTEGER

0

成功し、警告メッセージがないことを示します。

SESSION

BINARY_INTEGER

10

セッション継続時間を含む一時LOBを作成します。

注意: TimesTenでは、トランザクションの終了時にLOBの継続時間は終了します。対応するロケータがトランザクションの終了時に無効になっている場合、一時LOBのコンテンツは破棄されます。

TRANSACTION

BINARY_INTEGER

11

トランザクション継続時間を含む一時LOBを作成します。

WARN_INCONVERTIBLE_CHAR

INTEGER

1

変換できない文字があることを示すために変換ファンクションで使用されます。

注意:

- PLS_INTEGERデータ・タイプとBINARY_INTEGERデータ・タイプは同じです。このドキュメントでは、リファレンス情報でデータ・タイプ(表タイプ、レコード・タイプ、サブプログラム・パラメータ、サブプログラム戻り値など)を示す場合にBINARY_INTEGERを使用しますが、説明および例ではいずれも使用される場合があります。

- INTEGERデータ・タイプとNUMBER(38)データ・タイプも同じです。このドキュメントでは、全体をとおしてINTEGERを使用します。

データ・タイプ

DBMS_LOBパッケージでは、表2-2に示すデータ・タイプが使用されます。

表2-2 DBMS_LOBが使用するデータ・タイプ

タイプ

説明

BLOB

ソースまたは宛先のバイナリLOB

RAW

ソースまたは宛先のRAWバッファ(BLOBで使用)

CLOB

ソースまたは宛先の文字LOB(NCLOBを含む)

VARCHAR2

ソースまたは宛先の文字バッファ(CLOBおよびNCLOBで使用)

INTEGER

バッファまたはLOBのサイズ、LOBへのオフセットまたはアクセス量(BLOBの場合はバイト数、CLOBまたはNCLOBの場合は文字数)

DBMS_LOBパッケージは特別なタイプを定義しません。

NCLOBは、固定幅および可変幅のマルチバイト各国語キャラクタ・セットを格納するためのCLOBです。

CLOB用のDBMS_LOBサブプログラムの仕様部にある句ANY_CSを使用すると、CLOBタイプでCLOBまたはNCLOBロケータ変数を入力として受け入れることができます。

ルールおよび制限

- 一般的なルールおよび制限

- 最大LOBサイズ

- 最大バッファ・サイズ

一般的なルールおよび制限

- このパッケージにあるサブプログラムの仕様部に適用される規則は次のとおりです。

- BLOBを操作するサブプログラムのnewlen、offsetおよびamountパラメータを指定する際には、単位にバイトを使用する必要があります。

- CLOBを操作するサブプログラムのnewlen、offsetおよびamountパラメータを指定する際には、単位に文字を使用する必要があります。

- パラメータ値の指定時に次の制限事項に従わなかった場合(またはパラメータ値を指定しなかった場合)は、INVALID_ARGVAL例外が発生します。

1. LOBデータの開始位置からは、正の絶対オフセットのみが許可されています。LOBの終了位置からは、負のオフセットは許可されていません。

2. amount、offset、newlen、nthなど、サイズおよび位置を表すパラメータには、0(ゼロ)以外の正の値のみ許可されています。SQL文字列ファンクションおよび演算子で確認される負のオフセットおよび範囲は許可されていません。

3. offset、amount、newlenおよびnth値は、いずれのDBMS_LOBサブプログラムの場合でも、BLOBの場合はBLOBMAXSIZE値を、CLOBまたはNCLOBの場合はCLOBMAXSIZE値を超えないようにする必要があります。TimesTenでは、BLOBの最大サイズは16 MBで、CLOBまたはNCLOBの最大サイズは4 MBです。

4. 固定幅のマルチバイト・キャラクタで構成されるCLOBの場合、これらのパラメータの最大値は(CLOBMAXSIZE/character_width_in_bytes)文字を超えないようにする必要があります。

- PL/SQL言語仕様では、DBMS_LOBサブプログラムで使用されるRAWおよびVARCHAR2パラメータの上限は32767バイト(文字数ではありません)に規定されています。たとえば、変数を次のように宣言するとします。

charbuf VARCHAR2(3000)

この場合、charbufにはシングルバイト文字の場合は3000文字、2バイトの固定幅文字の場合は1500文字格納できます。これは、CLOBおよびNCLOBに対してDBMS_LOBサブプログラムを使用するときに特に注意してください。

- %CHARSET句は、%CHARSETを使用するパラメータの形式が、参照先であるANY_CSパラメータの形式と一致している必要があることを示します。
たとえば、VARCHAR2バッファ・パラメータを使用するDBMS_LOBサブプログラムでは、VARCHAR2バッファの形式は文字LOBパラメータの形式に適したものである必要があります。指定したLOBがNCLOBのタイプである場合、バッファにはNCHARデータが含まれる必要があります。指定したLOBがCLOBのタイプである場合、バッファにはCHARデータが含まれる必要があります。

2つのキャラクタLOBパラメータをとるDBMS_LOBサブプログラムの場合は、2つのパラメータは同じ形式である必要があります。つまり、両方ともNCLOBであるか、またはCLOBである必要があります。

- amountにoffsetを加えた値がデータベースで許可されているLOBの最大サイズを超えると、アクセス例外が発生します。TimesTenでは、BLOBの最大サイズは16 MBで、CLOBまたはNCLOBの最大サイズは4 MBです。
この入力条件のもとでは、READ、COMPARE、INSTR、SUBSTRなどのサブプログラムでは、LOBの終了に達するまで読み込まれます。たとえば、BLOBのREAD操作で、4 MBのサイズのLOBにユーザーが3 MBのoffset値と2 MBのamount値を指定すると、READは1 MBのみを戻します(4 MB引く3 MB)。

- パラメータにNULLまたは無効な値が入力されると、ファンクションはNULLを戻します。宛先LOBのパラメータにNULL値が指定されると、プロシージャでは例外が発生します。

- パラメータとしてパターンが含まれている操作(COMPARE、INSTRおよびSUBSTRなど)では、patternパラメータまたは副文字列に、正規表現または特殊一致文字(SQLのLIKE演算子の%など)はサポートされていません。

- LOBの終了条件は、READプロシージャでNO_DATA_FOUND例外を使用して示されます。この例外が発生するのは、ユーザーがLOBの終了位置を超えてデータを読み込もうとしたときのみです。最後に読み込んだREADバッファは0(ゼロ)バイトです。

- 別途記載がある場合を除き、offsetパラメータのデフォルト値はBLOBデータの最初のバイト、またはCLOBまたはNCLOBデータの最初の文字を示す1です。amountパラメータにはデフォルト値の指定はありません。これらの値は明示的に入力する必要があります。

- LOBを変更する任意のサブプログラム(例: APPEND、COPY、ERASE、TRIMまたはWRITE)をコールする前に、宛先LOBが含まれている行をロックする必要があります。これらのサブプログラムでは、LOBを含んだ行のロックは暗黙的には行われません。

最大LOBサイズ

TimesTenでのLOBの最大サイズは、BLOBでは16 MBで、CLOBまたはNCLOBでは4 MBです。

最大バッファ・サイズ

最大バッファ・サイズは32767バイトです。

バッファ・サイズをバイトで表現するBLOBでは、バイト数の上限は32767です。

バッファ・サイズを文字で表現するCLOBまたはNCLOBでは、文字数によるバッファの上限は32767バイトです。たとえば、固定幅の2バイト文字を使用する場合、(20000*2 = 40000は32767より大きいため)20000文字はエラーになります。

使用上の注意

DBMS_LOBサブプログラムはLOBロケータに基づいて動作します。DBMS_LOBサブプログラムを正常に実行するには、データベース表領域にすでに存在しているLOB(一時LOB(下部で説明)または永続LOB)を示す入力ロケータを用意する必要があります。

重要:

- TimesTenでは、LOBロケータはトランザクションが終了すると無効になります。

- LOBロケータを使用するAPIを介したLOBの操作では、TimesTenの一時領域が使用されます。このような操作をかなりの回数実行すると、TimesTenの一時データ・パーティションのサイズを拡大しなければならなくなる場合があります。詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のTempSizeに関する説明を参照してください。

データベースでLOBを使用するには、最初にSQLデータ定義言語(DDL)を使用して、BLOB、CLOBまたはNCLOBタイプの列が含まれる表を定義する必要があります。

TimesTenでは、LOB内にデータを書き込むには以前のデータを上書きする必要があります。LOB内にデータを挿入し、その位置からLOBの終了の方向に以前のデータを移動する機能はありません。同様に、TimesTenでLOB内のデータを削除するは、以前のデータをゼロまたはnullデータで上書きする必要があります。LOB内のデータを削除し、その位置からLOBの開始方向に以前のデータを移動する機能はありません。いずれの場合も、(指定したオフセット位置からのLOB内の空き領域が、書き込むデータよりも少量の場合を除き、)TimesTenではLOBのサイズは変更されません(Oracle Databaseでは、DBMS_LOB FRAGMENTプロシージャを使用し、データを挿入または削除したり、他のデータの移動することによって、LOBのサイズを変更できます。TimesTenではこれらのプロシージャはサポートされていません)。

DBMS_LOBのプロシージャおよびファンクションは、TimesTenのLOBおよびパススルーLOB(TimesTenを介してアクセスする、TimesTenのLOBとして公開されるOracle DatabaseのLOB)の両方でサポートされています。ただし、TimesTenでは、CREATETEMPORARYは一時LOBの作成のためのみに使用できることに注意する必要があります。一時パススルーLOBがSQLなどその他のメカニズムで作成されている場合、そのLOBでISTEMPORARYおよびFREETEMPORARYを使用することは可能です。

TimesTenでは、特にBFILEを対象としたDBMS_LOBサブプログラム、SecureFiles(Database File System機能を含む)、またはLOB内部でのデータ・フラグメントの挿入または削除(FRAGMENTサブプログラム)はサポートしていません。

この後の項では、次の項目について説明します。

- 永続LOB

- 一時LOB

永続LOB

表にBLOB、CLOBまたはNCLOB列を定義した後、データベース表にLOBを移入するには、SQLデータ操作言語(DML)を使用して、LOB列のロケータを初期化するか、または移入します。

一時LOB

TimesTenでは、一時LOBの定義、作成、削除、アクセスおよび更新がサポートされています。一時LOBのデータは、一時データ・パーティションに格納されます。一時LOBはデータベースに永続的には格納されません。この目的は、主にアプリケーションからLOBデータを変換することです。

一時LOB(BLOB、CLOBまたはNCLOB)は、PL/SQLを使用して作成または操作できます。

一時LOBは、作成されたときは空の状態です。TimesTenで一時LOBは、それが作成されたトランザクションが終了するとすべて削除されます。また、処理が途中で停止したり、データベースがクラッシュした場合、一時LOBは削除され、その領域は解放されます。

一時LOBに関する読取り一貫性、取消し、バックアップ、パラレル処理またはトランザクション管理はサポートされていません。一時LOBでは、読取り一貫性およびロールバックがサポートされていないため、エラーが発生した場合、ユーザーは一時LOBを解放して、最初から操作をやり直す必要があります。

PL/SQLでは、一時LOBに対して複数のロケータは使用しないでください。読取り一貫性、取消しおよびバージョンが、一時LOBに対しては生成されないため、同じ一時LOBに複数のロケータを割り当てると、パフォーマンスに影響する可能性があります。具体的には、各ロケータが一時LOBの独自のコピーを所有するためです。一時LOBロケータは、必要に応じて、参照によって別のプロシージャに渡されます。

他のロケータが一時LOBをポイントしているときにユーザーがその一時LOBを変更すると、一時LOBのコピーが作成されます。すると、変更が実行されたロケータは、一時LOBの新しいコピーをポイントするようになります。変更が行われたロケータと同様、他のロケータもそれ以降同じデータを参照しなくなります。このような状況では、読取り一貫性スナップショットおよびバージョン・ページによって、ユーザーは独自のバージョンのLOBを簡単に参照できるため、永続LOBではディープ・コピーは生成されません。

一時LOBは表スキーマと関連付けられていないため、行内および行外の一時LOBという概念はありません。ユーザーが一時LOBインスタンスを作成すると、エンジンによってLOBデータへのロケータが作成され戻されます。PL/SQLのDBMS_LOBパッケージおよびその他のプログラム・インタフェースは、このロケータを介して、永続LOBに対する操作と同様に一時LOBを操作します。

クライアント側の一時LOBという概念はありません。一時LOBはすべてサーバーに常駐します。

一時LOBのインスタンスは、永続LOBと同様の、適切なDBMS_LOBファンクションおよびプロシージャを使用してアクセスおよび変更できます。一時LOBを永続化するには、COPYプロシージャを使用し、それをデータベース内の(適切な)BLOB、CLOBまたはNCLOB列にコピーします。

一時LOBインスタンスを終了したら、FREETEMPORARYプロシージャを使用してそれを解放します。

セキュリティは、LOBロケータを介して提供されます。一時LOBは、その作成ユーザーのみ参照できます。ロケータは、あるユーザーのセッションから別のユーザーのセッションに渡すことはできません。あるセッションから別のセッションにロケータを渡しても、元のセッションの一時LOBにはアクセスできません。

一時LOBに固有の注意事項は次のとおりです。

- NULLのパラメータがある場合、DBMS_LOBのどのファンクションでもNULLが戻されます。LOBロケータがNULLとして入力されると、DBMS_LOBのすべてのプロシージャで例外が発生します。

- CLOBに基づく操作では、パラメータ(CLOBパラメータやVARCHAR2のバッファやパターンなど)のキャラクタ・セットID(CSID)が一致しているかどうかは検証されません。この確認はユーザーが各自で行ってください。

例外

表2-3 DBMS_LOBの例外

例外

コード

説明

ACCESS_ERROR

22925

LOBに書き込もうとしているデータ量が多すぎます。TimesTenでは、BLOBのサイズは16 MBに、CLOBまたはNCLOBのサイズは4 MBに制限されています。

BUFFERING_ENABLED

22279

LOBバッファを有効にした状態では操作を実行できません。

CONTENTTYPE_TOOLONG

43859

contenttype文字列の長さが、定義されている最大長を超えています。contenttype文字列の長さを変更し、操作を再試行してください。

CONTENTTYPEBUF_WRONG

43862

contenttypeバッファの長さが、定義されている定数より短くなっています。contenttypeバッファの長さを変更し、操作を再試行してください。

INVALID_ARGVAL

21560

引数はNULL以外の有効な値である必要がありますが、転送された引数値はNULL、無効または範囲外です。

NO_DATA_FOUND

1403

これは、ループ読取り操作でLOBの終了を示すインジケータです。ハード・エラーではありません。

QUERY_WRITE

14553

問合せ内でLOB書込みを実行できません(これはTimesTenでは実行できません。)

VALUE_ERROR

6502

これは、サブプログラムのパラメータ値が無効なためのPL/SQLエラーです。

注意:
DBMS_LOBサブプログラムの「例外」の項で説明するとおり、LOBバッファリングが有効の場合は動作しないサブプログラムがいくつかあります。(LOBバッファリングとは、たとえばOCIなどを介して有効にできる機能です。『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』のLOBバッファリング・サブシステムに関する説明を参照してください。

DBMS_LOBサブプログラムの要約

表2-4 DBMS_LOBのサブプログラム

サブプログラム

説明

APPENDプロシージャ

ソースLOBの内容を宛先LOBに追加します。

CLOSEプロシージャ

オープンされているLOBをクローズします。

COMPAREファンクション

2つのLOB全体、または2つのLOBの一部を比較します。

CONVERTTOBLOBプロシージャ

ソースCLOBまたはNCLOBから文字データを読み取り、文字データを指定したキャラクタ・セットに変換して、変換したデータをバイナリ形式で宛先BLOBに書き込み、新しいオフセットを戻します。

CONVERTTOCLOBプロシージャ

ソースBLOBを取得し、指定したキャラクタ・セットを使用して、ソースのバイナリ・データを文字データに変換し、文字データを宛先CLOBまたはNCLOBに書き込み、新しいオフセットを戻します。

COPYプロシージャ

ソースLOBの全体または一部を宛先LOBにコピーします。

CREATETEMPORARYプロシージャ

一時データ・パーティションに一時LOBを作成します。

ERASEプロシージャ

LOBの全体または一部を消去します。

FREETEMPORARYプロシージャ

一時データ・パーティションの一時LOBを解放します。

GETCHUNKSIZEファンクション

LOB値を格納するLOBチャンクの使用領域容量を戻します。

GETLENGTHファンクション

LOB値の長さを、BLOBの場合はバイト数で、CLOBの場合は文字数で戻します。

GET_STORAGE_LIMITファンクション

指定したLOBのLOBタイプの格納の上限を戻します。

INSTRファンクション

LOBにおけるパターンのn番目の出現位置を戻します。

ISOPENファンクション

LOBが入力ロケータを使用して、すでにオープンされたかどうかをチェックします。

ISTEMPORARYファンクション

ロケータが一時LOBをポイントしているかどうかをチェックします。

OPENプロシージャ

LOB(永続または一時)を、指定された読取り/書込みまたは読取り専用モードでオープンします。

READプロシージャ

指定されたオフセットからLOBのデータを読み取ります。

SUBSTRファンクション

指定されたオフセットからLOB値の一部を戻します。

TRIMプロシージャ

指定された長さまでLOB値を切り捨てます。

WRITEプロシージャ

指定されたオフセットからLOBにデータを書き込みます。

WRITEAPPENDプロシージャ

バッファをLOBの終了に追加します。

APPENDプロシージャ

このプロシージャでは、ソースLOBの内容を宛先LOBに追加します。ソースLOBを完全に追加します(WRITEAPPENDプロシージャとは混同しないでください。)

注意:
「WRITEAPPENDプロシージャ」も参照してください。

構文

DBMS_LOB.APPEND (
dest_lob IN OUT  NOCOPY BLOB,
src_lob  IN             BLOB);

DBMS_LOB.APPEND (
dest_lob IN OUT  NOCOPY CLOB  CHARACTER SET ANY_CS,
src_lob  IN             CLOB  CHARACTER SET dest_lob%CHARSET);

パラメータ

表2-5 APPENDプロシージャのパラメータ

パラメータ

説明

dest_lob

データを追加するLOBのロケータ

src_lob

データを読み取るLOBのロケータ

使用上の注意

- LOBへの書込み操作は、OPENおよびCLOSEコールで囲むことをお薦めします(必須ではありません)。ただし、操作を実行する前にLOBをオープンした場合は、トランザクションのコミットまたはロールバックを実行する前にクローズする必要があります。

例外

表2-6 APPENDプロシージャの例外

例外

説明

VALUE_ERROR

ソースまたは宛先LOBのいずれかがNULLです。

QUERY_WRITE

問合せ内でLOB書込みを実行できません(これはTimesTenでは実行できません。)

BUFFERING_ENABLED

いずれかのLOBでLOBバッファを有効にした状態では操作を実行できません。

例

ここでは、APPENDプロシージャの使用例を示します。

create table t1 (a int, c clob);

insert into t1(a,c) values(1, 'abcde');
1 row inserted.

commit;

declare
c1 clob;
c2 clob;
begin
c1 := 'abc';
select c into c2 from t1 where a = 1;
dbms_output.put_line('c1 before append is ' || c1);
dbms_output.put_line('c2 before append is ' || c2);
dbms_lob.append(c1, c2);
dbms_output.put_line('c1 after append is ' || c1);
dbms_output.put_line('c2 after append is ' || c2);
insert into t1 values (2, c1);
end;

c1 before append is abc
c2 before append is abcde
c1 after append is abcabcde
c2 after append is abcde

PL/SQL procedure successfully completed.

select * from t1;
< 1, abcde >
< 2, abcabcde >
2 rows found.

(SQLスクリプトからコマンドを実行した後、出力が表示されます。)

CLOSEプロシージャ

このプロシージャでは、すでにオープンされているLOBをクローズします。

構文

DBMS_LOB.CLOSE (
lob_loc    IN OUT NOCOPY BLOB);

DBMS_LOB.CLOSE (
lob_loc    IN OUT NOCOPY CLOB CHARACTER SET ANY_CS);

パラメータ

表2-7 CLOSEプロシージャ・パラメータ

パラメータ

説明

lob_loc

LOBのロケータ

使用上の注意

- CLOSEでは、サーバーへのラウンドトリップが必要になります。

- LOB操作はOPENおよびCLOSEコールで囲む必要はありません。ただし、LOBをオープンしている場合は、トランザクションをコミットまたはロールバックする前にクローズする必要があります。

- トランザクションによってオープンされたすべてのLOBをクローズする前にトランザクションをコミットすると、エラーが発生します。エラーが戻された場合、LOBのオープンのステータスは廃棄されますが、トランザクションのコミットは正常に行われます。したがって、LOBおよび非LOBデータに対するすべての変更トランザクションはコミットされます。

例外

エラーは、LOBがオープンしていない場合に戻されます。

COMPAREファンクション

このファンクションは、2つのLOB全体、または2つのLOBの一部を比較します。

構文

DBMS_LOB.COMPARE (
lob_1            IN BLOB,
lob_2            IN BLOB,
amount           IN INTEGER := DBMS_LOB.BLOBMAXSIZE,
offset_1         IN INTEGER := 1,
offset_2         IN INTEGER := 1)
RETURN INTEGER;

DBMS_LOB.COMPARE (
lob_1            IN CLOB  CHARACTER SET ANY_CS,
lob_2            IN CLOB  CHARACTER SET lob_1%CHARSET,
amount           IN INTEGER := DBMS_LOB.CLOBMAXSIZE,
offset_1         IN INTEGER := 1,
offset_2         IN INTEGER := 1)
RETURN INTEGER;

パラメータ

表2-8 COMPAREファンクション・パラメータ

パラメータ

説明

lob_1

比較する1番目のLOBのロケータ

lob_2

比較する2番目のLOBのロケータ

amount

比較するバイト数(BLOBの場合)または文字数(CLOBまたはNCLOB)

offset_1

1番目のLOBのバイト数または文字数でのオフセット(起点: 1)

offset_2

2番目のLOBのバイト数または文字数でのオフセット(起点: 1)

戻り値

このファンクションは、次のいずれかを戻します。

- データが指定の範囲と正確に一致する場合は0(ゼロ)

- 1番目のLOBが2番目のLOBより小さい場合は-1

- 1番目のLOBが2番目のLOBより大きい場合は1

- amount、offset_1またはoffset_2の値が、1からBLOBMAXSIZEまたはCLOBMAXSIZE(の適切な方)の範囲外で無効な場合はNULL

使用上の注意

- 同じタイプのLOBのみ比較できます。たとえば、CLOBとBLOBを比較することはできません。

- 固定幅のnバイトのCLOBまたはNCLOBの場合は、COMPAREに対する入力amountの指定がCLOBMAXSIZE/nを超えると、COMPAREは、CLOBMAXSIZE/nまたはMax(length(clob1), length(clob2))のうち、小さい方の範囲で文字と一致します。

CONVERTTOBLOBプロシージャ

このプロシージャは、ソースCLOBまたはNCLOBから、文字データを読み取り、文字データを指定したキャラクタ・セットに変換して、変換したデータをバイナリ形式で宛先BLOBに書き込み、新しいオフセットを戻します。このプロシージャは、永続LOBまたは一時LOBの任意の組合せで使用できます。

構文

DBMS_LOB.CONVERTTOBLOB(
dest_lob       IN OUT     NOCOPY  BLOB,
src_clob       IN         CLOB CHARACTER SET ANY_CS,
amount         IN         INTEGER,
dest_offset    IN OUT     INTEGER,
src_offset     IN OUT     INTEGER,
blob_csid      IN         NUMBER,
lang_context   IN OUT     INTEGER,
warning        OUT        INTEGER);

パラメータ

表2-9 CONVERTTOBLOBプロシージャ・パラメータ

パラメータ

説明

dest_lob

宛先LOBのロケータ

src_clob

ソースLOBのロケータ

amount

ソースLOBから変換する文字数

CLOBまたはNCLOB全体を変換する場合、定数CLOBMAXSIZEを渡します。他の値を渡す場合は、LOBのサイズ以下である必要があります。

dest_offset

(IN)宛先LOBの書込み開始位置を示すオフセット(バイト数で指定します)

LOBの先頭から開始するには1の値を指定します。

(OUT)書込み終了位置の次の位置を示す新しいオフセット(バイト数で指定します)

src_offset

(IN)ソースLOBの読込み開始位置を示すオフセット(文字数で指定します)

(OUT)ソースLOBの読込み終了位置の次の位置を示すオフセット(文字数で示します)

blob_csid

変換BLOBデータのキャラクタ・セットID

lang_context

(IN)現行の変換に関する、シフト・ステータスなどの言語コンテキスト(TimesTenでは無視されます)

(OUT)現在の変換が実行されたときの言語コンテキスト(TimesTenでは0に設定されます)

このパラメータは、TimesTenではサポートされていません。

warning

警告メッセージ

このパラメータは、TimesTenではサポートされていません。

使用上の注意

事前条件

CONVERTTOBLOBをコールする前に、次の事前条件を満たしている必要があります。

- ソースと宛先の両方のLOBが存在している。

- 宛先LOBが永続LOBの場合、行がロックされている。行をロックするには、SELECT文のFOR UPDATE句を使用して、LOBを選択します。

定数およびデフォルト

すべてのパラメータが必要です。各OUTまたはIN OUTパラメータに変数を渡す必要があります。各INパラメータに変数または値を渡す必要があります。

表2-10に各パラメータの一般的な値の要約を示します。値によっては定数が使用されるので注意してください。このような定数は、dbmslob.sqlパッケージ仕様部ファイルに定義されています。

表2-10 CONVERTTOBLOBの一般的な値

パラメータ

値

説明

amount

CLOBMAXSIZE (IN)

LOB全体を変換します。

dest_offset

1(IN)

先頭から開始します。

src_offset

1(IN)

先頭から開始します。

blob_csid

DEFAULT_CSID (IN)

デフォルトのキャラクタ・セットID(ソースCLOBと同じIDを使用します)。

lang_context

DEFAULT_LANG_CTX (IN)

これがデフォルトの言語コンテキストです(TimesTenでは無視されます)。

warning

NO_WARNING (OUT)

WARN_INCONVERTIBLE_CHAR (OUT)

これは警告メッセージです(TimesTenでは無視されます)。

一般的な注意

- blob_csidパラメータに宛先BLOBの目的のキャラクタ・セットIDを指定する必要があります。0値を渡す場合、データベースでは目的のキャラクタ・セットがソースCLOBのキャラクタ・セットと同じであると想定されます。

- ソースおよび宛先の両方のLOBに対するオフセット、およびソースLOBからコピーする文字数を指定する必要があります。amountおよびsrc_offset値は文字単位、dest_offsetはバイト単位です。LOB全体を変換するには、amountパラメータにCLOBMAXSIZEを指定します。

- CONVERTTOBLOBは、データの変換および書込み前に、必要に応じてソースまたは宛先LOBを取得します。

例外

表2-11 CONVERTTOBLOBプロシージャの例外

例外

説明

VALUE_ERROR

入力パラメータのいずれかがNULLまたは無効です。

INVALID_ARGVAL

次のいずれかが該当します。

src_offset < 1またはsrc_offset > CLOBMAXSIZE

dest_offset < 1またはdest_offset > BLOBMAXSIZE

amount < 1またはamount > CLOBMAXSIZE

CONVERTTOCLOBプロシージャ

このプロシージャはソースBLOBを取得し、指定したキャラクタ・セットを使用して、ソースのバイナリ・データを文字データに変換し、文字データを宛先CLOBまたはNCLOBに書き込み、新しいオフセットを戻します。このプロシージャは、永続LOBまたは一時LOBの任意の組合せで使用できます。

構文

DBMS_LOB.CONVERTTOCLOB(
dest_lob       IN OUT NOCOPY  CLOB CHARACTER SET ANY_CS,
src_blob       IN             BLOB,
amount         IN             INTEGER,
dest_offset    IN OUT         INTEGER,
src_offset     IN OUT         INTEGER,
blob_csid      IN             NUMBER,
lang_context   IN OUT         INTEGER,
warning        OUT            INTEGER);

パラメータ

表2-12 CONVERTTOCLOBプロシージャ・パラメータ

パラメータ

説明

dest_lob

宛先LOBのロケータ

src_blob

ソースLOBのロケータ

amount

ソースLOBから変換するバイト数

BLOB全体を変換する場合、定数BLOBMAXSIZEを渡します。他の値を渡す場合は、BLOBのサイズ以下である必要があります。

dest_offset

(IN)宛先LOBの書込み開始位置を示すオフセット(文字数で指定します)

LOBの先頭から開始するには1の値を指定します。

(OUT)書込み終了位置の次の位置を示す新しいオフセット(文字で指定します)

このオフセットは、常に書込み終了位置の後にある最初の完全な文字をポイントします。

src_offset

(IN)ソースLOBの読込み開始位置を示すオフセット(バイト数で指定します)

(OUT)ソースLOBの読込み終了位置の次の位置を示すオフセット(バイト数で示します)

blob_csid

ソースBLOBデータのキャラクタ・セットID

lang_context

(IN)現行の変換に関する、シフト・ステータスなどの言語コンテキスト(TimesTenでは無視されます)

(OUT)現在の変換が実行されたときの言語コンテキスト(TimesTenでは0に設定されます)

このパラメータは、TimesTenではサポートされていません。

warning

警告メッセージ

このパラメータは、TimesTenではサポートされていません。

使用上の注意

事前条件

CONVERTTOCLOBをコールする前に、次の事前条件を満たしている必要があります。

- ソースと宛先の両方のLOBが存在している。

- 宛先LOBが永続LOBの場合、CONVERTTOCLOBプロシージャをコールする前に行がロックされている。行をロックするには、SELECT文のFOR UPDATE句を使用して、LOBを選択します。

定数およびデフォルト

すべてのパラメータが必要です。各OUTまたはIN OUTパラメータに変数を渡す必要があります。各INパラメータに変数または値を渡す必要があります。

表2-13に各パラメータの一般的な値の要約を示します。値によっては定数が使用されるので注意してください。このような定数は、dbmslob.sqlパッケージ仕様部ファイルに定義されています。

表2-13 CONVERTTOCLOBの一般的な値

パラメータ

値

説明

amount

BLOBMAXSIZE (IN)

LOB全体を変換します。

dest_offset

1(IN)

先頭から開始します。

src_offset

1(IN)

先頭から開始します。

blob_csid

DEFAULT_CSID (IN)

デフォルトのキャラクタ・セットID(宛先CLOBと同じIDを使用します)。

lang_context

DEFAULT_LANG_CTX (IN)

これがデフォルトの言語コンテキストです(TimesTenでは無視されます)。

warning

NO_WARNING (OUT)

WARN_INCONVERTIBLE_CHAR (OUT)

これは警告メッセージです(TimesTenでは無視されます)。

一般的な注意

- blob_csidパラメータにソースBLOBの目的のキャラクタ・セットIDを指定する必要があります。0値を渡す場合、データベースでは目的のキャラクタ・セットが宛先CLOBのキャラクタ・セットと同じであると想定されます。

- ソースおよび宛先の両方のLOBに対するオフセット、およびソースLOBからコピーする文字数を指定する必要があります。amountおよびsrc_offset値はバイト単位でdest_offsetは文字単位です。LOB全体を変換するには、amountパラメータにBLOBMAXSIZEを指定します。

- CONVERTTOCLOBは、データの変換および書込み前に、必要に応じてソースまたは宛先LOBを取得します。

例外

表2-14 CONVERTTOCLOBプロシージャの例外

例外

説明

VALUE_ERROR

入力パラメータのいずれかがNULLまたは無効です。

INVALID_ARGVAL

次のいずれかが該当します。

src_offset < 1またはsrc_offset > BLOBMAXSIZE

dest_offset < 1またはdest_offset > CLOBMAXSIZE

amount < 1またはamount > BLOBMAXSIZE

COPYプロシージャ

このプロシージャでは、ソースLOBの全体または一部を宛先LOBにコピーします。ソースおよび宛先の両方のLOBに対するオフセット、およびコピーするバイト数または文字数を指定できます。

構文

DBMS_LOB.COPY (
dest_lob    IN OUT NOCOPY BLOB,
src_lob     IN            BLOB,
amount      IN            INTEGER,
dest_offset IN            INTEGER := 1,
src_offset  IN            INTEGER := 1);

DBMS_LOB.COPY (
dest_lob    IN OUT NOCOPY CLOB  CHARACTER SET ANY_CS,
src_lob     IN            CLOB  CHARACTER SET dest_lob%CHARSET,
amount      IN            INTEGER,
dest_offset IN            INTEGER := 1,
src_offset  IN            INTEGER := 1);

パラメータ

表2-15 COPYプロシージャ・パラメータ

パラメータ

説明

dest_lob

コピーする宛先LOBのロケータ

src_lob

コピー元のソースLOBのロケータ

amount

コピーするバイト数(BLOBの場合)または文字数(CLOBまたはNCLOBの場合)

dest_offset

宛先LOBのコピー開始位置を示すオフセット(起点: 1)(バイト数または文字数で指定します)

src_offset

ソースLOBのコピー開始位置を示すオフセット(起点: 1)(バイト数または文字数で指定します)

使用上の注意

- 宛先LOBに指定したオフセットが、現在そのLOBに格納されているデータの終わりを超えている場合は、オフセットに到達するために宛先LOBに、0(ゼロ)バイトのFILLER(BLOBの場合)または空白(CLOBまたはNCLOBの場合)が挿入されます。オフセットが宛先LOBの現行の長さより小さい場合、既存のデータは上書きされます。

- ソースLOBのデータ長を超える量を指定してもエラーにはなりません。したがって、ソースLOBのデータを、src_offsetからソースLOBの終了までコピーする大量のコピーを指定できます。

- LOBへの書込み操作は、OPENおよびCLOSEコールで囲むことをお薦めします(必須ではありません)。ただし、操作を実行する前にLOBをオープンした場合は、トランザクションのコミットまたはロールバックを実行する前にクローズする必要があります。

- COPYでは、1つのTimesTen LOBから別のTimesTen LOBにコピーできるだけでなく、TimesTen LOBからパススルーLOBへ、パススルーLOBからTimesTen LOBへ、または1つのパススルーLOBから別のパススルーLOBへコピーすることができます。パススルーLOBのサイズがTimesTen LOBのサイズ制限より大きい場合、パススルーLOBをTimesTen LOBにコピーしようとするとエラーが発生します。

例外

最大LOBサイズはBLOBの場合はBLOBMAXSIZEで、CLOBの場合はCLOBMAXSIZEです。

表2-16  COPYプロシージャの例外

例外

説明

VALUE_ERROR

入力パラメータのいずれかがNULLまたは無効です。

INVALID_ARGVAL

次のいずれかが該当します。

src_offset < 1またはsrc_offset >最大LOBサイズ

dest_offset < 1またはdest_offset >最大LOBサイズ

amount < 1またはamount >最大LOBサイズ

QUERY_WRITE

問合せ内でLOB書込みを実行できません(これはTimesTenでは実行できません。)

BUFFERING_ENABLED

いずれかのLOBでLOBバッファを有効にした状態では操作を実行できません。

例

この項の例では、PL/SQLでLOBをコピーする方法、パススルーLOB(Oracle Databaseから)とTimesTen LOB間でLOBをコピーする方法を示します。1番目の例では、COPYプロシージャを使用します。2番目では、DBMS_LOBパッケージの機能も使用しますが、対照的に単純にINSERTとUPDATE文を使用します。

COPYプロシージャを使用したCLOBのコピー

この例では、COPYプロシージャを使用し、Oracle DatabaseからパススルーCLOBをTimesTen CLOBにまずコピーし、TimesTen CLOBをパススルーCLOBにコピーします。

autocommit 0;
passthrough 0;
DROP TABLE tt_table; CREATE TABLE tt_table (i INT, c CLOB); COMMIT;
passthrough 3;
DROP TABLE ora_table; CREATE TABLE ora_table (i INT, c CLOB); COMMIT;
passthrough 0;
set serveroutput on;

DECLARE
passthru_clob CLOB;
tt_clob CLOB;
clob_length BINARY_INTEGER;
clob_buffer VARCHAR2(80);

BEGIN
EXECUTE IMMEDIATE 'call ttoptsetflag(''passthrough'', 1)';

-- Note that in PL/SQL, passthrough statements must be executed as
-- dynamic SQL, and SELECT INTO must be used to assign a passthrough LOB.

-- 1. Copy a passthrough CLOB on Oracle Database to a TimesTen CLOB
-- On Oracle Database : insert a row with an empty CLOB, get a passthrough CLOB
-- handle, and append to the passthrough CLOB.
EXECUTE IMMEDIATE 'INSERT INTO ora_table VALUES (1, EMPTY_CLOB())';
EXECUTE IMMEDIATE 'SELECT c FROM ora_table WHERE i = 1 FOR UPDATE'
INTO passthru_clob;
DBMS_LOB.APPEND(passthru_clob, 'Copy from Oracle Database to TimesTen');
clob_length := DBMS_LOB.GETLENGTH(passthru_clob);

-- On TimesTen: insert a row with an empty CLOB, and get a TimesTen CLOB handle
INSERT INTO tt_table VALUES (1, EMPTY_CLOB()) RETURNING c INTO tt_clob;

-- Copy the passthrough CLOB on Oracle Database to a TimesTen CLOB
DBMS_LOB.COPY(tt_clob, passthru_clob, clob_length, 1, 1);

-- On TimesTen: display the modified TimesTen CLOB
DBMS_LOB.READ(tt_clob, clob_length, 1, clob_buffer);
DBMS_OUTPUT.PUT_LINE(clob_buffer);

-- 2. Copy a TimesTen CLOB to a passthrough CLOB on Oracle Database
-- On TimesTen: insert a row with LOB data, and get a TimesTen CLOB handle
INSERT INTO tt_table VALUES (2, 'Copy from TimesTen to Oracle Database.')
RETURNING c INTO tt_clob;
clob_length := DBMS_LOB.GETLENGTH(tt_clob);

-- On Oracle Database: insert a row with an empty CLOB, and get a passthrough
-- CLOB handle
EXECUTE IMMEDIATE 'INSERT INTO ora_table VALUES (2, EMPTY_CLOB())';
EXECUTE IMMEDIATE 'SELECT c FROM ora_table WHERE i = 2 FOR UPDATE'
INTO passthru_clob ;

-- Copy a TimesTen CLOB to a passthrough CLOB on Oracle Database
DBMS_LOB.COPY(passthru_clob, tt_clob, clob_length, 1, 1);

-- On Oracle Database: display the modified passthrough CLOB
DBMS_LOB.READ(passthru_clob, clob_length, 1, clob_buffer);
DBMS_OUTPUT.PUT_LINE(clob_buffer);

COMMIT;
EXECUTE IMMEDIATE 'call ttoptsetflag(''passthrough'', 0)';
END;

INSERTおよびUPDATE文を使用したCLOBのコピー

Oracle DatabaseからのパススルーLOBは、TimesTenの表に対して実行するINSERTまたはUPDATE文とバインドできます。この方法で、パススルーLOBをTimesTen LOBにコピーできます。同様に、TimesTen LOBは、Oracle Databaseの表に対して実行するINSERTまたはUPDATE文とバインドできます。この方法で、TimesTen LOBをパススルーLOBにコピーできます。

この例では、これらの両方のシナリオを示しています。

autocommit 0;
passthrough 0;
DROP TABLE tt_table; CREATE TABLE tt_table (i INT, c CLOB); COMMIT;
passthrough 3;
DROP TABLE ora_table; CREATE TABLE ora_table (i INT, c CLOB); COMMIT;
passthrough 0;
set serveroutput on;

DECLARE
passthru_clob CLOB;
tt_clob CLOB;
clob_length BINARY_INTEGER;
clob_buffer VARCHAR2(80);

BEGIN
EXECUTE IMMEDIATE 'call ttoptsetflag(''passthrough'', 1)';

-- Note that in PL/SQL, passthrough statements must be executed as
-- dynamic SQL, and SELECT INTO must be used to assign a passthrough LOB.

-- 1. A TimesTen CLOB is updated with a passthrough CLOB on Oracle Database
-- On TimesTen: insert a row with a NULL CLOB value
INSERT INTO tt_table VALUES (1, NULL);

-- On Oracle Database: insert a row with an empty CLOB, get a passthrough CLOB
-- handle
EXECUTE IMMEDIATE 'INSERT INTO ora_table
VALUES (1, ''Copy from Oracle Database to TimesTen'')';
EXECUTE IMMEDIATE 'SELECT c FROM ora_table WHERE i = 1' INTO passthru_clob ;

-- On TimesTen: update the TimesTen CLOB with the passthrough CLOB
UPDATE tt_table SET c = passthru_clob where i = 1;

-- On TimesTen: display the modified TimesTen CLOB
SELECT c INTO tt_clob FROM tt_table WHERE i = 1;
clob_length := DBMS_LOB.GETLENGTH(tt_clob);
DBMS_LOB.READ(tt_clob, clob_length, 1, clob_buffer);
DBMS_OUTPUT.PUT_LINE(clob_buffer);

-- 2. A passthrough table on Oracle Database is inserted with a TimesTen CLOB
-- On TimesTen: insert a row with a CLOB value, and get a TimesTen CLOB handle
INSERT INTO tt_table VALUES (2, 'Copy from TimesTen to Oracle Database.')
RETURNING c INTO tt_clob;

-- On Oracle Database: insert a row on Oracle Database with the TimesTen CLOB
EXECUTE IMMEDIATE 'INSERT INTO ora_table VALUES (2, :1)' USING tt_clob;

-- On Oracle Database: display the modified passthrough CLOB
EXECUTE IMMEDIATE 'SELECT c FROM ora_table WHERE i = 2' INTO passthru_clob;
clob_length := DBMS_LOB.GETLENGTH(passthru_clob);
DBMS_LOB.READ(passthru_clob, clob_length, 1, clob_buffer);
DBMS_OUTPUT.PUT_LINE(clob_buffer);

COMMIT;
EXECUTE IMMEDIATE 'call ttoptsetflag(''passthrough'', 0)';
END;

CREATETEMPORARYプロシージャ

このプロシージャは、一時データ・パーティションに一時BLOB、CLOBまたはNCLOBを作成します。

一時LOBの使用が終了したら、FREETEMPORARYプロシージャを使用します。

重要:
TimesTenでは、一時LOBを作成すると、データベース・トランザクションがまだ進行していない場合は、データベース・トランザクションが作成されます。トランザクションを終了するには、コミットまたはロールバックを実行する必要があります。

構文

DBMS_LOB.CREATETEMPORARY (
lob_loc IN OUT NOCOPY BLOB,
cache   IN            BOOLEAN,
dur     IN            BINARY_INTEGER := DBMS_LOB.SESSION);

DBMS_LOB.CREATETEMPORARY (
lob_loc IN OUT NOCOPY CLOB CHARACTER SET ANY_CS,
cache   IN            BOOLEAN,
dur     IN            BINARY_INTEGER := DBMS_LOB.SESSION);

パラメータ

表2-17 CREATETEMPORARYプロシージャ・パラメータ

パラメータ

説明

lob_loc

一時LOBのロケータ

CLOBロケータのかわりにNCLOBロケータを指定することが許可されています。適切なキャラクタ・セットが使用されます。

cache

LOBをバッファ・キャッシュに読み込むかどうかを示すフラグ

dur

一時LOBをいつクリーン・アップするかのヒントを指定する、SESSIONまたはCALLの2つの事前定義された期間値の1つ

注意: いずれの設定も許可されますが、TimesTenではトランザクションが終了するとLOBロケータの継続時間が終了します。

使用上の注意

- CREATETEMPORARYを使用して一時パススルーLOBを作成できません。

ERASEプロシージャ

このプロシージャでは、LOBの全体または一部を消去します。

注意:
「TRIMプロシージャ」も参照してください。

構文

DBMS_LOB.ERASE (
lob_loc           IN OUT   NOCOPY   BLOB,
amount            IN OUT   NOCOPY   INTEGER,
offset            IN                INTEGER := 1);

DBMS_LOB.ERASE (
lob_loc           IN OUT   NOCOPY   CLOB CHARACTER SET ANY_CS,
amount            IN OUT   NOCOPY   INTEGER,
offset            IN                INTEGER := 1);

パラメータ

表2-18 ERASEプロシージャ・パラメータ

パラメータ

説明

lob_loc

LOBのロケータ

amount

(IN)消去するバイト数(BLOBの場合)または文字数(CLOBまたはNCLOBの場合)

(OUT)実際に消去されたバイト数

offset

LOBの先頭からの絶対オフセット(起点: 1)(BLOBの場合はバイト数、CLOBまたはNCLOBの場合は文字数で指定します)

使用上の注意

- LOB内部からデータが消去されると、0(ゼロ)バイトのFILLER(BLOBの場合)または空白(CLOBまたはNCLOBの場合)が書き込まれます。

- 先にLOBデータの終わりに到達した場合、実際に消去されたバイト数または文字数は、amountパラメータで指定した数と異なる場合があります。実際に消去された文字数またはバイト数は、amountパラメータに戻されます。

- LOBへの書込み操作は、OPENおよびCLOSEコールで囲むことをお薦めします(必須ではありません)。ただし、操作を実行する前にLOBをオープンした場合は、トランザクションのコミットまたはロールバックを実行する前にクローズする必要があります。

注意:
LOBの長さは、LOBのセクションを消去しても減りません。LOBの長さを減らす方法は、「TRIMプロシージャ」を参照してください。

例外

最大LOBサイズはBLOBの場合はBLOBMAXSIZEで、CLOBの場合はCLOBMAXSIZEです。

表2-19 ERASEプロシージャの例外

例外

説明

VALUE_ERROR

入力パラメータのいずれかがNULLです。

INVALID_ARGVAL

次のいずれかが該当します。

amount < 1またはamount >最大LOBサイズ

offset < 1またはoffset >最大LOBサイズ

QUERY_WRITE

問合せ内でLOB書込みを実行できません(これはTimesTenでは実行できません。)

BUFFERING_ENABLED

LOBでLOBバッファを有効にした状態では操作を実行できません。

FREETEMPORARYプロシージャ

このプロシージャは、一時データ・パーティションの一時BLOB、CLOBまたはNCLOBを解放します。

CREATETEMPORARYプロシージャに関する説明も参照してください。

構文

DBMS_LOB.FREETEMPORARY (
lob_loc  IN OUT  NOCOPY BLOB);

DBMS_LOB.FREETEMPORARY (
lob_loc  IN OUT  NOCOPY CLOB CHARACTER SET ANY_CS);

パラメータ

表2-20 FREETEMPORARYプロシージャ・パラメータ

パラメータ

説明

lob_loc

LOBのロケータ

使用上の注意

- FREETEMPORARYへのコール後、解放されたLOBロケータには無効のマークが設定されます。

- 無効のLOBロケータが、PL/SQLの割当て操作によって別のLOBロケータに割り当てられている場合、割当て先も解放され、無効のマークが設定されます。

- 一時パススルーLOBはCREATETEMPORARYを使用しては作成できませんが、SQLなどその他のメカニズムで作成された場合、そのLOBでISTEMPORARYおよびFREETEMPORARYを使用できます。

GETCHUNKSIZEファンクション

TimesTenではこの機能をサポートしておらず、単純に値32Kを相互運用性のために戻します。この値は、TimesTenアプリケーションのパフォーマンスのチューニングには関係しません。(Oracle Databaseの機能については、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』のGETCHUNKSIZEファンクションに関する説明を参照してください。)

構文

DBMS_LOB.GETCHUNKSIZE (
lob_loc IN BLOB)
RETURN INTEGER;

DBMS_LOB.GETCHUNKSIZE (
lob_loc IN CLOB CHARACTER SET ANY_CS)
RETURN INTEGER;

パラメータ

表2-21 GETCHUNKSIZEファンクション・パラメータ

パラメータ

説明

lob_loc

LOBのロケータ

戻り値

値32Kは戻されますが、この数値に依存してアプリケーションのパフォーマンスのチューニングはしないようにする必要があります。

例外

表2-22 GETCHUNKSIZEプロシージャの例外

例外

説明

BUFFERING_ENABLED

LOBでLOBバッファを有効にした状態では操作を実行できません。

GETLENGTHファンクション

このファンクションでは指定したLOBの長さをバイト数(BLOBの場合)または文字数(CLOBまたはNCLOBの場合)で戻します。

構文

DBMS_LOB.GETLENGTH (
lob_loc    IN  BLOB)
RETURN INTEGER;

DBMS_LOB.GETLENGTH (
lob_loc    IN  CLOB   CHARACTER SET ANY_CS)
RETURN INTEGER;

パラメータ

表2-23 GETLENGTHファンクションのパラメータ

パラメータ

説明

lob_loc

LOBのロケータ

戻り値

LOB値の長さを、バイト数または文字数のINTEGER値で戻します。入力LOBまたはlob_locがNULLの場合、NULLが戻されます。

使用上の注意

- 以前に行ったERASEまたはWRITE操作でLOBに挿入された0(ゼロ)バイトまたは空白のFILLERは長さに含まれます。空のLOBの長さは0(ゼロ)です。

例外

表2-24 GETLENGTHプロシージャの例外

例外

説明

BUFFERING_ENABLED

LOBでLOBバッファを有効にした状態では操作を実行できません。

例

次の例は、GETLENGTHファンクションの使用方法を示します。

create table t1 (a int, b blob, c clob);

insert into t1(a,b,c) values(1, 0x123451234554321, 'abcde');
1 row inserted.

commit;

declare
myblob blob;
i integer;
begin
myblob := empty_blob();
i := dbms_lob.getlength(myblob);
dbms_output.put_line('Length of BLOB before SELECT: ' || i);
select b into myblob from t1 where a=1;
i := dbms_lob.getlength(myblob);
dbms_output.put_line('Length of BLOB after SELECT: ' || i);
end;

Length of BLOB before SELECT: 0
Length of BLOB after SELECT: 8

PL/SQL procedure successfully completed.

(SQLスクリプトからコマンドを実行した後、出力が表示されます。)

GET_STORAGE_LIMITファンクション

このファンクションは、指定したLOBのタイプの記憶域制限をバイト数で戻します。

構文

DBMS_LOB.GET_STORAGE_LIMIT (
lob_loc  IN CLOB CHARACTER SET ANY_CS)
RETURN INTEGER;

DBMS_LOB.GET_STORAGE_LIMIT (
lob_loc  IN BLOB)
RETURN INTEGER;

パラメータ

表2-25 GET_STORAGE_LIMITファンクション・パラメータ

パラメータ

説明

lob_loc

LOBのロケータ

戻り値

TimesTenでは、指定したLOBのタイプのバイト単位での最大の記憶域容量値が単純に戻されます。つまり、BLOBの場合は16777216(16 MB)でCLOBまたはNCLOBの場合は4194304(4 MB)です。

INSTRファンクション

このファンクションは、指定したオフセットを開始位置として、指定したLOBにおける指定したパターンのn番目に一致した位置を戻します。

注意:
「SUBSTRファンクション」も参照してください。

構文

DBMS_LOB.INSTR (
lob_loc    IN   BLOB,
pattern    IN   RAW,
offset     IN   INTEGER := 1,
nth        IN   INTEGER := 1)
RETURN INTEGER;

DBMS_LOB.INSTR (
lob_loc    IN   CLOB      CHARACTER SET ANY_CS,
pattern    IN   VARCHAR2  CHARACTER SET lob_loc%CHARSET,
offset     IN   INTEGER := 1,
nth        IN   INTEGER := 1)
RETURN INTEGER;

パラメータ

表2-26 INSTRファンクション・パラメータ

パラメータ

説明

lob_loc

LOBのロケータ

pattern

テストするパターン

このパターンは、BLOBの場合はRAWバイトで、CLOBまたはNCLOBの場合は文字列(VARCHAR2)です。このパターンの最大サイズは16383バイトです。

offset

パターン・マッチングの開始位置を示す絶対オフセット(起点: 1)(BLOBの場合はバイト数、CLOBまたはNCLOBの場合は文字数で指定します)

nth

LOB内でパターンが何回目に出現するか(起点: 1)。

戻り値

このファンクションは、次のいずれかを戻します。

- 一致するパターンの開始位置のオフセットのINTEGER値(BLOBの場合はバイト数、CLOBまたはNCLOBの場合は文字数で指定します)

- パターンが見つからない場合は0(ゼロ)

- いずれかの入力パラメータがNULLか無効か、次のいずれかに該当する場合はNULL

- offset < 1またはoffset >最大LOBサイズ

- nth < 1またはnth >最大LOBサイズ

ここで、最大LOBサイズはBLOBの場合はBLOBMAXSIZEで、CLOBの場合はCLOBMAXSIZEです。

使用上の注意

- CLOBまたはNCLOBの場合、patternパラメータのVARCHAR2バッファの形式はLOBのタイプに適したものである必要があります。指定したLOBがNCLOBのタイプである場合、パターンにはNCHARデータが含まれる必要があります。指定したLOBがCLOBのタイプである場合、パターンにはCHARデータが含まれる必要があります。

- INSTRなど、パターン・マッチング用にRAWまたはVARCHAR2パラメータを受け入れる操作では、パターン・パラメータまたは副文字列において、正規表現または特殊一致文字(例: SQLのLIKE)はサポートされていません。

ISOPENファンクション

このファンクションは、LOBが入力ロケータを使用してすでにオープンされているかどうかをチェックします。

構文

DBMS_LOB.ISOPEN (
lob_loc IN BLOB)
RETURN INTEGER;

DBMS_LOB.ISOPEN (
lob_loc IN CLOB CHARACTER SET ANY_CS)
RETURN INTEGER;

パラメータ

表2-27 ISOPENファンクション・パラメータ

パラメータ

説明

lob_loc

LOBのロケータ

戻り値

戻り値は、LOBがオープンしている場合は1、していない場合は0(ゼロ)です。

使用上の注意

- オープンのステータスは、ロケータではなくLOBに関連付けられています。LOBのオープンにロケータが使用されている場合、LOBのその他のロケータもそれをオープンとみなします。

- ISOPENでは、LOBがオープンであるかの状態をサーバー上で調べる必要があるため、ラウンドトリップする必要があります。

ISTEMPORARYファンクション

このファンクションはLOBが一時的であるかどうかを判断します。

構文

DBMS_LOB.ISTEMPORARY (
lob_loc IN BLOB)
RETURN INTEGER;

DBMS_LOB.ISTEMPORARY (
lob_loc IN CLOB CHARACTER SET ANY_CS)
RETURN INTEGER;

パラメータ

表2-28 ISTEMPORARYプロシージャ・パラメータ

パラメータ

説明

lob_loc

LOBのロケータ

戻り値

戻り値は、LOBが存在し一時LOBである場合は1、LOBが存在しないか一時LOBではない場合は0(ゼロ)、また指定されたロケータ値がNULLの場合はNULLです。

使用上の注意

- FREETEMPORARYで一時LOBを解放すると、LOBロケータはNULLに設定されません。その結果、ISTEMPORARYでは、解放されたが明示的にNULLにリセットされていないロケータについては0 (ゼロ)を戻します。

- 一時パススルーLOBはCREATETEMPORARYを使用しては作成できませんが、SQLなどその他のメカニズムで作成された場合、そのLOBでISTEMPORARYおよびFREETEMPORARYを使用できます。

OPENプロシージャ

このプロシージャでは、LOBを指定された読取り専用または読取り/書込みモードでオープンします。

構文

DBMS_LOB.OPEN (
lob_loc   IN OUT NOCOPY BLOB,
open_mode IN            BINARY_INTEGER);

DBMS_LOB.OPEN (
lob_loc   IN OUT NOCOPY CLOB CHARACTER SET ANY_CS,
open_mode IN            BINARY_INTEGER);

パラメータ

表2-29 OPENプロシージャ・パラメータ

パラメータ

説明

lob_loc

LOBのロケータ

open_mode

オープンするLOB_READONLYまたはLOB_READWRITEのいずれかのモード

使用上の注意

- 読取り専用としてオープンされたLOBに書込みを試行すると、エラーが返されます。

- OPENはサーバーへラウンドトリップをする必要があり、そのためにOPENコールに依存するコードが実行されます。

- LOB操作はOPENおよびCLOSEコールで囲む必要はありません。ただし、LOBをオープンしている場合は、トランザクションをコミットまたはロールバックする前にクローズする必要があります。

- トランザクションによってオープンされたすべてのLOBをクローズする前にトランザクションをコミットすると、エラーが発生します。エラーが戻された場合、LOBのオープンのステータスは廃棄されますが、トランザクションのコミットは正常に行われます。したがって、LOBおよび非LOBデータの両方に対するすべての変更トランザクションはコミットされます。

READプロシージャ

このプロシージャは、指定したLOBの先頭からの絶対オフセットから開始するLOBの一部を読み取り、bufferパラメータに、(BLOBの場合は)指定されたバイト数を戻し、(CLOBまたはNCLOBの場合は)文字数を戻します。

構文

DBMS_LOB.READ (
lob_loc   IN             BLOB,
amount    IN OUT  NOCOPY INTEGER,
offset    IN             INTEGER,
buffer    OUT            RAW);

DBMS_LOB.READ (
lob_loc   IN             CLOB CHARACTER SET ANY_CS,
amount    IN OUT  NOCOPY INTEGER,
offset    IN             INTEGER,
buffer    OUT            VARCHAR2 CHARACTER SET lob_loc%CHARSET);

パラメータ

表2-30 READプロシージャ・パラメータ

パラメータ

説明

lob_loc

LOBのロケータ

amount

(IN)読み込むバイト数(BLOBの場合)または文字数(CLOBまたはNCLOBの場合)

(OUT)実際に読み込まれたバイト数または文字数

offset

LOBの先頭からのオフセット(起点: 1)(BLOBの場合はバイト数、CLOBまたはNCLOBの場合は文字数で指定します)

buffer

読取り操作からの出力バッファ

使用上の注意

- 入力offsetがLOBの終了を超えた位置をポイントしている場合、amountは0(ゼロ)に設定され、NO_DATA_FOUND例外が発生します。

- CLOBまたはNCLOBの場合、bufferパラメータのVARCHAR2バッファの形式はLOBのタイプに適したものである必要があります。指定したLOBがNCLOBのタイプである場合、バッファにはNCHARデータが含まれる必要があります。指定したLOBがCLOBのタイプである場合、バッファにはCHARデータが含まれる必要があります。

- クライアントからREADをコールする場合、戻されたバッファにはクライアントのキャラクタ・セットのデータが含まれます。データベースは、バッファをユーザーに戻す前に、サーバーのキャラクタ・セットからクライアントのキャラクタ・セットにLOB値を変換します。

- READは、読取り前に必要に応じてLOBを取得します。

例外

最大LOBサイズはBLOBの場合はBLOBMAXSIZEで、CLOBの場合はCLOBMAXSIZEです。

表2-31 READプロシージャの例外

例外

説明

VALUE_ERROR

lob_loc、amountまたはoffsetのいずれかがNULLです。

INVALID_ARGVAL

次のいずれかが該当します。

amount < 1またはamount > 32767バイト(または同等の文字)またはbuffer容量

offset < 1またはoffset >最大LOBサイズ

NO_DATA_FOUND

LOBの終了に達し、LOBにはこれ以上読み取るバイトまたは文字がありません。amountパラメータの値が0(ゼロ)です。

SUBSTRファンクション

このファンクションでは、指定したLOBの先頭からの指定したオフセットから開始する指定されたバイト数(BLOBの場合)または文字数(CLOBまたはNCLOBの場合)を戻します。

注意:
「INSTRファンクション」および「READプロシージャ」も参照してください。

構文

DBMS_LOB.SUBSTR (
lob_loc     IN    BLOB,
amount      IN    INTEGER := 32767,
offset      IN    INTEGER := 1)
RETURN RAW;

DBMS_LOB.SUBSTR (
lob_loc     IN    CLOB   CHARACTER SET ANY_CS,
amount      IN    INTEGER := 32767,
offset      IN    INTEGER := 1)
RETURN VARCHAR2 CHARACTER SET lob_loc%CHARSET;

パラメータ

表2-32 SUBSTRファンクション・パラメータ

パラメータ

説明

lob_loc

LOBのロケータ

amount

読み込むバイト数(BLOBの場合)または文字数(CLOBまたはNCLOBの場合)

offset

LOBの先頭からのオフセット(起点: 1)(BLOBの場合はバイト数、CLOBまたはNCLOBの場合は文字数で指定します)

戻り値

次のいずれかを戻します。

- BLOBの場合は、RAWバイト数

- CLOBまたはNCLOBの場合は、VARCHAR2文字数

- いずれかの入力パラメータがNULLか、次のいずれかが該当する場合はNULL

- amount < 1またはamount > 32767バイト(または同等の文字)

- offset < 1またはoffset >最大LOBサイズ

ここで、最大LOBサイズはBLOBの場合はBLOBMAXSIZEで、CLOBの場合はCLOBMAXSIZEです。

使用上の注意

- 固定幅のnバイトのCLOBまたはNCLOBの場合は、SUBSTRに対する入力amountの指定が(32767/n)を超えると、SUBSTRでは、(32767/n)の長さの文字バッファまたはCLOBの長さのうち、小さい方を戻します。可変幅キャラクタ・セットのCLOBの場合、nはCLOBの文字に使用される最大バイト幅です。

- CLOBまたはNCLOBの場合、VARCHAR2戻りバッファの形式はLOBの形式に適したものである必要があります。指定したLOBがNCLOBのタイプである場合、バッファにはNCHARデータが含まれる必要があります。指定したLOBがCLOBのタイプである場合、バッファにはCHARデータが含まれる必要があります。

- クライアントからSUBSTRをコールする場合、戻されたバッファにはクライアントのキャラクタ・セットのデータが含まれます。データベースは、バッファをユーザーに戻す前に、サーバーのキャラクタ・セットからクライアントのキャラクタ・セットにLOB値を変換します。

- SUBSTRは、LOBに格納されている文字に基づいて8191個以上の文字を戻します。使用可能なバッファを超える文字バイト数が原因ですべての文字が戻されない場合、新しいオフセットでSUBSTRをコールして残りの文字を読み取るか、すべてのデータを抽出するまでサブプログラムのコールをループする必要があります。

- SUBSTRは、読取り前に必要に応じてLOBを取得します。

TRIMプロシージャ

このプロシージャは、newlenパラメータで指定した長さにLOBを切り捨てます。新しい必要なデータ長をBLOBの場合はバイト数で、CLOBまたはNCLOBの場合は文字数で指定します。

注意:
「ERASEプロシージャ」および「WRITEAPPENDプロシージャ」も参照してください。

構文

DBMS_LOB.TRIM (
lob_loc        IN OUT  NOCOPY BLOB,
newlen         IN             INTEGER);

DBMS_LOB.TRIM (
lob_loc        IN OUT  NOCOPY CLOB CHARACTER SET ANY_CS,
newlen         IN             INTEGER);

パラメータ

表2-33 TRIMプロシージャ・パラメータ

パラメータ

説明

lob_loc

LOBのロケータ

newlen

目的の切捨て後のLOB値の長さ(BLOBの場合はバイト数、CLOBまたはNCLOBの場合は文字数で指定します)

使用上の注意

- 空のLOBを削除しようとすると、アクションは実行されず、TRIMによってエラーが戻されません。

- newlenで指定した新しい長さがLOBのサイズよりも大きい場合は、例外が発生します。

- LOBへの書込み操作は、OPENおよびCLOSEコールで囲むことをお薦めします(必須ではありません)。ただし、操作を実行する前にLOBをオープンした場合は、トランザクションのコミットまたはロールバックを実行する前にクローズする必要があります。

- TRIMは、LOBの長さを変更する前に、指定する新しい長さが0(ゼロ)の場合を除き、必要に応じてLOBを取得します。

例外

最大LOBサイズはBLOBの場合はBLOBMAXSIZEで、CLOBの場合はCLOBMAXSIZEです。

表2-34 TRIMプロシージャの例外

例外

説明

VALUE_ERROR

lob_loc値がNULLです。

INVALID_ARGVAL

次のいずれかが該当します。

newlen < 0またはnewlen >最大LOBサイズ

QUERY_WRITE

問合せ内でLOB書込みを実行できません(これはTimesTenでは実行できません。)

BUFFERING_ENABLED

LOBでLOBバッファを有効にした状態では操作を実行できません。

WRITEプロシージャ

このプロシージャは、LOBの先頭からの指定した絶対オフセットから開始し、指定された量のデータをLOBに書き込みます。データは、bufferパラメータから書き込まれます。

WRITEは、オフセット位置以降LOBにすでに存在しているデータを、指定した長さだけ置換(上書き)します。

注意:
「COPYプロシージャ」および「WRITEAPPENDプロシージャ」も参照してください。

構文

DBMS_LOB.WRITE (
lob_loc  IN OUT NOCOPY  BLOB,
amount   IN             INTEGER,
offset   IN             INTEGER,
buffer   IN             RAW);

DBMS_LOB.WRITE (
lob_loc  IN OUT  NOCOPY CLOB   CHARACTER SET ANY_CS,
amount   IN             INTEGER,
offset   IN             INTEGER,
buffer   IN             VARCHAR2 CHARACTER SET lob_loc%CHARSET);

パラメータ

表2-35 WRITEプロシージャ・パラメータ

パラメータ

説明

lob_loc

LOBのロケータ

amount

書き込むバイト数(BLOBの場合)または文字数(CLOBまたはNCLOBの場合)

offset

LOBの先頭からの書込み操作のオフセット(起点: 1)(BLOBの場合はバイト数、CLOBまたはNCLOBの場合は文字数で指定します)

buffer

書込み用データの入力バッファ

使用上の注意

- 指定したamountがバッファのデータより多い場合はエラーが発生します。入力amountがバッファのデータより少ない場合は、バッファからその量のバイト数または文字数のみLOBに書き込まれます。指定したオフセットが、現在そのLOBに格納されているデータの終わりを超えている場合は、オフセットに到達するためにLOBに、0(ゼロ)バイトのFILLER(BLOBの場合)または空白(CLOBまたはNCLOBの場合)が挿入されます。

- CLOBまたはNCLOBの場合、bufferパラメータのVARCHAR2バッファの形式はLOBのタイプに適したものである必要があります。指定したLOBがNCLOBのタイプである場合、バッファにはNCHARデータが含まれる必要があります。指定したLOBがCLOBのタイプである場合、バッファにはCHARデータが含まれる必要があります。

- クライアントからWRITEをコールする場合、バッファにはクライアントのキャラクタ・セットのデータが含まれる必要があります。データベースは、バッファ・データをLOBに書き込む前に、クライアント側のバッファをサーバー側のキャラクタ・セットに変換します。

- LOBへの書込み操作は、OPENおよびCLOSEコールで囲むことをお薦めします(必須ではありません)。ただし、操作を実行する前にLOBをオープンした場合は、トランザクションのコミットまたはロールバックを実行する前にクローズする必要があります。

- WRITEは、LOBに書き込む前に、書込みがLOB全体を上書きするように指定されている場合を除き、必要に応じてそれを取得します。

例外

最大LOBサイズはBLOBの場合はBLOBMAXSIZEで、CLOBの場合はCLOBMAXSIZEです。

表2-36 WRITEプロシージャの例外

例外

説明

VALUE_ERROR

lob_loc、amountまたはoffsetがNULLであるか、範囲外であるか、無効です。

INVALID_ARGVAL

次のいずれかが該当します。

amount < 1またはamount > 32767バイト(または同等の文字)またはbufferの容量

offset < 1またはoffset >最大LOBサイズ

QUERY_WRITE

問合せ内でLOB書込みを実行できません(これはTimesTenでは実行できません。)

BUFFERING_ENABLED

LOBでLOBバッファを有効にした状態では操作を実行できません。

WRITEAPPENDプロシージャ

このプロシージャは、指定された量のデータをLOBの後ろ追加します。データは、bufferパラメータから書き込まれます。(APPENDプロシージャとは混同しないでください。)

注意:
「APPENDプロシージャ」、「COPYプロシージャ」および「WRITEプロシージャ」も参照してください。

構文

DBMS_LOB.WRITEAPPEND (
lob_loc IN OUT NOCOPY BLOB,
amount  IN            INTEGER,
buffer  IN            RAW);

DBMS_LOB.WRITEAPPEND (
lob_loc IN OUT NOCOPY CLOB CHARACTER SET ANY_CS,
amount  IN            INTEGER,
buffer  IN            VARCHAR2 CHARACTER SET lob_loc%CHARSET);

パラメータ

表2-37 WRITEAPPENDプロシージャ・パラメータ

パラメータ

説明

lob_loc

LOBのロケータ

amount

書き込むバイト数(BLOBの場合)または文字数(CLOBまたはNCLOBの場合)

buffer

書込み用データの入力バッファ

使用上の注意

- 入力amountがバッファのデータより多い場合はエラーが発生します。入力amountがバッファのデータより少ない場合は、バッファからそのamountのバイト数または文字数のみLOBに追加します。

- CLOBまたはNCLOBの場合、bufferパラメータのVARCHAR2バッファの形式はLOBのタイプに適したものである必要があります。指定したLOBがNCLOBのタイプである場合、バッファにはNCHARデータが含まれる必要があります。指定したLOBがCLOBのタイプである場合、バッファにはCHARデータが含まれる必要があります。

- クライアントからWRITEAPPENDをコールする場合、バッファにはクライアントのキャラクタ・セットのデータが含まれる必要があります。データベースは、バッファ・データをLOBに書き込む前に、クライアント側のバッファをサーバー側のキャラクタ・セットに変換します。

- LOBへの書込み操作は、OPENおよびCLOSEコールで囲むことをお薦めします(必須ではありません)。ただし、操作を実行する前にLOBをオープンした場合は、トランザクションのコミットまたはロールバックを実行する前にクローズする必要があります。

- WRITEAPPENDは、LOBに追加する前に、必要に応じてそれを取得します。

例外

表2-38 WRITEAPPENDプロシージャの例外

例外

説明

VALUE_ERROR

lob_loc、amountまたはoffsetがnullであるか、範囲外であるか、無効です。

INVALID_ARGVAL

次のいずれかが該当します。

amount < 1またはamount > 32767バイト(または同等の文字)またはbufferの容量

QUERY_WRITE

問合せ内でLOB書込みを実行できません(これはTimesTenでは実行できません。)

BUFFERING_ENABLED

LOBでLOBバッファを有効にした状態では操作を実行できません。

3 DBMS_LOCK

DBMS_LOCKパッケージでは、ロック管理サービスへのインタフェースが提供されます。

現在のリリースのTimesTenでは、SLEEPサブプログラムのみがサポートされています。

この章の内容は次のとおりです。

- DBMS_LOCKの使用

- DBMS_LOCKサブプログラムの要約

DBMS_LOCKの使用

現在、TimesTenで実装されるのはSLEEPサブプログラムのみであり、これは指定した期間でセッションを一時停止するために使用されます。

DBMS_LOCKサブプログラムの要約

現在のリリースのTimesTenでは、SLEEPサブプログラムのみがサポートされています。

表3-1 DBMS_LOCKパッケージのサブプログラム

サブプログラム

説明

SLEEPプロシージャ

指定した期間、セッションを一時停止します。

SLEEPプロシージャ

このプロシージャは、指定した期間、セッションを一時停止します。

構文

DBMS_LOCK.SLEEP (
seconds  IN NUMBER);

パラメータ

表3-2 SLEEPプロシージャ・パラメータ

パラメータ

説明

seconds

セッションを中断する秒単位での時間(最小の増分単位は1/100秒)

使用上の注意

- システムのアクティビティによっては、実際のスリープ時間が指定した時間より多少長くなることがあります。

- PLSQL_TIMEOUT一般接続属性がこのスリープ時間未満の正の値に設定されている場合は、まず、タイムアウトが有効になります。スリープ値がタイムアウト値より小さいか、またはPLSQL_TIMEOUT=0(タイムアウトなし)である必要があります。PLSQL_TIMEOUTについては、『Oracle TimesTen In-Memory Database PL/SQL開発者ガイド』のPL/SQL接続属性に関する説明を参照してください。

例

DBMS_LOCK.SLEEP(1.95);

4 DBMS_OUTPUT

DBMS_OUTPUTパッケージを使用すると、ストアド・プロシージャおよびパッケージからメッセージを送信できます。このパッケージは、PL/SQLデバッグ情報を表示する場合に特に役立ちます。

この章の内容は次のとおりです。

- DBMS_OUTPUTの使用

- 概要

- 使用上の注意

- ルールおよび制限

- 例外

- 例

- データ構造

- 表タイプ

- DBMS_OUTPUTサブプログラムの要約

DBMS_OUTPUTの使用

この項では、DBMS_OUTPUTパッケージの使用に関連するトピックについて説明します。

- 概要

- 使用上の注意

- 例外

- ルールおよび制限

- 例

概要

このパッケージのPUTプロシージャおよびPUT_LINEプロシージャを使用すると、別のプロシージャまたはパッケージが読み取ることができるバッファに情報を格納できます。GET_LINEプロシージャおよびGET_LINESプロシージャをコールすると、バッファされた情報を個別のPL/SQLプロシージャまたは無名ブロックで表示できます。

パッケージを無効にすると、サブプログラムへのすべてのコールが無視されます。このようにして、クライアントが情報を処理できる場合にのみサブプログラムを使用できるようにアプリケーションを設計できます。

使用上の注意

- GET_LINEをコールしない場合、またはttIsqlの画面にメッセージを表示しない場合、バッファに入れたメッセージは無視されます。

- ttIsqlユーティリティは、SQL文または無名PL/SQLコールを発行した後、GET_LINESをコールします。

- ttIsqlでSET SERVEROUTPUT ONを入力すると、次と同じ効果があります。

DBMS_OUTPUT.ENABLE (buffer_size => NULL);

出力に制限はありません。

- 一般に、アプリケーション・コードでDISABLEプロシージャまたはENABLEプロシージャを起動させると、出力を表示するかどうかを制御する、ttIsqlなどの外部ツールの試行が妨害されるため、アプリケーション・コードでは起動させないでください。

注意:
DBMS_OUTPUTを使用して送信されるメッセージは、送信中のサブプログラムが完了するまで、実際には送信されません。プログラムの実行中に出力をフラッシュするメカニズムはありません。

ルールおよび制限

- 行の最大サイズは32767バイトです。

- デフォルトのバッファ・サイズは20000バイトです。最小サイズは2000バイトですが、最大サイズに制限はありません。

例外

DBMS_OUTPUTサブプログラムによって、アプリケーション・エラーORA-20000が発生し、出力プロシージャから次のエラーが戻されることがあります。

表4-1 DBMS_OUTPUTの例外

例外

説明

ORU-10027

バッファのオーバーフロー。

ORU-10028

行の長さのオーバーフロー。

例

通常、DBMS_OUTPUTパッケージは、ストアド・プロシージャまたはファンクションのデバッグに使用されます。

このファンクションは、HRスキーマのemployees表を問い合わせ、指定した部門の合計給与を戻します。ファンクションには、PUT_LINEプロシージャへのコールが含まれています。

CREATE OR REPLACE FUNCTION dept_salary (dnum NUMBER) RETURN NUMBER IS
CURSOR emp_cursor IS
select salary, commission_pct from employees where department_id = dnum;
total_wages NUMBER(11, 2) := 0;
counter NUMBER(10) := 1;
BEGIN
FOR emp_record IN emp_cursor LOOP
emp_record.commission_pct := NVL(emp_record.commission_pct, 0);
total_wages := total_wages + emp_record.salary
+ emp_record.commission_pct;
DBMS_OUTPUT.PUT_LINE('Loop number = ' || counter ||
'; Wages = '|| TO_CHAR(total_wages)); /* Debug line */
counter := counter + 1; /* Increment debug counter */
END LOOP;
/* Debug line */
DBMS_OUTPUT.PUT_LINE('Total wages = ' ||
TO_CHAR(total_wages));
RETURN total_wages;
END;

ユーザーがttIsqlで次の文を実行するとします。

Command> SET SERVEROUTPUT ON
Command> VARIABLE salary NUMBER;
Command> EXECUTE :salary := dept_salary(20);

次のような出力が表示されます。

Loop number = 1; Wages = 13000
Loop number = 2; Wages = 19000
Total wages = 19000

PL/SQL procedure successfully executed.

データ構造

DBMS_OUTPUTパッケージでは、GET_LINESプロシージャで使用するために、2つの表タイプが宣言されます。

注意:

- PLS_INTEGERデータ・タイプとBINARY_INTEGERデータ・タイプは同じです。このドキュメントでは、リファレンス情報でデータ・タイプ(表タイプ、レコード・タイプ、サブプログラム・パラメータ、サブプログラム戻り値など)を示す場合にBINARY_INTEGERを使用しますが、説明および例ではいずれも使用される場合があります。

- INTEGERデータ・タイプとNUMBER(38)データ・タイプも同じです。このドキュメントでは、全体をとおしてINTEGERを使用します。

表タイプ

CHARARR表タイプ

DBMSOUTPUT_LINESARRAY表タイプ

CHARARR表タイプ

このパッケージは、GET_LINESプロシージャとともに使用され、PUTプロシージャおよびPUT_LINEプロシージャを介して送信されたテキストを取得します。

構文

TYPE CHARARR IS TABLE OF VARCHAR2(32767) INDEX BY BINARY_INTEGER;

DBMSOUTPUT_LINESARRAY表タイプ

このパッケージは、GET_LINESプロシージャとともに使用され、PUTプロシージャおよびPUT_LINEプロシージャを介して送信されたテキストを取得します。

構文

TYPE DBMSOUTPUT_LINESARRAY IS
VARRAY(2147483647) OF VARCHAR2(32767);

DBMS_OUTPUTサブプログラムの要約

表4-2 DBMS_OUTPUTパッケージのサブプログラム

サブプログラム

説明

DISABLEプロシージャ

メッセージの出力を無効にします。

ENABLEプロシージャ

メッセージの出力を有効にします。

GET_LINEプロシージャ

バッファから1行を取り出します。

GET_LINESプロシージャ

バッファから行の配列を取り出します。

NEW_LINEプロシージャ

PUTで作成された行を終了します。

PUTプロシージャ

バッファに1行を格納します。

PUT_LINEプロシージャ

バッファに行の一部を格納します。

DISABLEプロシージャ

このプロシージャは、PUT、PUT_LINE、NEW_LINE、GET_LINEおよびGET_LINESへのコールを無効にし、バッファに残っている情報をパージします。

ENABLEプロシージャと同様に、ttIsqlのSET SERVEROUTPUT ON設定を使用している場合は、このプロシージャをコールする必要はありません。

構文

DBMS_OUTPUT.DISABLE;

ENABLEプロシージャ

このプロシージャは、PUT、PUT_LINE、NEW_LINE、GET_LINEおよびGET_LINESへのコールを有効にします。DBMS_OUTPUTパッケージが有効化されていない場合、これらのプロシージャへのコールは無視されます。

構文

DBMS_OUTPUT.ENABLE (
buffer_size IN INTEGER DEFAULT 20000);

パラメータ

表4-3 ENABLEプロシージャ・パラメータ

パラメータ

説明

buffer_size

バッファに入れられる情報量の上限(バイト)

buffer_sizeにNULLを設定すると、制限がなくなります。

使用上の注意

- ttIsqlからSET SERVEROUTPUT ONを使用する場合、このプロシージャをコールする必要はありません。これは自動的にコールされます(現在のリリースでは、buffer_sizeにNULL値が設定されています)。

- ENABLEへのコールが複数ある場合、buffer_sizeは最後に指定された値になります。ユーザーがbuffer_size(NOT NULL)を指定した場合、最大サイズは1,000,000および最小サイズは2000です。

- 通常、NULLを選択することをお薦めします。デフォルトは、無制限のバッファをサポートしていなかった以前のデータベース・バージョンとの下位互換のために20000です。

GET_LINEプロシージャ

このプロシージャは、バッファに入れられた単一行の情報を取り出します。

構文

DBMS_OUTPUT.GET_LINE (
line    OUT VARCHAR2,
status  OUT INTEGER);

パラメータ

表4-4 GET_LINEプロシージャ・パラメータ

パラメータ

説明

line

末尾の改行文字を除くバッファに入れられた単一行の情報

「ORA-06502: PL/SQL: 数値または値のエラー: 文字列バッファが小さすぎます」のリスクを回避するために、このパラメータをVARCHAR2(32767)として宣言する必要があります。

status

コール・ステータス

コールが正常に完了すると、0が戻されます。バッファにこれ以上行がないと、1が戻されます。

使用上の注意

- 単一行または行の配列をバッファから取り出すことができます。バッファに入れられた単一行の情報を取り出すには、GET_LINEをコールします。サーバーへのコール数を減らすには、GET_LINESをコールして、バッファから行の配列を取り出します。

- ttIsqlを使用している場合、特別なSET SERVEROUTPUT ONコマンドを使用することで、この情報を自動的に表示するように選択できます。

- GET_LINEまたはGET_LINESをコールしてから、次にPUT、PUT_LINEまたはNEW_LINEをコールする前に取り出されなかった行は、次のメッセージとの混同を避けるために破棄されます。

GET_LINESプロシージャ

このプロシージャは、バッファから行の配列を取り出します。

構文

DBMS_OUTPUT.GET_LINES (
lines       OUT     DBMS_OUTPUT.CHARARR,
numlines    IN OUT  INTEGER);

DBMS_OUTPUT.GET_LINES (
lines       OUT     DBMS_OUTPUT.DBMSOUTPUT_LINESARRAY,
numlines    IN OUT INTEGER);

パラメータ

表4-5 GET_LINESプロシージャのパラメータ

パラメータ

説明

lines

バッファに入れられた情報の行の配列

配列内の各行の最大長は32767バイトです。PL/SQL無名ブロックからプロシージャを実行する場合、3GLホスト・プログラムで可変長配列オーバーロード・バージョンを使用することをお薦めします。

numlines

バッファから取り出す行数

プロシージャは、指定の行数を取り出した後、実際に取り出した行数を戻します。この数が要求した行数より少ない場合は、バッファにそれ以上行がない場合です。

使用上の注意

- 単一行または行の配列をバッファから取り出すことができます。バッファに入れられた単一行の情報を取り出すには、GET_LINEをコールします。サーバーへのトリップ数を減らすために、バッファから行の配列を取り出すには、GET_LINESをコールします。

- ttIsqlを使用している場合、特別なSET SERVEROUTPUT ONコマンドを使用することで、この情報を自動的に表示するように選択できます。

- GET_LINEまたはGET_LINESをコールしてから、次にPUT、PUT_LINEまたはNEW_LINEをコールする前に取り出されなかった行は、次のメッセージとの混同を避けるために廃棄されます。

NEW_LINEプロシージャ

このプロシージャは、行端マーカーを設定します。GET_LINEプロシージャおよびGET_LINESプロシージャは、改行で区切られた行を戻します。PUT_LINEプロシージャまたはNEW_LINEへのすべてのコールによって、GET_LINEまたはGET_LINESで戻される行が生成されます。

構文

DBMS_OUTPUT.NEW_LINE;

PUTプロシージャ

このプロシージャは、行の一部をバッファに設定します。

注意:
NUMBER入力を使用するPUTバージョンは非推奨になりました。これは、下位互換性を保つためにのみサポートされています。

構文

DBMS_OUTPUT.PUT (
a IN VARCHAR2);

パラメータ

表4-6 PUTプロシージャのパラメータ

パラメータ

説明

a

バッファに設定する項目

使用上の注意

- PUTを複数回コールすることによって個別に情報行を作成するか、PUT_LINEをコールして情報行全体をバッファに設定することができます。

- PUT_LINEをコールすると、指定した項目には行端マーカーが自動的に付きます。PUTをコールして行を作成する場合、NEW_LINEをコールして、独自の行端マーカーを追加する必要があります。GET_LINEおよびGET_LINESは、改行文字で終了していない行は戻しません。

- 行が行制限を超えた場合は、エラー・メッセージを受信します。

- PUTまたはPUT_LINEで作成した出力はバッファに入れられます。この出力は、それをバッファに入れたPL/SQLプログラム・ユニットがコール元に戻るまで取り出せません。

例外

表4-7 PUTプロシージャの例外

例外

説明

ORA-20000、ORU-10027

ENABLEプロシージャ・コールに指定したbuffer_size制限に基づくバッファのオーバーフロー

ORA-20000、ORU-10028

行の長さのオーバーフロー(各行の制限は32767バイト)

PUT_LINEプロシージャ

このプロシージャは、行をバッファに設定します。

注意:
NUMBER入力を使用するPUT_LINEバージョンは非推奨になりました。これは、下位互換性を保つためにのみサポートされています。

構文

DBMS_OUTPUT.PUT_LINE (
a IN VARCHAR2);

パラメータ

表4-8 PUT_LINEプロシージャのパラメータ

パラメータ

説明

a

バッファに設定する項目

使用上の注意

- PUTを複数回コールすることによって個別に情報行を作成するか、PUT_LINEをコールして情報行全体をバッファに設定することができます。

- PUT_LINEをコールすると、指定した項目には行端マーカーが自動的に付きます。PUTをコールして行を作成する場合、NEW_LINEをコールして、独自の行端マーカーを追加する必要があります。GET_LINEおよびGET_LINESは、改行文字で終了していない行は戻しません。

- 行が行制限を超えた場合は、エラー・メッセージを受信します。

- PUTまたはPUT_LINEで作成した出力はバッファに入れられます。この出力は、それをバッファに入れたPL/SQLプログラム・ユニットがコール元に戻るまで取り出せません。

例外

表4-9 PUT_LINEプロシージャの例外

例外

説明

ORA-20000、ORU-10027

ENABLEプロシージャ・コールに指定したbuffer_size制限に基づくバッファのオーバーフロー

ORA-20000、ORU-10028

行の長さのオーバーフロー(各行の制限は32767バイト)

5 DBMS_PREPROCESSOR

DBMS_PREPROCESSORパッケージは、後処理された形式でPL/SQLユニットのソース・テキストの出力または取出しを行うためのインタフェースを提供します。

このパッケージの内容は次のおとりです。

- DBMS_PREPROCESSORの使用

- 概要

- 使用上の注意

- データ構造

- 表タイプ

- DBMS_PREPROCESSORサブプログラムの要約

DBMS_PREPROCESSORの使用

- 概要

- 使用上の注意

概要

サブプログラムには3つのスタイルがあります。

1. スキーマ名、ユニット・タイプ名およびユニット名を使用するサブプログラム

2. 任意のPL/SQLのコンパイル・ユニットのソース・テキストを含むVARCHAR2の文字列を使用するサブプログラム

3. 任意のPL/SQLのコンパイル・ユニットのセグメント化されたソース・テキストを含むVARCHAR2連想配列(索引付き表)を使用するサブプログラム

1つ目のスタイルのサブプログラムは、保存されたPL/SQLユニットの後処理済ソース・テキストの出力または取出しのために使用されます。ユーザーは、このユニットの元のソース・テキストを表示するための権限が必要です。また、ユーザーは、ユニットが定義されているスキーマ、ユニット・タイプおよびユニット名を指定する必要もあります。スキーマがNULLの場合は、現行のユーザー・スキーマが使用されます。保存されたユニットのステータスがVALIDで、ユーザーが必要な権限を持っている場合、後処理済のソース・テキストは、最後にコンパイルされたユニットのソース・テキストと同じであることが保証されます。2つ目または3つ目のスタイルのサブプログラムは、現行のユーザー・スキーマで後処理済のソース・テキストを生成するために使用されます。ソース・テキストは、2つ目のスタイルでは単一のVARCHAR2の文字列として、3つ目のスタイルではVARCHAR2連想配列として渡されます。ソース・テキストには、任意のPL/SQLのコンパイル・ユニットを指定できます。通常は、無名ブロックのソース・テキストを渡して、現行のユーザー・スキーマに後処理済のソース・テキストを生成するために使用されます。3つ目のスタイルは、ソース・テキストがVARCHAR2の長さの制限を超える場合に有効です。

使用上の注意

- 1つ目のスタイルのサブプログラムの場合、保存されたPL/SQLユニットのステータスはVALIDである必要はありません。また、VARCHAR2の文字列またはVARCHAR2の連想配列として渡されたソース・テキストは、コンパイル時にエラーが発生する可能性があります。後処理済のソースの生成時にエラーが見つかった場合、後処理済のソース・テキストの最後にエラー・メッセージ・テキストも表示されます。エラーが原因で前処理が中断される場合もあります。この場合、後処理済のソース・テキストが不完全な状態で表示され、関連するエラー・メッセージによって前処理中にエラーが発生したことを確認できます。

- 2つ目または3つ目のスタイルのサブプログラムの場合、ソース・テキストに任意のPL/SQLのコンパイル・ユニットを指定できます。ただし、有効なPL/SQLのコンパイル・ユニットのソース・テキストに、CREATE OR REPLACEなどの一般に使用されている接頭辞を含めることはできません。通常は、ALL_SOURCEビューから取得する場合と同様の方法で、入力ソースの構文を準備する必要があります。次のリストに、PL/SQLのコンパイル・ユニットに有効な初期構文の例を示します。

anonymous block   (BEGIN | DECLARE) ...
package           PACKAGE name ...
package body      PACKAGE BODY name ...
procedure         PROCEDURE name ...
function          FUNCTION name ...

ソース・テキストが有効な名前付きPL/SQLユニットを示す場合、後処理済のソース・テキストの生成後にそのユニットは作成されません。

- ラップされたPL/SQLユニットのテキストがALL_SOURCEビューから取得された場合、通常、キーワードWRAPPEDはユニット名の直後に指定されます。次に例を示します。

PROCEDURE "some proc" WRAPPED
a000000
b2
...

このようなソース・テキストがGET_POST_PROCESSED_SOURCEファンクションまたはPRINT_POST_PROCESSED_SOURCEプロシージャを示す場合は、例外WRAPPED_INPUTが発生します。

データ構造

DBMS_PREPROCESSORパッケージは、表タイプを定義します。

注意:

- PLS_INTEGERデータ・タイプとBINARY_INTEGERデータ・タイプは同じです。このドキュメントでは、リファレンス情報でデータ・タイプ(表タイプ、レコード・タイプ、サブプログラム・パラメータ、サブプログラム戻り値など)を示す場合にBINARY_INTEGERを使用しますが、説明および例ではいずれも使用される場合があります。

- INTEGERデータ・タイプとNUMBER(38)データ・タイプも同じです。このドキュメントでは、全体をとおしてINTEGERを使用します。

表タイプ

SOURCE_LINES_T表タイプ

SOURCE_LINES_T表タイプ

この表タイプは、後処理済のソース・テキストの行を格納します。処理前および処理後の両方で、PL/SQLソース・テキストを保持するために使用されます。テキストの容量が32KBを超える場合に、特に有効です。

構文

TYPE source_lines_t IS
TABLE OF VARCHAR2(32767) INDEX BY BINARY_INTEGER;

DBMS_PREPROCESSORサブプログラムの要約

表5-1 DBMS_PREPROCESSORパッケージのサブプログラム

サブプログラム

説明

GET_POST_PROCESSED_SOURCEファンクション

後処理済のソース・テキストを戻します。

PRINT_POST_PROCESSED_SOURCEプロシージャ

後処理済のソース・テキストを出力します。

GET_POST_PROCESSED_SOURCEファンクション

このオーバーロードされたファンクションは、後処理済のソース・テキストを戻します。複数の機能を構文形式ごとに、定義とともに示します。

構文

保存されたPL/SQLユニットの後処理済のソース・テキストを戻します。

DBMS_PREPROCESSOR.GET_POST_PROCESSED_SOURCE (
object_type    IN VARCHAR2,
schema_name    IN VARCHAR2,
object_name    IN VARCHAR2)
RETURN dbms_preprocessor.source_lines_t;

コンパイル・ユニットの後処理済のソース・テキストを戻します。

DBMS_PREPROCESSOR.GET_POST_PROCESSED_SOURCE (
source        IN VARCHAR2)
RETURN dbms_preprocessor.source_lines_t;

コンパイル・ユニットのソース・テキストを含む連想配列(索引付き表)の後処理済のソース・テキストを戻します。

DBMS_PREPROCESSOR.GET_POST_PROCESSED_SOURCE (
source        IN dbms_preprocessor.source_lines_t)
RETURN dbms_preprocessor.source_lines_t;

パラメータ

表5-2 GET_POST_PROCESSED_SOURCEファンクションのパラメータ

パラメータ

説明

object_type

PACKAGE、PACKAGE BODY、PROCEDUREまたはFUNCTION(大/小文字は区別されます)のいずれか

schema_name

スキーマ名(引用された識別子を使用しないかぎり、大/小文字は区別されません)

NULLの場合は、現行のスキーマが使用されます。

object_name

オブジェクトの名前(引用された識別子を使用しないかぎり、大/小文字は区別されません)

source

コンパイル・ユニットのソース・テキスト

source_lines_t

コンパイル・ユニットのソース・テキストを含む連想配列

ソース・テキストは、すべてのNULLではない連想配列の要素を昇順の索引順序で連結したものです。

戻り値

索引1から開始する後処理済のソース・テキストの行を含む連想配列

使用上の注意

- 改行文字は削除されません。

- 後処理済のソース・テキストの各行は、連想配列の行にマップされます。

- 後処理済のソースでは、未選択のテキストはブランク行となります。

例外

表5-3 GET_POST_PROCESSED_SOURCEファンクションの例外

例外

説明

ORA-24234

権限が不十分であるか、オブジェクトが存在しません

ORA-24235

不正なオブジェクト・タイプ値(PACKAGE、PACKAGE BODY、PROCEDURE、FUNCTIONのいずれでもありません)

ORA-24236

ソース・テキストが空です

ORA-00931

識別子がありません

object_name値はNULLにできません。

ORA-06502

数値または値のエラーが発生しました。

- 文字列バッファが小さすぎます。

- 行が長すぎます(32767バイトを超えている)。

PRINT_POST_PROCESSED_SOURCEプロシージャ

このオーバーロードされたプロシージャは、DBMS_OUTPUT.PUT_LINEをコールして後処理済のソース・テキストを表示できます。複数の機能を構文形式ごとに、定義とともに示します。

構文

保存されたPL/SQLユニットの後処理済のソース・テキストを出力します。

DBMS_PREPROCESSOR.PRINT_POST_PROCESSED_SOURCE (
object_type    IN VARCHAR2,
schema_name    IN VARCHAR2,
object_name    IN VARCHAR2);

コンパイル・ユニットの後処理済のソース・テキストを出力します。

DBMS_PREPROCESSOR.PRINT_POST_PROCESSED_SOURCE (
source        IN VARCHAR2);

コンパイル・ユニットのソース・テキストを含む連想配列の後処理済のソース・テキストを出力します。

DBMS_PREPROCESSOR.PRINT_POST_PROCESSED_SOURCE (
source        IN dbms_preprocessor.source_lines_t);

パラメータ

表5-4 PRINT_POST_PROCESSED_SOURCEプロシージャ・パラメータ

パラメータ

説明

object_type

PACKAGE、PACKAGE BODY、PROCEDUREまたはFUNCTION(大/小文字は区別されます)のいずれか

schema_name

スキーマ名(引用された識別子を使用しないかぎり、大/小文字は区別されません)

NULLの場合は、現行のスキーマが使用されます。

object_name

オブジェクトの名前(引用された識別子を使用しないかぎり、大/小文字は区別されません)

source

コンパイル・ユニットのソース・テキスト

source_lines_t

コンパイル・ユニットのソース・テキストを含む連想配列

ソース・テキストは、すべてのNULLではない連想配列の要素を昇順の索引順序で連結したものです。

使用上の注意

連想配列には、空白が含まれる場合があります。Null要素は、連結時に無視されます。

例外

表5-5 PRINT_POST_PROCESSED_SOURCEプロシージャの例外

例外

説明

ORA-24234

権限が不十分であるか、オブジェクトが存在しません

ORA-24235

不正なオブジェクト・タイプ値(PACKAGE、PACKAGE BODY、PROCEDURE、FUNCTIONのいずれでもありません)

ORA-24236

ソース・テキストが空です

ORA-00931

識別子がありません

object_name値はNULLにできません。

ORA-06502

数値または値のエラーが発生しました。

- 文字列バッファが小さすぎます。

- 行が長すぎます(32767バイトを超えている)。

6 DBMS_RANDOM

DBMS_RANDOMパッケージは、組込み式の乱数ジェネレータを提供します。

この章の内容は次のとおりです。

- DBMS_RANDOMの使用

- 使用上の注意

- DBMS_RANDOMサブプログラムの要約

注意:
DBMS_RANDOMは暗号化に使用するものではありません。

DBMS_RANDOMの使用

- 使用上の注意

使用上の注意

- RANDOMファンクションは、[-2^^31, 2^^31)の範囲の整数を生成します。

- VALUEファンクションは[0,1)の範囲の数を生成し、精度は38桁です。

DBMS_RANDOMは明示的に初期化できますが、乱数ジェネレータをコールする前に初期化する必要はありません。明示的な初期化が行われない場合は、日付、ユーザーIDおよびプロセスIDで自動的に初期化されます。

このパッケージを、同じシードを使用して2回シードしてから同じ方法でアクセスした場合、2回とも同じ結果が生成されます。

テストなどのように、すべての実行で乱数のシーケンスが同じになる必要のある場合があります。その場合は、SEEDのオーバーロードをコールして、ジェネレータを一定の値でシードします。各実行時の出力を変える場合は、単にシードのコールを省略します。これにより、システムによって適切なシードが選択されます。

DBMS_RANDOMサブプログラムの要約

表6-1 DBMS_RANDOMパッケージのサブプログラム

サブプログラム

説明

INITIALIZEプロシージャ

シード値を使用して、パッケージを初期化します。

NORMALファンクション

正規分布の乱数を戻します。

RANDOMファンクション

乱数を生成します。

SEEDプロシージャ

シードをリセットします。

STRINGファンクション

ランダム文字列を取得します。

TERMINATEプロシージャ

パッケージを終了します。

VALUEファンクション

あるバージョンは、0以上1未満で小数点以下38桁(精度38桁)の乱数を取得します。他のバージョンでは、ランダムなOracle Databaseの数値xを取得しますが、このxは指定した下限以上および指定した上限未満です。

注意:
INITIALIZEプロシージャ、RANDOMファンクションおよびTERMINATEプロシージャは非推奨になりました。今回のリリースに含まれているのは、下位互換性を保つという理由にすぎません。

注意:

- PLS_INTEGERデータ・タイプとBINARY_INTEGERデータ・タイプは同じです。このドキュメントでは、リファレンス情報でデータ・タイプ(表タイプ、レコード・タイプ、サブプログラム・パラメータ、サブプログラム戻り値など)を示す場合にBINARY_INTEGERを使用しますが、説明および例ではいずれも使用される場合があります。

- INTEGERデータ・タイプとNUMBER(38)データ・タイプも同じです。このドキュメントでは、全体をとおしてINTEGERを使用します。

INITIALIZEプロシージャ

このプロシージャの使用は推奨されていません。現在はサポートされていますが、使用しないことをお薦めします。これは乱数ジェネレータを初期化します。

構文

DBMS_RANDOM.INITIALIZE (
val  IN  BINARY_INTEGER);

パラメータ

表6-2 INITIALIZEプロシージャのパラメータ

パラメータ

説明

val

乱数の生成に使用するシード番号。

使用上の注意

このプロシージャはSEEDプロシージャのコールのみを行うもので、今後サポートされません。

NORMALファンクション

このファンクションは、標準正規分布の乱数を戻します。

構文

DBMS_RANDOM.NORMAL
RETURN NUMBER;

戻り値

乱数のNUMBER値

RANDOMファンクション

このプロシージャの使用は推奨されていません。現在はサポートされていますが、使用しないことをお薦めします。これは乱数を生成して戻します。

構文

DBMS_RANDOM.RANDOM
RETURN binary_integer;

戻り値

-power(2,31)以上power(2,31)未満のランダムBINARY_INTEGER値

使用上の注意

「NORMALファンクション」および「VALUEファンクション」を参照してください。

SEEDプロシージャ

このプロシージャは、乱数の生成に使用されるシードをリセットします。

構文

DBMS_RANDOM.SEED (
val  IN  BINARY_INTEGER);

DBMS_RANDOM.SEED (
val  IN  VARCHAR2);

パラメータ

表6-3 SEEDプロシージャのパラメータ

パラメータ

説明

val

乱数の生成に使用するシード番号または文字列。

使用上の注意

シードには2000までの長さの文字列を使用できます。

STRINGファンクション

このファンクションは、ランダムな文字列を生成して戻します。

構文

DBMS_RANDOM.STRING
opt  IN  CHAR,
len  IN  NUMBER)
RETURN VARCHAR2;

パラメータ

表6-4 STRINGファンクションのパラメータ

パラメータ

説明

opt

戻される文字列の表示方法の指定

- 'u'、'U' - 大文字のアルファベット文字で文字列を戻します。

- 'l'、'L' - 小文字のアルファベット文字で文字列を戻します。

- 'a'、'A' - 大/小文字が混在したアルファベット文字で文字列を戻します。

- 'x'、'X' - 大文字のアルファベット文字と数字で文字列を戻します。

- 'p'、'P' - 印刷可能な任意の文字で文字列を戻します。

これ以外の場合、戻される文字列は大文字のアルファベット文字になります。

len

戻される文字列の長さ

戻り値

ランダムな文字列を持つVARCHAR2値

TERMINATEプロシージャ

このプロシージャの使用は推奨されていません。現在はサポートされていますが、使用しないことをお薦めします。これは、ユーザーがパッケージを終了するとコールされます。

構文

DBMS_RANDOM.TERMINATE;

VALUEファンクション

あるバージョンは、0以上1未満で小数点以下38桁(精度38桁)の乱数を戻します。他のバージョンでは、ランダムなOracle DatabaseのNUMBER値xを戻しますが、このxは指定したlow値以上および指定したhigh値未満です。

構文

DBMS_RANDOM.VALUE
RETURN NUMBER;

DBMS_RANDOM.VALUE(
low  IN  NUMBER,
high IN  NUMBER)
RETURN NUMBER;

パラメータ

表6-5 VALUEファンクション・パラメータ

パラメータ

説明

low

乱数を生成する範囲の下限

high

乱数を生成する範囲の上限

戻り値

生成された乱数であるNUMBER値

7 DBMS_SQL

DBMS_SQLパッケージでは、動的SQLを使用してデータ操作言語(DML)またはデータ定義言語(DDL)文を実行したり、PL/SQL無名ブロックを実行したり、PL/SQLストアド・プロシージャおよびファンクションをコールするためのインタフェースを提供します。たとえば、DBMS_SQLパッケージが提供するPARSEプロシージャを使用することによって、ストアド・プロシージャ内からDROP TABLE文を入力できます。

この章の内容は次のとおりです。

- DBMS_SQLの使用

- 概要

- セキュリティ・モデル

- 定数

- 使用上の注意

- 例外

- 例

- データ構造

- レコード・タイプ

- 表タイプ

- DBMS_SQLサブプログラムの要約

注意:
ネイティブ動的SQLの詳細は、『Oracle TimesTen In-Memory Database PL/SQL開発者ガイド』のPL/SQLでの動的SQL (EXECUTE IMMEDIATE文)に関する説明を参照してください。『Oracle Database PL/SQL言語リファレンス』のEXECUTE IMMEDIATE文に関する説明も参照してください。

DBMS_SQLの使用

- 概要

- セキュリティ・モデル

- 定数

- 例外

- 使用上の注意

- 例

概要

TimesTenを使用すると、動的SQLを使用するストアド・プロシージャおよび無名PL/SQLブロックを記述できます。動的SQL文は、ユーザーのソース・プログラムに埋め込まれておらず、実行時にプログラムに入力されるか、またはプログラムによって作成されるように、文字列で格納されています。この機能によって、より汎用的なプロシージャを作成できます。たとえば、この動的SQLによって、実行時まで名前がわからない表で動作するプロシージャを作成できます。

ネイティブ動的SQL(EXECUTE IMMEDIATE)はDBMS_SQLに代わるものであり、動的SQL文、PL/SQLブロックおよびPL/SQLプロシージャおよびファンクション・コールをPL/SQLブロックに直接設定できます。ほとんどの場合、ネイティブ動的SQLは、DBMS_SQLと比べると簡単に使用でき、より高パフォーマンスです。ただし、ネイティブ動的SQL自体に、メソッド4(不明数の入力または出力を含む動的SQL文)はサポートされないなどの制限があります。また、一部のタスクはDBMS_SQLでのみ実行できます。

ストアド・プロシージャ内から動的SQLを使用する機能は一般的に、Oracle Call Interface(OCI)の手順に従っています。OCIについては、『Oracle Call Interfaceプログラマーズ・ガイド』を参照してください。

PL/SQLは、Cなどの他の一般的なプログラム言語とは、多少異なります。たとえば、ユーザーはアドレス(ポインタとも呼ばれます)をPL/SQLで参照できません。そのため、OCIとDBMS_SQLパッケージの間には、次のようないくつかの相違点があります。

- OCIはアドレスでバインドし、DBMS_SQLパッケージは値でバインドします。

- DBMS_SQLでは、VARIABLE_VALUEをコールして無名ブロックに対するOUTパラメータの値を取り出す必要があり、行内の列の値を実際にプログラムに取り出すには、行のフェッチ後にCOLUMN_VALUEをコールする必要があります。

- 現行のリリースのDBMS_SQLパッケージは、CANCELカーソル・プロシージャを提供していません。

- NULLはPL/SQL変数の値として完全にサポートされているため、インジケータ変数は不要です。

セキュリティ・モデル

DBMS_SQLはSYSによって所有されており、AUTHID CURRENT_USERでコンパイルされています。無名PL/SQLブロックからコールされるDBMS_SQLサブプログラムは、現行ユーザーの権限を使用して実行されます。

AUTHID句については、『Oracle TimesTen In-Memory Database PL/SQL開発者ガイド』の定義者の権限と実行者の権限に関する説明を参照してください。

定数

表7-1に示す定数は、PARSEプロシージャのlanguage_flagパラメータとともに使用します。TimesTenの場合は、NATIVEを使用します。

表7-1 DBMS_SQLの定数

名前

タイプ

値

説明

V6

INTEGER

0

Oracle Databaseバージョン6の動作を指定します(TimesTenには適用されません)。

NATIVE

INTEGER

1

プログラムの接続先のデータベースに関する通常の動作を指定します。

V7

INTEGER

2

Oracle Databaseバージョン7の動作を指定します(TimesTenには適用されません)。

使用上の注意

- 実行フロー

- 問合せの処理

- 更新、挿入および削除の処理

- エラーの位置

実行フロー

1. OPEN_CURSOR

2. PARSE

3. BIND_VARIABLEまたはBIND_ARRAY

4. DEFINE_COLUMNまたはDEFINE_ARRAY

5. EXECUTE

6. FETCH_ROWSまたはEXECUTE_AND_FETCH

7. VARIABLE_VALUEまたはCOLUMN_VALUE

8. CLOSE_CURSOR

OPEN_CURSOR

SQL文を処理するためには、オープン・カーソルが必要です。OPEN_CURSORファンクションをコールすると、ユーザーはTimesTenが保持している有効なカーソルを示すデータ構造のカーソルID番号を受け取ります。これらのカーソルは、プリコンパイラ、OCIまたはPL/SQLレベルで定義されたカーソルとは異なり、DBMS_SQLパッケージでのみ使用されます。

PARSE

SQL文はすべて、PARSEプロシージャをコールして解析する必要があります。文を解析することによって、その文の構文がチェックされ、プログラム内のカーソルに関連付けられます。

DML文またはDDL文はすべて解析できます。DDL文は解析時に実行され、暗黙のコミットを実行します。

注意:
DDL文を解析してプロシージャまたはパッケージを削除する場合、問題のプロシージャまたは問題のパッケージ内のプロシージャをまだ使用していると、タイムアウトが発生する可能性があります。プロシージャをコールすると、実行がユーザー側に戻るまで、そのプロシージャは使用中であるとみなされます。このようなタイムアウトは、即座に発生します。

図7-1に、DBMS_SQLの実行フローを示します。

図7-1 DBMS_SQL実行フロー

BIND_VARIABLEまたはBIND_ARRAY

多くのDML文では、ユーザーのプログラム内のデータをTimesTenに入力する必要があります。実行時に提供する入力データを含んでいるSQL文を定義する場合は、SQL文内のプレースホルダを使用して、データの提供場所にマークを付ける必要があります。

SQL文内の各プレースホルダに対してバインド・プロシージャ(BIND_ARRAYプロシージャまたはBIND_VARIABLEプロシージャ)の1つをコールして、プログラム内の変数の値(または配列の値)をプレースホルダに提供する必要があります。SQL文が引き続き実行されると、TimesTenは、ユーザーのプログラムが入力変数と出力変数、またはバインド変数に設定したデータを使用します。

DBMS_SQLは、その都度異なるバインド変数を使用してDML文を繰り返し実行できます。BIND_ARRAYプロシージャを使用すると、スカラーのコレクションをバインドでき、それぞれの値はEXECUTEごとに1回だけ入力変数として使用されます。これは、OCIがサポートする配列インタフェースに類似しています。

注意:
TimesTen開発者ガイドで使用される「バインド・パラメータ」という用語(ODBC用語に準拠)は、TimesTenのPL/SQLのマニュアルで使用される「バインド変数」という用語(Oracle Database PL/SQL用語に準拠)と同じです。

DEFINE_COLUMNまたはDEFINE_ARRAY

SELECT文内で選択されている行の列は、選択リスト内での相対位置(左から右)によって識別されます。問合せの場合は、定義プロシージャ(DEFINE_COLUMNまたはDEFINE_ARRAY)をコールしてSELECT値を受け入れる変数を指定する必要があり、その方法はINTO句が静的問合せに対して行う場合とほとんど同じです。

DEFINE_ARRAYプロシージャを使用して、単一のSELECT文で行がフェッチされるPL/SQLコレクションを定義できます。DEFINE_ARRAYは、1回のフェッチで複数行をフェッチするインタフェースを提供します。行をフェッチするためにCOLUMN_VALUEプロシージャを使用する前に、DEFINE_ARRAYをコールする必要があります。

EXECUTE

EXECUTEファンクションをコールして、SQL文を実行します。

FETCH_ROWSまたはEXECUTE_AND_FETCH

FETCH_ROWSファンクションは、問合せを満たす行を取得します。フェッチで行を取得できなくなるまで、フェッチを連続実行して別の行を取得します。1回のみの実行に対してEXECUTEをコールしている場合は、EXECUTEの次にFETCH_ROWSをコールするより、EXECUTE_AND_FETCHをコールする方が効率的です。

VARIABLE_VALUEまたはCOLUMN_VALUE

問合せの場合は、COLUMN_VALUEをコールして、FETCH_ROWSコールによって取得する列の値を判別します。RETURNING句によるPL/SQLプロシージャまたはDML文へのコールを含んだ無名ブロックの場合は、VARIABLE_VALUEをコールして、文の実行時に出力変数に割り当てられた値を取得します。

CLOSE_CURSOR

セッションでカーソルが不要な場合は、CLOSE_CURSORをコールしてカーソルをクローズします。

カーソルをクローズしないと、カーソルが不要になっても、そのカーソルが使用しているメモリーは割り当てられたままになります。

問合せの処理

動的SQLを使用して問合せを処理する場合は、次のステップを実行する必要があります。

1. DEFINE_COLUMNプロシージャまたはDEFINE_ARRAYプロシージャをコールして、SELECT文が戻す値を受け入れる変数を指定します。

2. EXECUTEファンクションをコールして、SELECT文を実行します。

3. FETCH_ROWSファンクション(またはEXECUTE_AND_FETCH)をコールして、問合せに一致した行を取得します。

4. COLUMN_VALUEプロシージャをコールして、問合せに関してFETCH_ROWSが取得した列の値を判別します。PL/SQLプロシージャへのコールを含んだ無名ブロックを使用した場合は、VARIABLE_VALUEプロシージャをコールして、これらのプロシージャの出力変数に割り当てられた値を取得します。

更新、挿入および削除の処理

動的SQLを使用してINSERT、UPDATEまたはDELETEを処理する場合は、次のステップを実行する必要があります。

1. 最初に、EXECUTEファンクションをコールして、INSERT文、UPDATE文またはDELETE文を実行します。

2. 文にRETURNING句がある場合は、VARIABLE_VALUEプロシージャをコールして出力変数に割り当てられた値を取得します。

エラーの位置

DBMS_SQLパッケージには、セッションで最後に参照されたカーソルの情報を取得するための追加ファンクションがいくつかあります。これらのファンクションが戻す値は、SQL文の実行直後にのみ意味を持ちます。また、エラーを検出するファンクションは、特定のDBMS_SQLコール後にのみ意味を持ちます。たとえば、PARSEコールの直後にLAST_ERROR_POSITIONファンクションをコールします。

例外

次の表に、DBMS_SQLで発生する例外を示します。

表7-2 DBMS_SQLで発生する例外

例外

エラー・コード

説明

INCONSISTENT_TYPE

-6562

指定したOUTパラメータ(要求した値を出力するパラメータ)のタイプがその値のタイプと異なる場合、COLUMN_VALUEプロシージャまたはVARIABLE_VALUEプロシージャによって生成されます。

例

この項には、DBMS_SQLパッケージを使用するプロシージャの例が記述されています。

例1: 基本概念

この文のテキストはコンパイル時に判明しているため、この例では、動的SQLを使用する必要はありませんが、パッケージの基礎となる基本概念を示しています。

demoプロシージャでは、(HRスキーマのemployees表から作成した)表myemployeesから、給与が指定の値を超えているすべての従業員が削除されます。

CREATE OR REPLACE PROCEDURE demo(p_salary IN NUMBER) AS
cursor_name INTEGER;
rows_processed INTEGER;

BEGIN
cursor_name := dbms_sql.open_cursor;
DBMS_SQL.PARSE(cursor_name, 'DELETE FROM myemployees WHERE salary > :x',
DBMS_SQL.NATIVE);
DBMS_SQL.BIND_VARIABLE(cursor_name, ':x', p_salary);
rows_processed := DBMS_SQL.EXECUTE(cursor_name);
DBMS_SQL.CLOSE_CURSOR(cursor_name);
EXCEPTION
WHEN OTHERS THEN
DBMS_SQL.CLOSE_CURSOR(cursor_name);
END;

myemployees表を作成し、給与が$15,000以上の従業員の数を確認します。

Command> create table myemployees as select * from employees;
107 rows inserted.

Command> select * from myemployees where salary>=15000;
< 100, Steven, King, SKING, 515.123.4567, 1987-06-17 00:00:00, AD_PRES, 24000,
<NULL>, <NULL>, 90 >
< 101, Neena, Kochhar, NKOCHHAR, 515.123.4568, 1989-09-21 00:00:00, AD_VP, 17000,
<NULL>, 100, 90 >
< 102, Lex, De Haan, LDEHAAN, 515.123.4569, 1993-01-13 00:00:00, AD_VP, 17000,
<NULL>, 100, 90 >
3 rows found.

次に示すように、demoを実行して給与が$14,999を超える従業員をすべて削除し、結果を確認します。

Command> begin
> demo(14999);
> end;
> /

PL/SQL procedure successfully completed.

Command> select * from myemployees where salary>=15000;
0 rows found.

例2: 表間でのコピー

次のプロシージャの例は、コピー元表とコピー先表の名前が渡され、コピー元表からコピー先表に行をコピーします。このプロシージャの例は、コピー元表とコピー先表にはいずれも次の列があることを前提としています。

id        of type NUMBER
name      of type VARCHAR2(30)
birthdate of type DATE

このプロシージャでは、動的SQLを使用する必要は特にありませんが、ここでは、このパッケージの概念をわかりやすく説明しています。

CREATE OR REPLACE PROCEDURE copy (
source      IN VARCHAR2,
destination IN VARCHAR2) IS
id_var             NUMBER;
name_var           VARCHAR2(30);
birthdate_var      DATE;
source_cursor      INTEGER;
destination_cursor INTEGER;
ignore             INTEGER;
BEGIN

-- Prepare a cursor to select from the source table:
source_cursor := dbms_sql.open_cursor;
DBMS_SQL.PARSE(source_cursor,
'SELECT id, name, birthdate FROM ' || source,
DBMS_SQL.NATIVE);
DBMS_SQL.DEFINE_COLUMN(source_cursor, 1, id_var);
DBMS_SQL.DEFINE_COLUMN(source_cursor, 2, name_var, 30);
DBMS_SQL.DEFINE_COLUMN(source_cursor, 3, birthdate_var);
ignore := DBMS_SQL.EXECUTE(source_cursor);

-- Prepare a cursor to insert into the destination table:
destination_cursor := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(destination_cursor,
'INSERT INTO ' || destination ||
' VALUES (:id_bind, :name_bind, :birthdate_bind)',
DBMS_SQL.NATIVE);

-- Fetch a row from the source table and insert it into the destination table:
LOOP
IF DBMS_SQL.FETCH_ROWS(source_cursor)>0 THEN
-- get column values of the row
DBMS_SQL.COLUMN_VALUE(source_cursor, 1, id_var);
DBMS_SQL.COLUMN_VALUE(source_cursor, 2, name_var);
DBMS_SQL.COLUMN_VALUE(source_cursor, 3, birthdate_var);

-- Bind the row into the cursor that inserts into the destination table. You
-- could alter this example to require the use of dynamic SQL by inserting an
-- if condition before the bind.
DBMS_SQL.BIND_VARIABLE(destination_cursor, ':id_bind', id_var);
DBMS_SQL.BIND_VARIABLE(destination_cursor, ':name_bind', name_var);
DBMS_SQL.BIND_VARIABLE(destination_cursor, ':birthdate_bind',
birthdate_var);
ignore := DBMS_SQL.EXECUTE(destination_cursor);
ELSE

-- No more rows to copy:
EXIT;
END IF;
END LOOP;

-- Commit (in TimesTen commit closes cursors automatically):
COMMIT;

EXCEPTION
WHEN OTHERS THEN
IF DBMS_SQL.IS_OPEN(source_cursor) THEN
DBMS_SQL.CLOSE_CURSOR(source_cursor);
END IF;
IF DBMS_SQL.IS_OPEN(destination_cursor) THEN
DBMS_SQL.CLOSE_CURSOR(destination_cursor);
END IF;
RAISE;
END;

例3、4および5: Bulk DML

次の一連の例では、INSERT、UPDATEおよびDELETEの各SQL DML文でのバルク配列バインド(表項目)の使用方法を示します。

次に、HRスキーマのdepartments表に新しい従業員3人を追加するバルクINSERT文の例を示します。

DECLARE
stmt VARCHAR2(200);
departid_array     DBMS_SQL.NUMBER_TABLE;
deptname_array     DBMS_SQL.VARCHAR2_TABLE;
mgrid_array        DBMS_SQL.NUMBER_TABLE;
locid_array        DBMS_SQL.NUMBER_TABLE;
c                NUMBER;
dummy            NUMBER;
BEGIN
departid_array(1):= 280;
departid_array(2):= 290;
departid_array(3):= 300;

deptname_array(1) := 'Community Outreach';
deptname_array(2) := 'Product Management';
deptname_array(3) := 'Acquisitions';

mgrid_array(1) := 121;
mgrid_array(2) := 120;
mgrid_array(3) := 70;

locid_array(1):= 1500;
locid_array(2):= 1700;
locid_array(3):= 2700;

stmt := 'INSERT INTO departments VALUES(
:departid_array, :deptname_array, :mgrid_array, :locid_array)';
c := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(c, stmt, DBMS_SQL.NATIVE);
DBMS_SQL.BIND_ARRAY(c, ':departid_array', departid_array);
DBMS_SQL.BIND_ARRAY(c, ':deptname_array', deptname_array);
DBMS_SQL.BIND_ARRAY(c, ':mgrid_array', mgrid_array);
DBMS_SQL.BIND_ARRAY(c, ':locid_array', locid_array);
dummy := DBMS_SQL.EXECUTE(c);
DBMS_SQL.CLOSE_CURSOR(c);
EXCEPTION WHEN OTHERS THEN
IF DBMS_SQL.IS_OPEN(c) THEN
DBMS_SQL.CLOSE_CURSOR(c);
END IF;
RAISE;
END;

次に、新しい行が表示されている、SELECT文からの出力を示します。

Command> select * from departments;
< 10, Administration, 200, 1700 >
...
< 280, Community Outreach, 121, 1500 >
< 290, Product Management, 120, 1700 >
< 300, Acquisitions, 70, 2700 >
30 rows found.

次に、HRスキーマのemployees表内の4人の既存従業員の給与を更新するバルクUPDATE文の例を示します。

DECLARE
stmt VARCHAR2(200);
empno_array     DBMS_SQL.NUMBER_TABLE;
salary_array    DBMS_SQL.NUMBER_TABLE;
c               NUMBER;
dummy           NUMBER;

BEGIN
empno_array(1):= 203;
empno_array(2):= 204;
empno_array(3):= 205;
empno_array(4):= 206;

salary_array(1) := 7000;
salary_array(2) := 11000;
salary_array(3) := 13000;
salary_array(4) := 9000;

stmt := 'update employees set salary = :salary_array
WHERE employee_id = :num_array';
c := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(c, stmt, DBMS_SQL.NATIVE);
DBMS_SQL.BIND_ARRAY(c, ':num_array', empno_array);
DBMS_SQL.BIND_ARRAY(c, ':salary_array', salary_array);
dummy := DBMS_SQL.EXECUTE(c);
DBMS_SQL.CLOSE_CURSOR(c);

EXCEPTION WHEN OTHERS THEN
IF DBMS_SQL.IS_OPEN(c) THEN
DBMS_SQL.CLOSE_CURSOR(c);
END IF;
RAISE;
END;

例を実行する前の指定の従業員のエントリは次のように仮定され、給与は$6500、$10000、$12000および$8300であると表示されています。

Command> select * from employees where employee_id>=203 and employee_id<=206;
< 203, Susan, Mavris, SMAVRIS, 515.123.7777, 1994-06-07 00:00:00, HR_REP,
6500, <NULL>, 101, 40 >
< 204, Hermann, Baer, HBAER, 515.123.8888, 1994-06-07 00:00:00, PR_REP,
10000, <NULL>, 101, 70 >
< 205, Shelley, Higgins, SHIGGINS, 515.123.8080, 1994-06-07 00:00:00, AC_MGR,
12000, <NULL>, 101, 110 >
< 206, William, Gietz, WGIETZ, 515.123.8181, 1994-06-07 00:00:00, AC_ACCOUNT,
8300, <NULL>, 205, 110 >
4 rows found.

次に、例を実行した後の新しい給与が表示されています。

Command> select * from employees where employee_id>=203 and employee_id<=206;
< 203, Susan, Mavris, SMAVRIS, 515.123.7777, 1994-06-07 00:00:00, HR_REP,
7000, <NULL>, 101, 40 >
< 204, Hermann, Baer, HBAER, 515.123.8888, 1994-06-07 00:00:00, PR_REP,
11000, <NULL>, 101, 70 >
< 205, Shelley, Higgins, SHIGGINS, 515.123.8080, 1994-06-07 00:00:00, AC_MGR,
13000, <NULL>, 101, 110 >
< 206, William, Gietz, WGIETZ, 515.123.8181, 1994-06-07 00:00:00, AC_ACCOUNT,
9000, <NULL>, 205, 110 >
4 rows found.

たとえば、DELETE文では、次のようにWHERE句に配列をバインドし、配列内の要素ごとに文を実行できます。

DECLARE
stmt VARCHAR2(200);
dept_no_array DBMS_SQL.NUMBER_TABLE;
c NUMBER;
dummy NUMBER;
BEGIN
dept_no_array(1) := 60;
dept_no_array(2) := 70;
stmt := 'delete from employees where department_id = :dept_array';
c := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(c, stmt, DBMS_SQL.NATIVE);
DBMS_SQL.BIND_ARRAY(c, ':dept_array', dept_no_array, 1, 1);
dummy := DBMS_SQL.EXECUTE(c);
DBMS_SQL.CLOSE_CURSOR(c);

EXCEPTION WHEN OTHERS THEN
IF DBMS_SQL.IS_OPEN(c) THEN
DBMS_SQL.CLOSE_CURSOR(c);
END IF;
RAISE;
END;

この例では、(配列要素の上限と下限が両方とも1に設定される)BIND_ARRAYコールによって配列の最初の要素のみが指定され、部門60の従業員のみが削除されます。

例を実行する前、部門60と70には、それぞれ5人と1人の従業員がいます(部門番号は各行の最後のエントリです)。

Command> select * from employees where department_id>=60 and department_id<=70;
< 103, Alexander, Hunold, AHUNOLD, 590.423.4567, 1990-01-03 00:00:00, IT_PROG,
9000, <NULL>, 102, 60 >
< 104, Bruce, Ernst, BERNST, 590.423.4568, 1991-05-21 00:00:00, IT_PROG, 6000,
<NULL>, 103, 60 >
< 105, David, Austin, DAUSTIN, 590.423.4569, 1997-06-25 00:00:00, IT_PROG, 4800,
<NULL>, 103, 60 >
< 106, Valli, Pataballa, VPATABAL, 590.423.4560, 1998-02-05 00:00:00, IT_PROG,
4800, <NULL>, 103, 60 >
< 107, Diana, Lorentz, DLORENTZ, 590.423.5567, 1999-02-07 00:00:00, IT_PROG,
4200, <NULL>, 103, 60 >
< 204, Hermann, Baer, HBAER, 515.123.8888, 1994-06-07 00:00:00, PR_REP, 10000,
<NULL>, 101, 70 >
6 rows found.

例を実行すると、部門70の従業員のみが残ります。

Command> select * from employees where department_id>=60 and department_id<=70;
< 204, Hermann, Baer, HBAER, 515.123.8888, 1994-06-07 00:00:00, PR_REP, 10000,
<NULL>, 101, 70 >
1 row found.

例6: 配列の定義

この例では配列を定義します。

CREATE OR REPLACE PROCEDURE BULK_PLSQL(deptid NUMBER) IS
names    DBMS_SQL.VARCHAR2_TABLE;
sals     DBMS_SQL.NUMBER_TABLE;
c        NUMBER;
r        NUMBER;
sql_stmt VARCHAR2(32767) :=
'SELECT last_name, salary FROM employees WHERE department_id = :b1';

BEGIN
c := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(c, sql_stmt, dbms_sql.native);
DBMS_SQL.BIND_VARIABLE(c, 'b1', deptid);
DBMS_SQL.DEFINE_ARRAY(c, 1, names, 5, 1);
DBMS_SQL.DEFINE_ARRAY(c, 2, sals, 5, 1);

r := DBMS_SQL.EXECUTE(c);

LOOP
r := DBMS_SQL.FETCH_ROWS(c);
DBMS_SQL.COLUMN_VALUE(c, 1, names);
DBMS_SQL.COLUMN_VALUE(c, 2, sals);
EXIT WHEN r != 5;
END LOOP;

DBMS_SQL.CLOSE_CURSOR(c);

-- loop through the names and sals collections
FOR i IN names.FIRST .. names.LAST  LOOP
DBMS_OUTPUT.PUT_LINE('Name = ' || names(i) || ', salary = ' || sals(i));
END LOOP;
END;

たとえば、employees表の部門20の場合は、次の出力が生成されます。

Command> begin
> bulk_plsql(20);
> end;
> /
Name = Hartstein, salary = 13000
Name = Fay, salary = 6000

PL/SQL procedure successfully completed.

例7: 列の定義の表示

これは、定義が記述されている表に対してSELECT *問合せを使用することで、ttIsql DESCRIBEコマンドの代替として使用できます。この例では、employees表の列を説明しています。

DECLARE
c           NUMBER;
d           NUMBER;
col_cnt     INTEGER;
f           BOOLEAN;
rec_tab     DBMS_SQL.DESC_TAB;
col_num    NUMBER;
PROCEDURE print_rec(rec in DBMS_SQL.DESC_REC) IS
BEGIN
DBMS_OUTPUT.NEW_LINE;
DBMS_OUTPUT.PUT_LINE('col_type            =    '
|| rec.col_type);
DBMS_OUTPUT.PUT_LINE('col_maxlen          =    '
|| rec.col_max_len);
DBMS_OUTPUT.PUT_LINE('col_name            =    '
|| rec.col_name);
DBMS_OUTPUT.PUT_LINE('col_name_len        =    '
|| rec.col_name_len);
DBMS_OUTPUT.PUT_LINE('col_schema_name     =    '
|| rec.col_schema_name);
DBMS_OUTPUT.PUT_LINE('col_schema_name_len =    '
|| rec.col_schema_name_len);
DBMS_OUTPUT.PUT_LINE('col_precision       =    '
|| rec.col_precision);
DBMS_OUTPUT.PUT_LINE('col_scale           =    '
|| rec.col_scale);
DBMS_OUTPUT.PUT('col_null_ok         =    ');
IF (rec.col_null_ok) THEN
DBMS_OUTPUT.PUT_LINE('true');
ELSE
DBMS_OUTPUT.PUT_LINE('false');
END IF;
END;
BEGIN
c := DBMS_SQL.OPEN_CURSOR;

DBMS_SQL.PARSE(c, 'SELECT * FROM employees', DBMS_SQL.NATIVE);

d := DBMS_SQL.EXECUTE(c);

DBMS_SQL.DESCRIBE_COLUMNS(c, col_cnt, rec_tab);

/*
* Following loop could simply be for j in 1..col_cnt loop.
* Here we are simply illustrating some PL/SQL table
* features.
*/
col_num := rec_tab.first;
IF (col_num IS NOT NULL) THEN
LOOP
print_rec(rec_tab(col_num));
col_num := rec_tab.next(col_num);
EXIT WHEN (col_num IS NULL);
END LOOP;
END IF;

DBMS_SQL.CLOSE_CURSOR(c);
END;

次に、employees表の列の定義を示す簡略化した簡単な出力サンプルを示しますが、HRスキーマから実行されたことを前提にしています。ここでは、最初の2列からの情報のみが示されています。

col_type            =    2
col_maxlen          =    7
col_name            =    EMPLOYEE_ID
col_name_len        =    11
col_schema_name     =    HR
col_schema_name_len =    8
col_precision       =    6
col_scale           =    0
col_null_ok         =    false
col_type            =    1
col_maxlen          =    20
col_name            =    FIRST_NAME
col_name_len        =    10
col_schema_name     =    HR
col_schema_name_len =    8
col_precision       =    0
col_scale           =    0
col_null_ok         =    true
...

例8: RETURNING句

この句を使用すると、INSERT、UPDATEおよびDELETE文は式の値を戻すことができます。この値は、バインド変数に戻されます。

単一行を挿入、更新または削除する場合は、BIND_VARIABLEを使用して、これらのアウトバインドをバインドします。複数行を挿入、更新または削除する場合は、BIND_ARRAYを使用します。これらのバインド変数の値を取得するには、VARIABLE_VALUEをコールする必要があります。

注意:
これは、DBMS_SQL内でアウトバインドを使用したPL/SQLブロックを実行した後で、VARIABLE_VALUEをコールする必要があることと同様です。

次の例は、表tabが作成されていることを前提にしています。

Command> create table tab (c1 number, c2 number);

i) これは単一行の挿入を示します。

CREATE OR REPLACE PROCEDURE single_Row_insert
(c1 NUMBER, c2 NUMBER, r OUT NUMBER) is
c NUMBER;
n NUMBER;
BEGIN
c := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(c, 'INSERT INTO tab VALUES (:bnd1, :bnd2) ' ||
'RETURNING c1*c2 INTO :bnd3', DBMS_SQL.NATIVE);
DBMS_SQL.BIND_VARIABLE(c, 'bnd1', c1);
DBMS_SQL.BIND_VARIABLE(c, 'bnd2', c2);
DBMS_SQL.BIND_VARIABLE(c, 'bnd3', r);
n := DBMS_SQL.EXECUTE(c);
DBMS_SQL.VARIABLE_VALUE(c, 'bnd3', r); -- get value of outbind variable
DBMS_SQL.CLOSE_CURSOR(c);
END;

次は、この例を実行し、その結果を示しています。最初、表は空でした。

Command> declare r NUMBER;
> begin
> single_Row_insert(100,200,r);
> dbms_output.put_line('Product = ' || r);
> end;
> /
Product = 20000

PL/SQL procedure successfully completed.

Command> select * from tab;
< 100, 200 >
1 row found.

ii) これは単一行の更新を示します。rownumは、行番号の内部変数であることに注意してください。

CREATE OR REPLACE PROCEDURE single_Row_update
(c1 NUMBER, c2 NUMBER, r out NUMBER) IS
c NUMBER;
n NUMBER;

BEGIN
c := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(c, 'UPDATE tab SET c1 = :bnd1, c2 = :bnd2 ' ||
'WHERE rownum = 1 ' ||
'RETURNING c1*c2 INTO :bnd3', DBMS_SQL.NATIVE);
DBMS_SQL.BIND_VARIABLE(c, 'bnd1', c1);
DBMS_SQL.BIND_VARIABLE(c, 'bnd2', c2);
DBMS_SQL.BIND_VARIABLE(c, 'bnd3', r);
n := DBMS_SQL.EXECUTE(c);
DBMS_SQL.VARIABLE_VALUE(c, 'bnd3', r);-- get value of outbind variable
DBMS_SQL.CLOSE_CURSOR(c);
END;

次は、この例を実行し、前の例で挿入された行を更新した結果を示しています。

Command> declare r NUMBER;
> begin
> single_Row_update(200,300,r);
> dbms_output.put_line('Product = ' || r);
> end;
> /
Product = 60000

PL/SQL procedure successfully completed.

Command> select * from tab;
< 200, 300 >
1 row found.

iii) これは複数行の挿入を示します。

CREATE OR REPLACE PROCEDURE multi_Row_insert
(c1 DBMS_SQL.NUMBER_TABLE, c2 DBMS_SQL.NUMBER_TABLE,
r OUT DBMS_SQL.NUMBER_TABLE) is
c NUMBER;
n NUMBER;

BEGIN
c := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(c, 'insert into tab VALUES (:bnd1, :bnd2) ' ||
'RETURNING c1*c2 INTO :bnd3', DBMS_SQL.NATIVE);
DBMS_SQL.BIND_ARRAY(c, 'bnd1', c1);
DBMS_SQL.BIND_ARRAY(c, 'bnd2', c2);
DBMS_SQL.BIND_ARRAY(c, 'bnd3', r);
n := DBMS_SQL.EXECUTE(c);
DBMS_SQL.VARIABLE_VALUE(c, 'bnd3', r);-- get value of outbind variable
DBMS_SQL.CLOSE_CURSOR(c);
END;

次のスクリプトを使用すると、ttIsqlでこの例を実行できます。

declare
c1_array dbms_sql.number_table;
c2_array dbms_sql.number_table;
r_array dbms_sql.number_table;
begin
c1_array(1) := 10;
c1_array(2) := 20;
c1_array(3) := 30;
c2_array(1) := 15;
c2_array(2) := 25;
c2_array(3) := 35;
multi_Row_insert(c1_array,c2_array,r_array);
dbms_output.put_line('Product for row1 = ' || r_array(1));
dbms_output.put_line('Product for row2 = ' || r_array(2));
dbms_output.put_line('Product for row3 = ' || r_array(3));
end;
/

結果を次に示します。最初、表は空でした。

Product for row1 = 150
Product for row2 = 500
Product for row3 = 1050

PL/SQL procedure successfully completed.

Command> select * from tab;
< 10, 15 >
< 20, 25 >
< 30, 35 >
3 rows found.

iv) これは複数行の更新を示します。

CREATE OR REPLACE PROCEDURE multi_Row_update
(c1 NUMBER, c2 NUMBER, r OUT DBMS_SQL.NUMBER_TABLE) IS
c NUMBER;
n NUMBER;

BEGIN
c := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(c, 'UPDATE tab SET c1 = :bnd1 WHERE c2 > :bnd2 ' ||
'RETURNING c1*c2 INTO :bnd3', DBMS_SQL.NATIVE);
DBMS_SQL.BIND_VARIABLE(c, 'bnd1', c1);
DBMS_SQL.BIND_VARIABLE(c, 'bnd2', c2);
DBMS_SQL.BIND_ARRAY(c, 'bnd3', r);
n := DBMS_SQL.EXECUTE(c);
DBMS_OUTPUT.PUT_LINE(n || ' rows updated');
DBMS_SQL.VARIABLE_VALUE(c, 'bnd3', r);-- get value of outbind variable
DBMS_SQL.CLOSE_CURSOR(c);
END;

注意:
bnd1とbnd2は、同様に配列にできることに注意してください。更新されたすべての行に対する式の値は、bnd3に入れられます。bnd1とbnd2の各値について、どの行が更新されたかを区別する方法はありません。

次のスクリプトを使用すると、ttIsqlでこの例を実行できます。

declare
c1 NUMBER;
c2 NUMBER;
r_array dbms_sql.number_table;
begin
c1 := 100;
c2 := 0;
multi_Row_update(c1, c2, r_array);
dbms_output.put_line('Product for row1 = ' || r_array(1));
dbms_output.put_line('Product for row2 = ' || r_array(2));
dbms_output.put_line('Product for row3 = ' || r_array(3));
end;
/

次に、前の例に挿入された行を更新した結果を示します。(更新された行数のレポートは、例そのものからの値です。テスト・スクリプトによって、製品がレポートされます。)

3 rows updated
Product for row1 = 1500
Product for row2 = 2500
Product for row3 = 3500

PL/SQL procedure successfully completed.

Command> select * from tab;
< 100, 15 >
< 100, 25 >
< 100, 35 >
3 rows found.
Command>

v) これは複数行の削除を示します。

CREATE OR REPLACE PROCEDURE multi_Row_delete
(c1_test NUMBER,
r OUT DBMS_SQL.NUMBER_TABLE) is
c NUMBER;
n NUMBER;

BEGIN
c := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(c, 'DELETE FROM tab WHERE c1 = :bnd1 ' ||
'RETURNING c1*c2 INTO :bnd2', DBMS_SQL.NATIVE);
DBMS_SQL.BIND_VARIABLE(c, 'bnd1', c1_test);
DBMS_SQL.BIND_ARRAY(c, 'bnd2', r);
n := DBMS_SQL.EXECUTE(c);
DBMS_OUTPUT.PUT_LINE(n || ' rows deleted');
DBMS_SQL.VARIABLE_VALUE(c, 'bnd2', r);-- get value of outbind variable
DBMS_SQL.CLOSE_CURSOR(c);
END;

次のスクリプトを使用すると、ttIsqlでこの例を実行できます。

declare
c1_test NUMBER;
r_array dbms_sql.number_table;
begin
c1_test := 100;
multi_Row_delete(c1_test, r_array);
dbms_output.put_line('Product for row1 = ' || r_array(1));
dbms_output.put_line('Product for row2 = ' || r_array(2));
dbms_output.put_line('Product for row3 = ' || r_array(3));
end;
/

次に、前の例で更新された行を削除した結果を示します。(削除された行数のレポートは、例そのものからの値です。テスト・スクリプトによって、製品がレポートされます。)

3 rows deleted
Product for row1 = 1500
Product for row2 = 2500
Product for row3 = 3500

PL/SQL procedure successfully completed.

Command> select * from tab;
0 rows found.

注意:
Number_TableのBIND_ARRAYは数値を内部的にバインドします。文を実行する回数は、インバインド配列内の要素数によって決まります。

例9: 動的SQLでのPL/SQLブロック

DBMS_SQLまたはEXECUTE IMMEDIATEのいずれかを使用して、動的SQLでPL/SQLブロックを実行できます。この例では、DBMS_SQLを使用しブロックを実行します。

次のプロシージャがあるとします。

Command> create or replace procedure foo is
> begin
>    dbms_output.put_line('test');
> end;
> /

Procedure created.

DBMS_SQLを使用しPL/SQLブロックでこのプロシージャを実行します。

Command> declare
>    c number;
>    r number;
> begin
>    c := dbms_sql.open_cursor;
>    dbms_sql.parse(c, 'begin foo; end;', dbms_sql.native);
>    r := dbms_sql.execute(c);
> end;
> /
test

PL/SQL procedure successfully completed.

データ構造

DBMS_SQLパッケージは、次のレコード・タイプと表タイプを定義します。

注意:

- PLS_INTEGERデータ・タイプとBINARY_INTEGERデータ・タイプは同じです。このドキュメントでは、リファレンス情報でデータ・タイプ(表タイプ、レコード・タイプ、サブプログラム・パラメータ、サブプログラム戻り値など)を示す場合にBINARY_INTEGERを使用しますが、説明および例ではいずれも使用される場合があります。

- INTEGERデータ・タイプとNUMBER(38)データ・タイプも同じです。このドキュメントでは、全体をとおしてINTEGERを使用します。

レコード・タイプ

- DESC_RECレコード・タイプ

- DESC_REC2レコード・タイプ

- DESC_REC3レコード・タイプ

表タイプ

- BINARY_DOUBLE_TABLE表タイプ

- BINARY_FLOAT_TABLE表タイプ

- BLOB_TABLE表タイプ

- CLOB_TABLE表タイプ

- DATE_TABLE表タイプ

- DESC_TAB表タイプ

- DESC_TAB2表タイプ

- DESC_TAB3表タイプ

- INTERVAL_DAY_TO_SECOND_TABLE表タイプ

- INTERVAL_YEAR_TO_MONTH_TABLE表タイプ

- NUMBER_TABLE表タイプ

- TIME_TABLE表タイプ

- TIMESTAMP_TABLE表タイプ

- VARCHAR2_TABLE表タイプ

- VARCHAR2A表タイプ

- VARCHAR2S表タイプ

DESC_RECレコード・タイプ

注意:
このタイプは非推奨となっているため、DESC_REC2レコード・タイプを使用することをお薦めします。

このレコード・タイプは、動的問合せ内に単一列の記述情報を保持します。これは、DESC_TAB表タイプおよびDESCRIBE_COLUMNSプロシージャの要素タイプです。

構文

TYPE desc_rec IS RECORD (
col_type            BINARY_INTEGER := 0,
col_max_len         BINARY_INTEGER := 0,
col_name            VARCHAR2(32)   := '',
col_name_len        BINARY_INTEGER := 0,
col_schema_name     VARCHAR2(32)   := '',
col_schema_name_len BINARY_INTEGER := 0,
col_precision       BINARY_INTEGER := 0,
col_scale           BINARY_INTEGER := 0,
col_charsetid       BINARY_INTEGER := 0,
col_charsetform     BINARY_INTEGER := 0,
col_null_ok         BOOLEAN        := TRUE);
TYPE desc_tab IS TABLE OF desc_rec INDEX BY BINARY_INTEGER;

フィールド

表7-3 DESC_RECフィールド

フィールド

説明

col_type

列のタイプ。

col_max_len

列の最大長。

col_name

列の名前。

col_name_len

列名の長さ。

col_schema_name

列のスキーマ名。

col_schema_name_len

列のスキーマ名の長さ。

col_precision

列の精度。

col_scale

列のスケール。

col_charsetid

列のキャラクタ・セットID。

col_charsetform

列のキャラクタ・セット形式。

col_null_ok

NULL列フラグ(NULLが設定可能な場合はTRUE)。

DESC_REC2レコード・タイプ

DESC_REC2は、DESC_TAB2表タイプおよびDESCRIBE_COLUMNS2プロシージャの要素タイプです。

このレコード・タイプはDESC_RECと同じですが、col_nameフィールドがVARCHAR2の設定可能な最大サイズに拡張されている点は異なります。したがって、32文字を超えて列名の値を設定できるため、非推奨となっているDESC_RECより適切です。

構文

TYPE desc_rec2 IS RECORD (
col_type            binary_integer := 0,
col_max_len         binary_integer := 0,
col_name            varchar2(32767) := '',
col_name_len        binary_integer := 0,
col_schema_name     varchar2(32)   := '',
col_schema_name_len binary_integer := 0,
col_precision       binary_integer := 0,
col_scale           binary_integer := 0,
col_charsetid       binary_integer := 0,
col_charsetform     binary_integer := 0,
col_null_ok         boolean        := TRUE);

フィールド

表7-4 DESC_REC2フィールド

フィールド

説明

col_type

列のタイプ。

col_max_len

列の最大長。

col_name

列の名前。

col_name_len

列名の長さ。

col_schema_name

列のスキーマ名。

col_schema_name_len

列のスキーマ名の長さ。

col_precision

列の精度。

col_scale

列のスケール。

col_charsetid

列のキャラクタ・セットID。

col_charsetform

列のキャラクタ・セット形式。

col_null_ok

NULL列フラグ(NULLが設定可能な場合はTRUE)。

DESC_REC3レコード・タイプ

DESC_REC3は、DESC_TAB3表タイプおよびDESCRIBE_COLUMNS3プロシージャの要素タイプです。

DESC_REC3はDESC_REC2と同じですが、動的問合せ内に列のタイプ名(type_name)およびタイプ名の長さ(type_name_len)を保持するための2つのフィールドが追加されている点は異なります。col_typeフィールドの値が現在使用されていない109(ユーザー定義タイプに対するOracle Databaseタイプ番号)の場合にのみ、col_type_nameおよびcol_type_name_lenフィールドにデータが移入されます。

構文

TYPE desc_rec3 IS RECORD (
col_type               binary_integer := 0,
col_max_len            binary_integer := 0,
col_name               varchar2(32767) := '',
col_name_len           binary_integer := 0,
col_schema_name        varchar2(32) := '',
col_schema_name_len    binary_integer := 0,
col_precision          binary_integer := 0,
col_scale              binary_integer := 0,
col_charsetid          binary_integer := 0,
col_charsetform        binary_integer := 0,
col_null_ok            boolean := TRUE,
col_type_name          varchar2(32767)   := '',
col_type_name_len      binary_integer := 0);

フィールド

表7-5 DESC_REC3フィールド

フィールド

説明

col_type

列のタイプ。

col_max_len

列の最大長。

col_name

列の名前。

col_name_len

列名の長さ。

col_schema_name

列のスキーマ名。

col_schema_name_len

列のスキーマ名の長さ。

col_precision

列の精度。

col_scale

列のスケール。

col_charsetid

列のキャラクタ・セットID。

col_charsetform

列のキャラクタ・セット形式。

col_null_ok

NULL列フラグ(NULLが設定可能な場合はTRUE)。

col_type_name

予約済

col_type_name_len

予約済

BINARY_DOUBLE_TABLE表タイプ

これは、BINARY_DOUBLEの表です。

構文

TYPE binary_double_table IS TABLE OF BINARY_DOUBLE INDEX BY BINARY_INTEGER;

BINARY_FLOAT_TABLE表タイプ

これは、BINARY_FLOATの表です。

構文

TYPE binary_float_table IS TABLE OF BINARY_FLOAT INDEX BY BINARY_INTEGER;

BLOB_TABLE表タイプ

これは、BLOBの表です。

構文

TYPE blob_table IS TABLE OF BLOB INDEX BY BINARY_INTEGER;

CLOB_TABLE表タイプ

これは、CLOBの表です。

構文

TYPE clob_table IS TABLE OF CLOB INDEX BY BINARY_INTEGER;

DATE_TABLE表タイプ

これは、DATEの表です。

構文

type date_table IS TABLE OF DATE INDEX BY BINARY_INTEGER;

DESC_TAB表タイプ

これは、DESC_RECレコード・タイプの表です。

構文

TYPE desc_tab IS TABLE OF desc_rec INDEX BY BINARY_INTEGER;

DESC_TAB2表タイプ

これは、DESC_REC2レコード・タイプの表です。

構文

TYPE desc_tab2 IS TABLE OF desc_rec2 INDEX BY BINARY_INTEGER;

DESC_TAB3表タイプ

これは、DESC_REC3レコード・タイプの表です。

構文

TYPE desc_tab3 IS TABLE OF desc_rec3 INDEX BY BINARY_INTEGER;

INTERVAL_DAY_TO_SECOND_TABLE表タイプ

これは、DSINTERVAL_UNCONSTRAINEDの表です。

構文

TYPE interval_day_to_second_Table IS TABLE OF
DSINTERVAL_UNCONSTRAINED INDEX BY binary_integer;

INTERVAL_YEAR_TO_MONTH_TABLE表タイプ

これは、YMINTERVAL_UNCONSTRAINEDの表です。

構文

TYPE interval_year_to_month_table IS TABLE OF YMINTERVAL_UNCONSTRAINED
INDEX BY BINARY_INTEGER;

NUMBER_TABLE表タイプ

これは、NUMBERの表です。

構文

TYPE number_table IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;

TIME_TABLE表タイプ

これは、TIME_UNCONSTRAINEDの表です。

構文

TYPE time_table IS TABLE OF TIME_UNCONSTRAINED INDEX BY BINARY_INTEGER;

TIMESTAMP_TABLE表タイプ

これは、TIMESTAMP_UNCONSTRAINEDの表です。

構文

TYPE timestamp_table IS TABLE OF TIMESTAMP_UNCONSTRAINED INDEX BY BINARY_INTEGER;

VARCHAR2_TABLE表タイプ

これは、VARCHAR2(2000)の表です。

構文

TYPE varchar2_table IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;

VARCHAR2A表タイプ

これは、VARCHAR2(32767)の表です。

構文

TYPE varchar2a IS TABLE OF VARCHAR2(32767) INDEX BY BINARY_INTEGER;

VARCHAR2S表タイプ

これは、VARCHAR2(256)の表です。

注意:
このタイプは、VARCHAR2A表タイプによって置き換えられています。これは、下位互換性を維持する目的のみでサポートされています。

構文

TYPE varchar2s IS TABLE OF VARCHAR2(256) INDEX BY BINARY_INTEGER;

DBMS_SQLサブプログラムの要約

表7-6 DBMS_SQLパッケージのサブプログラム

サブプログラム

説明

BIND_ARRAYプロシージャ

指定の値を指定のコレクションにバインドします。

BIND_VARIABLEプロシージャ

指定の値を指定の変数にバインドします。

CLOSE_CURSORプロシージャ

指定したカーソルをクローズして、メモリーを解放します。

COLUMN_VALUEプロシージャ

カーソル内の指定位置にあるカーソル要素の値を戻します。

COLUMN_VALUE_LONGプロシージャ

DEFINE_COLUMN_LONGで定義したLONG列の選択された部分を戻します。

重要: TimesTenではLONGデータ・タイプはサポートされていないため、TimesTenでこのプロシージャを使用しようとすると、実行時にORA-01018エラーが発生します。

したがって、このマニュアルでは、COLUMN_VALUE_LONGおよびDEFINE_COLUMN_LONGプロシージャの説明は記載しません。

DEFINE_ARRAYプロシージャ

指定したカーソルから選択するコレクションを定義します。SELECT文のみで使用されます。

DEFINE_COLUMNプロシージャ

指定したカーソルから選択する列を定義します。SELECT文のみで使用されます。

DEFINE_COLUMN_LONGプロシージャ

指定したカーソルから選択するLONG列を定義します。SELECT文で使用されます。

重要: TimesTenではLONGデータ・タイプはサポートされていないため、TimesTenでCOLUMN_VALUE_LONGプロシージャを使用しようとすると、実行時にORA-01018エラーが発生します。

したがって、このマニュアルでは、COLUMN_VALUE_LONGおよびDEFINE_COLUMN_LONGプロシージャの説明は記載しません。

DESCRIBE_COLUMNSプロシージャ

DBMS_SQLによってオープンされ解析されたカーソルの列の情報を表示します。

DESCRIBE_COLUMNS2プロシージャ

DESCRIBE_COLUMNSプロシージャの代替オプションとして、指定した列の情報を表示します。

DESCRIBE_COLUMNS3プロシージャ

DESCRIBE_COLUMNSプロシージャの代替オプションとして、指定した列の情報を表示します。

EXECUTEファンクション

指定のカーソルを実行します。

EXECUTE_AND_FETCHファンクション

指定のカーソルを実行して、行をフェッチします。

FETCH_ROWSファンクション

指定のカーソルから行をフェッチします。

IS_OPENファンクション

指定のカーソルがオープンしている場合はTRUEを戻します。

LAST_ERROR_POSITIONファンクション

エラーが発生したSQL文テキスト内のバイト・オフセットを戻します。

LAST_ROW_COUNTファンクション

フェッチされた累積行数を戻します。

LAST_ROW_IDファンクション

最後に処理された行のrowidを戻します(TimesTenではNULL)。

TimesTenでは、DML文で最後に処理された行のROWIDはサポートされていません。

LAST_SQL_FUNCTION_CODEファンクション

文のSQLファンクション・コードを戻します。

OPEN_CURSORファンクション

新規カーソルのID番号を戻します。

PARSEプロシージャ

指定の文を解析します。

TO_CURSOR_NUMBERファンクション

強くまたは弱くタイプ付けされたオープンされているREF CURSORを使用して、それをDBMS_SQLカーソル番号に変換します。

TO_REFCURSORファンクション

オープン、解析および実行されたカーソルを使用し、PL/SQLシステム固有の動的SQLで消費できるPL/SQLで管理可能なREF CURSOR(弱くタイプ付けされたカーソル)に変換または移行します。

VARIABLE_VALUEプロシージャ

指定のカーソルについて指定の変数の値を戻します。

BIND_ARRAYプロシージャ

このプロシージャは、文内の変数の名前に基づいて、カーソル内の指定の変数に指定の値または値のセットをバインドします。

構文

DBMS_SQL.BIND_ARRAY (
c                   IN INTEGER,
name                IN VARCHAR2,
<table_variable>    IN <datatype>
[,index1              IN INTEGER,
index2              IN INTEGER)] );

table_variableとそれに対応するdatatypeは、次のいずれかの組合せになります。

<bflt_tab>     dbms_sql.Binary_Float_Table
<bdbl_tab>     dbms_sql.Binary_Double_Table
<bl_tab>       dbms_sql.Blob_Table
<cl_tab>       dbms_sql.Clob_Table
<c_tab>        dbms_sql.Varchar2_Table
<d_tab>        dbms_sql.Date_Table
<ids_tab>      dbms_sql.Interval_Day_to_Second_Table
<iym_tab>      dbms_sql.Interval_Year_to_Month_Table
<n_tab>        dbms_sql.Number_Table
<tm_tab>       dbms_sql.Time_Table
<tms_tab>      dbms_sql.Timestamp_Table

BIND_ARRAYプロシージャは、異なるデータ・タイプを受け入れるためにオーバーロードされていることに注意してください。

パラメータ

表7-7 BIND_ARRAYプロシージャ・パラメータ

パラメータ

説明

c

値がバインドされるカーソルのID番号

name

文内のコレクションの名前

table_variable

datatypeとして宣言されたローカル変数

index1

範囲の下限を示す表要素の索引

index2

範囲の上限を示す表要素の索引

使用上の注意

バインド変数名の長さは、30バイト以下にする必要があります。

範囲をバインドするためには、範囲を指定する要素タブ(index1)とタブ(index2)が表に含まれている必要がありますが、その範囲は詳細でなくてもかまいません。index1の値は、index2以下である必要があります。タブ(index1)とタブ(index2)の間にあるすべての要素がバインドして使用されます。

バインド・コールで索引を指定しない場合で、かつ文内の2つの異なるバインドが異なる数の要素を含んだ表を指定している場合、実際に使用される要素の数は、すべての表の最小値となります。これは索引を指定する場合にも当てはまります。すべての表に関する2つの索引の間では最小範囲が選択されます。

問合せ内のすべてのバインド変数が、配列バインドである必要はありません。一部は通常のバインドの場合があり、式の評価などでは、同じ値がコレクションの各要素に使用されます。

バルク配列バインド

バルクSELECT、INSERT、UPDATEおよびDELETEは、多くのコールを1つにまとめることによって、アプリケーションのパフォーマンスが向上します。DBMS_SQLパッケージによって、ユーザーはPL/SQL表タイプを使用しながらデータの収集に対する処理を実行できます。

表項目は、バインドされていない同種のコレクションです。表項目は、持続記憶域では他のリレーショナル表に似ており、組込みの配列を持ちません。ただし、表項目が、(問合せまたは持続データのナビゲーション・アクセスのいずれかによって)作業領域に移されたり、あるいはPL/SQLの変数またはパラメータの値として作成されると、要素の値を取得して設定するために配列形式の構文で使用できる添字が、その表項目の要素に与えられます。

これらの要素の添字は詳細である必要はなく、負数を含むあらゆる数値が使用できます。たとえば、表項目には、-10、2および7の位置のみにある要素を含めることができます。

表項目が一時作業領域から持続記憶域に移されると、添字は格納されません。表項目は、持続記憶域内では順序が付いていません。

表は、バインド実行時に、PL/SQLバッファからローカルのDBMS_SQLバッファにコピーされ(すべてのスカラー・タイプについて同様)、ローカルのDBMS_SQLバッファから操作されます。したがって、バインド・コール後に表を変更した場合でも、その変更が実行方法に影響を与えることはありません。

スカラー・コレクションのタイプ

ローカル変数を次のいずれかの表項目タイプとして宣言でき、これらの表項目タイプは、DBMS_SQLではパブリック・タイプとして定義されています。

TYPE binary_double_table
IS TABLE OF BINARY_DOUBLE  INDEX BY BINARY_INTEGER;
TYPE binary_float_table
IS TABLE OF BINARY_FLOAT   INDEX BY BINARY_INTEGER;
TYPE blob_table     IS TABLE OF BLOB           INDEX BY BINARY_INTEGER;
TYPE clob_table     IS TABLE OF CLOB           INDEX BY BINARY_INTEGER;
TYPE date_table     IS TABLE OF DATE           INDEX BY BINARY_INTEGER;
TYPE interval_day_to_second_table
IS TABLE OF dsinterval_unconstrained
INDEX BY BINARY_INTEGER;
TYPE interval_year_to_month_table
IS TABLE OF yminterval_unconstrained
INDEX BY BINARY_INTEGER;
TYPE number_table   IS TABLE OF NUMBER         INDEX BY BINARY_INTEGER;
TYPE time_table     IS TABLE OF time_unconstrained
INDEX BY BINARY_INTEGER;
TYPE timestamp_table
IS TABLE OF timestamp_unconstrained
INDEX BY BINARY_INTEGER;
TYPE varchar2_table IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;

<tm_tab>   Time_Table
<tms_tab>  Timestamp_Table
<ids_tab>  Interval_Day_To_Second_Table
<iym_tab>  Interval_Year_To_Month_Table

例

「例」を参照してください。

BIND_VARIABLEプロシージャ

このプロシージャは、文内の変数の名前に基づいて、カーソル内の指定の変数に指定の値または値のセットをバインドします。

構文

DBMS_SQL.BIND_VARIABLE (
c              IN INTEGER,
name           IN VARCHAR2,
value          IN <datatype>);

datatypeは、次のいずれかのタイプである必要があります。

BINARY_DOUBLE
BINARY_FLOAT
BLOB
CLOB CHARACTER SET ANY_CS
DATE
INTERVAL DAY TO SECOND(9,9) (DSINTERVAL_UNCONSTRAINED)
NUMBER
TIME(9) (TIME_UNCONSTRAINED)
TIMESTAMP(9) (TIMESTAMP_UNCONSTRAINED)
VARCHAR2 CHARACTER SET ANY_CS
INTERVAL YEAR TO  MONTH(9) (YMINTERVAL_UNCONSTRAINED)
VARRAY
Nested table

BIND_VARIABLEは、異なるデータ・タイプを受け入れるためにオーバーロードされていることに注意してください。

BIND_VARIABLEでは、次の構文もサポートされています。大カッコ[]は、BIND_VARIABLEファンクションのオプション・パラメータを示します。

DBMS_SQL.BIND_VARIABLE (
c            IN INTEGER,
name         IN VARCHAR2,
value        IN VARCHAR2 CHARACTER SET ANY_CS [,out_value_size IN INTEGER]);

CHAR、RAWおよびROWIDデータをバインドするために、次のバリエーションを次の構文で使用できます。

DBMS_SQL.BIND_VARIABLE_CHAR (
c              IN INTEGER,
name           IN VARCHAR2,
value          IN CHAR CHARACTER SET ANY_CS [,out_value_size IN INTEGER]);

DBMS_SQL.BIND_VARIABLE_RAW (
c              IN INTEGER,
name           IN VARCHAR2,
value          IN RAW [,out_value_size IN INTEGER]);

DBMS_SQL.BIND_VARIABLE_ROWID (
c              IN INTEGER,
name           IN VARCHAR2,
value          IN ROWID);

パラメータ

表7-8 BIND_VARIABLEプロシージャのパラメータ

パラメータ

説明

c

値がバインドされるカーソルのID番号

name

文内の変数の名前

value

カーソル内の変数にバインドする値

IN変数とIN OUT変数の場合、この値は、このパラメータで渡される値のタイプと同じタイプです。

out_value_size

VARCHAR2、RAW、CHAR OUTまたはIN OUT変数の最大予測OUT値サイズ(バイト単位)

サイズの指定がない場合は、現行値の長さが使用されます。このパラメータは、valueパラメータが初期化されていない場合、指定する必要があります。

使用上の注意

この変数がIN変数、IN OUT変数またはINコレクションである場合は、指定したバインド値が、変数タイプまたは配列タイプに対して有効である必要があります。OUT変数のバインド値は無視されます。

SQL文のバインド変数またはコレクションは、名前によって識別されます。バインド変数またはバインド配列に値をバインドする場合は、次の例に示すように、文中でバインド変数を識別する文字列の先頭にコロンを付ける必要があります。

SELECT last_name FROM employees WHERE salary > :X;

この例では、対応するバインド・コールは次のようになります。

BIND_VARIABLE(cursor_name, ':X', 3500);

または

BIND_VARIABLE (cursor_name, 'X', 3500);

バインド変数名の長さは、30バイト以下にする必要があります。

例

「例」を参照してください。

CLOSE_CURSORプロシージャ

このプロシージャは、指定のカーソルをクローズします。カーソルに割り当てられたメモリーは解放され、そのカーソルからはフェッチできなくなります。

構文

DBMS_SQL.CLOSE_CURSOR (
c    IN OUT INTEGER);

パラメータ

表7-9 CLOSE_CURSORプロシージャのパラメータ

パラメータ

説明

c

(IN)クローズするカーソルのID番号

(OUT)NULL

COLUMN_VALUEプロシージャ

このプロシージャは、FETCH_ROWSファンクションをコールしてフェッチしたデータへのアクセスに使用されます。これは、指定のカーソルの指定の位置に対してカーソル要素の値を戻します。

構文

DBMS_SQL.COLUMN_VALUE (
c                 IN  INTEGER,
position          IN  INTEGER,
value             OUT <datatype>
[,column_error      OUT NUMBER]
[,actual_length     OUT INTEGER]);

大カッコ[]はオプション・パラメータを示し、datatypeは次のいずれかのデータ・タイプである必要があります。

BINARY_DOUBLE
BINARY_FLOAT
BLOB
CLOB CHARACTER SET ANY_CS
DATE
INTERVAL DAY TO SECOND(9,9) (DSINTERVAL_UNCONSTRAINED)
NUMBER
TIME(9) (TIME_UNCONSTRAINED)
TIMESTAMP(9) (TIMESTAMP_UNCONSTRAINED)
VARCHAR2 CHARACTER SET ANY_CS
INTERVAL YEAR TO  MONTH(9) (YMINTERVAL_UNCONSTRAINED)
VARRAY
Nested table

CHAR、RAWおよびROWIDデータを含んだ変数では、次のバリエーションを構文で使用できます。

DBMS_SQL.COLUMN_VALUE_CHAR (
c               IN  INTEGER,
position        IN  INTEGER,
value           OUT CHAR CHARACTER SET ANY_CS
[,column_error    OUT NUMBER]
[,actual_length   OUT INTEGER]);

DBMS_SQL.COLUMN_VALUE_RAW (
c               IN  INTEGER,
position        IN  INTEGER,
value           OUT RAW
[,column_error    OUT NUMBER]
[,actual_length   OUT INTEGER]);

DBMS_SQL.COLUMN_VALUE_ROWID (
c               IN  INTEGER,
position        IN  INTEGER,
value           OUT ROWID
[,column_error    OUT NUMBER]
[,actual_length   OUT INTEGER]);

次の構文を使用すると、COLUMN_VALUEプロシージャでバルク操作に対応できます。

DBMS_SQL.COLUMN_VALUE(
c                 IN             INTEGER,
position          IN             INTEGER,
<param_name>      IN OUT NOCOPY  <table_type>);

param_nameおよびそれに対応するtable_typeは、次のいずれかの組合せになります。

<bdbl_tab>     dbms_sql.Binary_Double_Table
<bflt_tab>     dbms_sql.Binary_Float_Table
<bl_tab>       dbms_sql.Blob_Table
<cl_tab>       dbms_sql.Clob_Table
<c_tab>        dbms_sql.Varchar2_Table
<d_tab>        dbms_sql.Date_Table
<ids_tab>      dbms_sql.Interval_Day_To_Second_Table
<iym_tab>      dbms_sql.Interval_Year_To_Month_Table
<n_tab>        dbms_sql.Number_Table
<tm_tab>       dbms_sql.Time_Table
<tms_tab>      dbms_sql.Timestamp_Table

パラメータ

表7-10 COLUMN_VALUEプロシージャのパラメータ(単一行)

パラメータ

説明

c

値をフェッチするカーソルのID番号

position

カーソルにある列の相対位置(文の最初の列は位置1です)

value

指定した列から戻された値

column_error

該当する場合、列値のエラー・コード

actual_length

指定した列内の値の(切捨て前の)実際の長さ

表7-11 COLUMN_VALUEプロシージャのパラメータ(バルク)

パラメータ

説明

c

値をフェッチするカーソルのID番号

position

カーソルにある列の相対位置(文の最初の列は位置1です)

param_name

table_typeとして宣言されたローカル変数

param_nameは、バルク操作でのIN OUT NOCOPYパラメータです。

バルク操作では、サブプログラムによって、(暗黙的に保持される)適切な索引に新しい要素が追加されます。たとえば、DEFINE_ARRAYプロシージャの使用時にバッチ・サイズ(cntパラメータ)として10行、開始索引(lower_bnd)として1を指定するとします。FETCH_ROWSファンクションをコールした後に、このサブプログラムを最初にコールすると索引1から10に要素が移入され、、その次にコールすると11から20に要素が移入され、以降同様に処理されます。

例外

ORA-06562: Type of out argument must match type of column or bind variable

この例外は、指定したOUTパラメータのvalueのタイプが、実際の値のタイプと異なると発生します。このタイプは、DEFINE_COLUMNをコールして列を定義したときに指定したタイプです。

例

「例」を参照してください。

DEFINE_ARRAYプロシージャ

このプロシージャは、指定の列について、FETCH_ROWSファンクション・コールで行の値がフェッチされるコレクションを定義します。このプロシージャによって、ユーザーは単一のSELECT文から、行を一括してフェッチできます。単一のフェッチで、PL/SQLの集計オブジェクトに複数の行をフェッチできます。

コレクションのスカラー・タイプ

ローカル変数を、次のいずれかの表項目タイプとして宣言し、DBMS_SQLを使用して、任意の行数をその中にフェッチできます。これらは、BIND_ARRAYプロシージャに指定できるタイプと同じです。

TYPE binary_double_table
IS TABLE OF BINARY_DOUBLE  INDEX BY BINARY_INTEGER;
TYPE binary_float_table
IS TABLE OF BINARY_FLOAT   INDEX BY BINARY_INTEGER;
TYPE blob_table     IS TABLE OF BLOB           INDEX BY BINARY_INTEGER;
TYPE clob_table     IS TABLE OF CLOB           INDEX BY BINARY_INTEGER;
TYPE date_table     IS TABLE OF DATE           INDEX BY BINARY_INTEGER;
TYPE interval_day_to_second_table
IS TABLE OF dsinterval_unconstrained
INDEX BY BINARY_INTEGER;
TYPE interval_year_to_month_table
IS TABLE OF yminterval_unconstrained
INDEX BY BINARY_INTEGER;
TYPE number_table   IS TABLE OF NUMBER         INDEX BY BINARY_INTEGER;
TYPE time_table     IS TABLE OF time_unconstrained
INDEX BY BINARY_INTEGER;
TYPE timestamp_table
IS TABLE OF timestamp_unconstrained
INDEX BY BINARY_INTEGER;
TYPE varchar2_table IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;

構文

DBMS_SQL.DEFINE_ARRAY (
c           IN INTEGER,
position    IN INTEGER,
<table_variable>    IN <datatype>
cnt         IN INTEGER,
lower_bnd   IN INTEGER);

table_variableとそれに対応するdatatypeは、次のいずれかの組合せになります。

<bflt_tab>     dbms_sql.Binary_Float_Table
<bdbl_tab>     dbms_sql.Binary_Double_Table
<bl_tab>       dbms_sql.Blob_Table
<cl_tab>       dbms_sql.Clob_Table
<c_tab>        dbms_sql.Varchar2_Table
<d_tab>        dbms_sql.Date_Table
<n_tab>        dbms_sql.Number_Table
<tm_tab>       dbms_sql.Time_Table
<tms_tab>      dbms_sql.Timestamp_Table
<ids_tab>      dbms_sql.Interval_Day_To_Second_Table
<iym_tab>      dbms_sql.Interval_Year_To_Month_Table

DEFINE_ARRAYは、異なるデータ・タイプを受け入れるためにオーバーロードされていることに注意してください。

パラメータ

表7-12 DEFINE_ARRAYプロシージャのパラメータ

パラメータ

説明

c

配列がバインドされるカーソルのID番号

position

定義している配列内にある列の相対位置(文の最初の列は位置1です)

table_variable

datatypeとして宣言されたローカル変数

cnt

フェッチする行数

lower_bnd

開始索引(コレクションへ結果をコピーする開始位置)

使用上の注意

行数(cnt)には0(ゼロ)より大きい整数を指定する必要があります。lower_bndは、正の数、負の数または0(ゼロ)でもかまいません。DEFINE_ARRAYコールが発行された問合せに、配列バインドを含めることはできません。

例外

ORA-29253: Invalid count argument passed to procedure dbms_sql.define_array

この例外は、行数(cnt)が0(ゼロ)以下であると発生します。

例

「例」を参照してください。

DEFINE_COLUMNプロシージャ

このプロシージャは、指定のカーソルから選択する列を定義します。このプロシージャが使用できるのは、SELECTカーソルのみです。

定義されている列は、指定のカーソル内にある文のSELECTリスト内での相対位置によって識別されます。COLUMN値のタイプによって、定義されている列のタイプが決まります。

構文

DBMS_SQL.DEFINE_COLUMN (
c              IN INTEGER,
position       IN INTEGER,
column         IN <datatype>);

datatypeは、次のいずれかのタイプである必要があります。

BINARY_DOUBLE
BINARY_FLOAT
BLOB
CLOB CHARACTER SET ANY_CS
DATE
INTERVAL DAY TO SECOND(9,9) (DSINTERVAL_UNCONSTRAINED)
NUMBER
TIME(9) (TIME_UNCONSTRAINED)
TIMESTAMP(9) (TIMESTAMP_UNCONSTRAINED)
INTERVAL YEAR TO  MONTH(9) (YMINTERVAL_UNCONSTRAINED)
VARRAY
Nested table

DEFINE_COLUMNは、異なるデータ・タイプを受け入れるためにオーバーロードされていることに注意してください。

DEFINE_COLUMNプロシージャでは、次の構文もサポートされます。

DBMS_SQL.DEFINE_COLUMN (
c              IN INTEGER,
position       IN INTEGER,
column         IN VARCHAR2 CHARACTER SET ANY_CS,
column_size    IN INTEGER);

CHAR、RAWおよびROWIDデータで列を定義するために、次のバリエーションをプロシージャ構文で使用できます。

DBMS_SQL.DEFINE_COLUMN_CHAR (
c              IN INTEGER,
position       IN INTEGER,
column         IN CHAR CHARACTER SET ANY_CS,
column_size    IN INTEGER);

DBMS_SQL.DEFINE_COLUMN_RAW (
c              IN INTEGER,
position       IN INTEGER,
column         IN RAW,
column_size    IN INTEGER);

DBMS_SQL.DEFINE_COLUMN_ROWID (
c              IN INTEGER,
position       IN INTEGER,
column         IN ROWID);

パラメータ

表7-13 DEFINE_COLUMNプロシージャのパラメータ

パラメータ

説明

c

選択対象に定義されている行のカーソルのID番号。

position

定義している行内にある列の相対位置(文の最初の列は位置1です)

column

定義している列の値

この値のタイプによって、定義している列のタイプが決まります。

column_size

タイプVARCHAR2、CHARおよびRAWの列に対する列値の最大予測サイズ(バイト単位)

例

「例」を参照してください。

DESCRIBE_COLUMNSプロシージャ

このプロシージャは、DBMS_SQLによってオープンされ解析されたカーソルの列の情報を表示します。

構文

DBMS_SQL.DESCRIBE_COLUMNS (
c              IN  INTEGER,
col_cnt        OUT INTEGER,
desc_t         OUT DBMS_SQL.DESC_TAB);

DBMS_SQL.DESCRIBE_COLUMNS (
c              IN  INTEGER,
col_cnt        OUT INTEGER,
desc_t         OUT DBMS_SQL.DESC_REC);

パラメータ

表7-14 DESCRIBE_COLUMNSプロシージャのパラメータ

パラメータ

説明

c

表示される列のカーソルのID番号。

col_cnt

問合せの選択リストにある列数。

desc_t

問合せの各列の情報を表示する表

例

「例」を参照してください。

DESCRIBE_COLUMNS2プロシージャ

このファンクションは、指定した列の情報を表示します。これは、DESCRIBE_COLUMNSプロシージャの代替オプションです。

構文

DBMS_SQL.DESCRIBE_COLUMNS2 (
c              IN  INTEGER,
col_cnt        OUT INTEGER,
desc_t         OUT DBMS_SQL.DESC_TAB2);

DBMS_SQL.DESCRIBE_COLUMNS2 (
c              IN  INTEGER,
col_cnt        OUT INTEGER,
desc_t         OUT DBMS_SQL.DESC_REC2);

パラメータ

表7-15 DESCRIBE_COLUMNS2プロシージャのパラメータ

パラメータ

説明

c

表示される列のカーソルのID番号。

col_cnt

問合せの選択リストにある列数。

desc_t

1から順に、問合せの選択リストの要素数まで索引付けされている、問合せの各列の説明を入力する表

DESCRIBE_COLUMNS3プロシージャ

このファンクションは、指定した列の情報を表示します。これは、DESCRIBE_COLUMNSプロシージャの代替オプションです。

構文

DBMS_SQL.DESCRIBE_COLUMNS3 (
c              IN  INTEGER,
col_cnt        OUT INTEGER,
desc_t         OUT DBMS_SQL.DESC_TAB3);

DBMS_SQL.DESCRIBE_COLUMNS3 (
c              IN  INTEGER,
col_cnt        OUT INTEGER,
desc_t         OUT DBMS_SQL.DESC_REC3);

パラメータ

表7-16 DESCRIBE_COLUMNS3プロシージャのパラメータ

パラメータ

説明

c

表示される列のカーソルのID番号。

col_cnt

問合せの選択リストにある列数。

desc_t

1から順に、問合せの選択リストの要素数まで索引付けされている、問合せの各列の説明を入力する表

使用上の注意

カーソルIDに基づいて渡されるカーソルには、OPENおよびPARSEを実行しておく必要があり、そうしないと、カーソルIDが無効であるとしてエラーが発生します。

EXECUTEファンクション

このファンクションは、指定のカーソルを実行します。このファンクションはカーソルのID番号を受け入れて、処理された行数を戻します。戻り値は、INSERT文、UPDATE文およびDELETE文に対してのみ有効です。DDLを含めた他のタイプの文に対しては、戻り値は定義されず無視されます。

構文

DBMS_SQL.EXECUTE (
c   IN INTEGER)
RETURN INTEGER;

パラメータ

表7-17 EXECUTEファンクションのパラメータ

パラメータ

説明

c

実行するカーソルのカーソルID番号

戻り値

処理された行数を示すINTEGER値

EXECUTE_AND_FETCHファンクション

このファンクションは、指定のカーソルを実行して行をフェッチします。これは、EXECUTEをコールしてからFETCH_ROWSをコールするのと同じ機能を提供しますが、リモート・データベースに対して使用する場合は、EXECUTE_AND_FETCHをコールした方がネットワークのラウンドトリップ数を低減できます。

EXECUTE_AND_FETCHファンクションは、実際にフェッチされた行数を戻します。

構文

DBMS_SQL.EXECUTE_AND_FETCH (
c              IN INTEGER,
exact          IN BOOLEAN DEFAULT FALSE)
RETURN INTEGER;

パラメータ

表7-18 EXECUTE_AND_FETCHファンクションのパラメータ

パラメータ

説明

c

実行してフェッチするカーソルのカーソルID番号

exact

問合せで実際に一致する行数が1以外の場合、例外を発生させるには、TRUE

例外が発生しても、行はフェッチされ、使用可能です。

戻り値

フェッチされた行数を示すINTEGER値

例外

ORA-01422: Exact fetch returns more than requested number of rows

この例外は、問合せで一致する行数が1でないと発生します。

FETCH_ROWSファンクション

このファンクションは、指定のカーソルから行をフェッチします。DEFINE_ARRAYプロシージャ・コールは、行の値がフェッチされるコレクションを定義します。

FETCH_ROWSコールは、DEFINE_ARRAYコールのcntパラメータに基づいて、指定された行数をフェッチします。フェッチされた行は、列ごとにCOLUMN_VALUEプロシージャ・コールを実行するまで、引数としてCOLUMN_VALUEに渡された表に行がコピーされるときに、DBMS_SQLバッファにコピーされます。行が配置される場所は、DEFINE_ARRAYコール内のlower_bnd設定に従って、lower_bnd、lower_bnd+1、lower_bnd+2のようになります。行がまだ入ってきていても、ユーザーは引き続きFETCH_ROWSおよびCOLUMN_VALUEコールを発行します。フェッチされずに残っている行があるかぎり、FETCH_ROWSを繰り返しコールできます。

FETCH_ROWSファンクションは、フェッチするカーソルのID番号を受け入れて、実際にフェッチされた行数を戻します。

構文

DBMS_SQL.FETCH_ROWS (
c              IN INTEGER)
RETURN INTEGER;

パラメータ

表7-19 FETCH_ROWSファンクションのパラメータ

パラメータ

説明

c

フェッチするカーソルのID番号

戻り値

フェッチされた行数を示すINTEGER値

例

「例」を参照してください。

IS_OPENファンクション

このファンクションは、指定のカーソルが現在オープンしているかどうかをチェックします。

構文

DBMS_SQL.IS_OPEN (
c              IN INTEGER)
RETURN BOOLEAN;

パラメータ

表7-20 IS_OPENファンクションのパラメータ

パラメータ

説明

c

チェックするカーソルのカーソルID番号

戻り値

オープンされ、クローズされていないカーソル番号に対してはTRUE、NULLのカーソル番号に対してはFALSE

CLOSE_CURSORプロシージャは、渡されたカーソル変数にNULLを代入することに注意してください。

例外

ORA-29471 DBMS_SQL access denied

これは、無効なカーソルID番号が検出された場合に発生します。セッションでこのエラーが発生し、レポートされると、その後は同じセッションでDBMS_SQLをコールするたびにこのエラーが発生しますが、これは、このセッションではDBMS_SQLを実行できなくなることを意味します。

LAST_ERROR_POSITIONファンクション

このファンクションは、エラーが発生したSQL文テキストのバイト・オフセットを返します。SQL文の最初の文字は、0の位置に配置されます。

構文

DBMS_SQL.LAST_ERROR_POSITION
RETURN INTEGER;

戻り値

エラーが発生したSQL文テキスト内のバイト・オフセットを示すINTEGER値

使用上の注意

このファンクションは、別のDBMS_SQLプロシージャまたはファンクションのコール前、かつPARSEのコール後にコールしてください。

LAST_ROW_COUNTファンクション

このファンクションは、フェッチされた累積行数を戻します。

構文

DBMS_SQL.LAST_ROW_COUNT
RETURN INTEGER;

戻り値

フェッチされた累積行数を示すINTEGER値

使用上の注意

このファンクションは、FETCH_ROWSコールまたはEXECUTE_AND_FETCHコール後にコールしてください。EXECUTEコール後にコールすると、戻される値は0(ゼロ)です。

LAST_ROW_IDファンクション

このファンクションは最後に処理された行のrowidを戻します(TimesTenではNULL)。

TimesTenでは、DML文で最後に処理された行のROWIDはサポートされていません。

構文

DBMS_SQL.LAST_ROW_ID
RETURN ROWID;

戻り値

TimesTenの場合はNULL

LAST_SQL_FUNCTION_CODEファンクション

このファンクションは、文のSQLファンクション・コードを戻します。これらのコードについては、『Oracle Call Interfaceプログラマーズ・ガイド』のOCI関数コードの表を参照してください。

構文

DBMS_SQL.LAST_SQL_FUNCTION_CODE
RETURN INTEGER;

戻り値

文のSQLファンクション・コードを示すINTEGER値

使用上の注意

このファンクションは、SQL文の実行直後にコールしてください。それ以外の場合、戻り値が定義されません。

OPEN_CURSORファンクション

このプロシージャは、新規のカーソルをオープンします。2番目のオーバーロードは、security_levelパラメータを使用して、オープンされたカーソルのセキュリティにファイングレイン・コントロールを適用します。ただし、TimesTenではセキュリティは施行されません(security_level=0)。

このカーソルが不要になった場合は、CLOSE_CURSORプロシージャをコールして、明示的にクローズする必要があります。

構文

DBMS_SQL.OPEN_CURSOR
RETURN INTEGER;

DBMS_SQL.OPEN_CURSOR (
security_level   IN   INTEGER)
RETURN INTEGER;

パラメータ

表7-21 OPEN_CURSORファンクションのパラメータ

パラメータ

説明

security_level

オープンされたカーソルに適用するセキュリティ保護のレベルを指定します。TimesTenではセキュリティ・レベル0のみが有効です(レベル1および2はサポートされていません)。

- Level 0の場合、カーソルに対して、セキュリティ・チェックなしですべてのDBMS_SQL操作を実行できます。カーソルは、フェッチされることがあります。カーソルは、(カーソルの解析時に有効だったユーザーIDおよびロールとは異なる)有効なユーザーIDおよびロールで実行されるコードによってフェッチでき、さらに、このコードによって再バインドおよび再実行することもできます。セキュリティのこのレベルは、デフォルトで使用不可になっています。

- TimesTenにはレベル1はありません。

- TimesTenにはレベル2はありません。

戻り値

新しいカーソルのカーソルID

使用上の注意

カーソルを使用すると、同じSQL文を繰り返し実行したり、新規のSQL文を実行することができます。カーソルを再使用した場合、新規のSQL文が解析されるときに、対応するカーソル・データ領域の内容がリセットされます。カーソルを再使用しないかぎり、クローズして再オープンする必要はありません。

PARSEプロシージャ

このプロシージャは、指定したカーソル内の指定した文を解析します。すべての文が即時に解析されます。さらに、DDL文は、解析時にただちに実行されます。

PARSEプロシージャには、複数のバージョンがあります。

- 引数としてVARCHAR2文を使用します。

- 引数としてVARCHAR2(32767)の表VARCHAR2Aを使用します。

- 引数としてVARCHAR2(32767)の表VARCHAR2Sを使用します。

- 引数としてCLOB文を使用します。
この解析プロシージャのCLOBオーバーロード・バージョンを使用すると、32 KBを超えるSQL文を解析できます。

このプロシージャのVARCHAR2Aオーバーロード・バージョンは、PL/SQL表の文の要素を連結し、その結果の文字列を解析します。このプロシージャを使用すると、文を分割することによって、単一のVARCHAR2変数についての制限を超えた長い文を解析できます。

構文

DBMS_SQL.PARSE (
c                  IN   INTEGER,
statement          IN   VARCHAR2,
language_flag      IN   INTEGER);

DBMS_SQL.PARSE (
c                  IN   INTEGER,
statement          IN   DBMS_SQL.VARCHAR2A,
lb                 IN   INTEGER,
ub                 IN   INTEGER,
lfflg              IN   BOOLEAN,
language_flag      IN   INTEGER);

DBMS_SQL.PARSE (
c                  IN   INTEGER,
statement          IN   DBMS_SQL.VARCHAR2S,
lb                 IN   INTEGER,
ub                 IN   INTEGER,
lfflg              IN   BOOLEAN,
language_flag      IN   INTEGER);

DBMS_SQL.PARSE (
c                  IN   INTEGER,
statement          IN   CLOB,
language_flag      IN   INTEGER);

パラメータ

表7-22 PARSEプロシージャのパラメータ

パラメータ

説明

c

文を解析するカーソルのID番号

statement

解析するSQL文

CLOBには、32 KBを超えるSQL文を格納できます。

PL/SQL文と異なり、SQL文の終わりにはセミコロンを含めないでください。次に例を示します。

DBMS_SQL.PARSE(cursor1, 'BEGIN proc; END;', 2);
DBMS_SQL.PARSE(cursor1, 'INSERT INTO tab VALUES(1)', 2);

lb

文内の要素の下限。

ub

文内の要素の上限。

lfflg

連結している各要素の後に改行を挿入する場合はTRUE

language_flag

SQL文の処理方法を判断するフラグ

TimesTenの場合は、NATIVE(または1)設定を使用して、プログラムが接続されるデータベースの動作が通常であるようにしてください。

使用上の注意

- クライアント側コードは、リモート・パッケージの変数または定数を参照できないため、定数の値を明示的に使用する必要があります。
たとえば、次のコードは、クライアント側でコンパイルしません。

DBMS_SQL.PARSE(cur_hdl, stmt_str, DBMS_SQL.NATIVE);
-- uses constant DBMS_SQL.NATIVE

次のコードは、引数が明示的に指定されているので、クライアント側で有効です。

DBMS_SQL.PARSE(cur_hdl, stmt_str, 1); -- compiles on the client

- VARCHAR2Sタイプは、下位互換性を維持する目的のみでサポートされています。かわりに、VARCHAR2Aを使用することをお薦めします。

例外

ORA-24344: Success with compilation error

コンパイルに関する警告を伴ったタイプ、プロシージャ、ファンクションまたはパッケージを作成する場合、この例外が発生しますが、オブジェクトはそのまま作成されます。

例

「例」を参照してください。

TO_CURSOR_NUMBERファンクション

このファンクションは、強くまたは弱くタイプ付けされたオープンされているREF CURSORを使用して、それをDBMS_SQLカーソル番号に変換します。

構文

DBMS_SQL.TO_CURSOR_NUMBER(
rc IN OUT SYS_REFCURSOR)
RETURN INTEGER;

パラメータ

表7-23 TO_CURSOR_NUMBERファンクションのパラメータ

パラメータ

説明

rc

カーソル番号に変換されるREF CURSOR

戻り値

REF CURSORから変換された、DBMS_SQLで管理可能なカーソル番号

使用上の注意

- 渡されるREF CURSORはオープンされている必要があります(OPEN_CURSOR)。

- REF CURSORがDBMS_SQLカーソル番号に変換されると、REF CURSORはシステム固有の動的SQL操作でアクセスできなくなります。

- フェッチが開始された後でREF CURSORとDBMS_SQLカーソル番号を切り替えることはできません。

例

CREATE OR REPLACE PROCEDURE DO_QUERY1(sql_stmt VARCHAR2) IS
TYPE CurType IS REF CURSOR;
src_cur         CurType;
curid           NUMBER;
desctab         DBMS_SQL.DESC_TAB;
colcnt          NUMBER;
namevar         VARCHAR2(50);
numvar          NUMBER;
datevar         DATE;

BEGIN
-- sql_stmt := 'select * from employees';
OPEN src_cur FOR sql_stmt;

-- Switch from native dynamic SQL to DBMS_SQL
curid := DBMS_SQL.TO_CURSOR_NUMBER(src_cur);

DBMS_SQL.DESCRIBE_COLUMNS(curid, colcnt, desctab);

-- Define columns
FOR i IN 1 .. colcnt LOOP
IF desctab(i).col_type = 2 THEN
DBMS_SQL.DEFINE_COLUMN(curid, i, numvar);
ELSIF desctab(i).col_type = 12 THEN
DBMS_SQL.DEFINE_COLUMN(curid, i, datevar);
ELSE
DBMS_SQL.DEFINE_COLUMN(curid, i, namevar, 25);
END IF;
END LOOP;

-- Fetch Rows
WHILE DBMS_SQL.FETCH_ROWS(curid) > 0 LOOP
FOR i IN 1 .. colcnt LOOP
IF (desctab(i).col_type = 1) THEN
DBMS_SQL.COLUMN_VALUE(curid, i, namevar);
ELSIF (desctab(i).col_type = 2) THEN
DBMS_SQL.COLUMN_VALUE(curid, i, numvar);
ELSIF (desctab(i).col_type = 12) THEN
DBMS_SQL.COLUMN_VALUE(curid, i, datevar);
END IF;
END LOOP;
END LOOP;

DBMS_SQL.CLOSE_CURSOR(curid);
END;

このプロシージャは、次のように実行できます。

Command> begin
> do_query1('select * from employees');
> end;
> /

PL/SQL procedure successfully completed.

TO_REFCURSORファンクション

このファンクションは、オープン(OPEN_CURSOR)、解析(PARSE)および実行(EXECUTE)されたカーソルを使用して、それをPL/SQLで管理可能なREF CURSOR(弱くタイプ付けされたカーソル)に変換または移行しますが、変換または移行後のカーソルは、PL/SQLシステム固有の動的SQLで消費できます。このサブプログラムが使用できるのは、SELECTカーソルのみです。

構文

DBMS_SQL.TO_REFCURSOR(
cursor_number IN OUT  INTEGER)
RETURN SYS_REFCURSOR;

パラメータ

表7-24 TO_REFCURSORファンクションのパラメータ

パラメータ

説明

cursor_number

REF CURSORに変換されるカーソルのカーソル番号

戻り値

DBMS_SQLカーソル番号から変換されたPL/SQL REF CURSOR

使用上の注意

- cursor_numberによって渡されるカーソルは、オープン、解析および実行されている必要があります。そうしないと、エラーが発生します。

- cursor_numberがREF CURSORに変換されると、これはDBMS_SQL操作でアクセスできなくなります。

- cursor_numberがREF CURSORに変換された後に、IS_OPENを使用すると、エラーが発生します。

- フェッチが開始された後でREF CURSORとDBMS_SQLカーソル番号を切り替えることはできません。エラーが発生します。

例

CREATE OR REPLACE PROCEDURE DO_QUERY2(mgr_id NUMBER) IS
TYPE CurType IS REF CURSOR;
src_cur         CurType;
curid           NUMBER;
sql_stmt        VARCHAR2(200);
ret             INTEGER;
empnos          DBMS_SQL.Number_Table;
depts           DBMS_SQL.Number_Table;

BEGIN

-- DBMS_SQL.OPEN_CURSOR
curid := DBMS_SQL.OPEN_CURSOR;

sql_stmt :=
'SELECT EMPLOYEE_ID, DEPARTMENT_ID from employees where MANAGER_ID = :b1';

DBMS_SQL.PARSE(curid, sql_stmt, DBMS_SQL.NATIVE);
DBMS_SQL.BIND_VARIABLE(curid, 'b1', mgr_id);
ret := DBMS_SQL.EXECUTE(curid);

-- Switch from DBMS_SQL to native dynamic SQL
src_cur := DBMS_SQL.TO_REFCURSOR(curid);

-- Fetch with native dynamic SQL
FETCH src_cur BULK COLLECT INTO empnos, depts;

IF empnos.COUNT > 0 THEN
DBMS_OUTPUT.PUT_LINE('EMPNO DEPTNO');
DBMS_OUTPUT.PUT_LINE('----- ------');
-- Loop through the empnos and depts collections
FOR i IN 1 .. empnos.COUNT LOOP
DBMS_OUTPUT.PUT_LINE(empnos(i) || '   ' || depts(i));
END LOOP;
END IF;

-- Close cursor
CLOSE src_cur;
END;

次の例では、103の管理IDに対してこのプロシージャを実行します。

Command> begin
> do_query2(103);
> end;
> /
EMPNO DEPTNO
----- ------
104   60
105   60
106   60
107   60

PL/SQL procedure successfully completed.

VARIABLE_VALUEプロシージャ

このプロシージャは、指定のカーソルについて指定の変数の値を戻します。これは、RETURNING句を使用してPL/SQLブロックまたはDML文内のバインド変数の値を戻すために使用されます。

構文

DBMS_SQL.VARIABLE_VALUE (
c               IN  INTEGER,
name            IN  VARCHAR2,
value           OUT NOCOPY <datatype>);

datatypeは、次のいずれかのタイプである必要があります。

BINARY_DOUBLE
BINARY_FLOAT
BLOB
CLOB CHARACTER SET ANY_CS
DATE
INTERVAL DAY TO SECOND(9,9) (DSINTERVAL_UNCONSTRAINED)
NUMBER
TIME(9) (TIME_UNCONSTRAINED)
TIMESTAMP(9) (TIMESTAMP_UNCONSTRAINED)
VARCHAR2 CHARACTER SET ANY_CS
INTERVAL YEAR TO  MONTH(9) (YMINTERVAL_UNCONSTRAINED)
VARRAY
Nested table

CHAR、RAWおよびROWIDデータを含んだ変数では、次のバリエーションを構文で使用できます。

DBMS_SQL.VARIABLE_VALUE_CHAR (
c               IN  INTEGER,
name            IN  VARCHAR2,
value           OUT CHAR CHARACTER SET ANY_CS);

DBMS_SQL.VARIABLE_VALUE_RAW (
c               IN  INTEGER,
name            IN  VARCHAR2,
value           OUT RAW);

DBMS_SQL.VARIABLE_VALUE_ROWID (
c               IN  INTEGER,
name            IN  VARCHAR2,
value           OUT ROWID);

次の構文を使用すると、VARIABLE_VALUEプロシージャでバルク操作に対応できます。

DBMS_SQL.VARIABLE_VALUE (
c                 IN   INTEGER,
name              IN   VARCHAR2,
value             OUT NOCOPY <table_type>);

バルク操作では、table_typeは次のようになります。

dbms_sql.Binary_Double_Table
dbms_sql.Binary_Float_Table
dbms_sql.Blob_Table
dbms_sql.Clob_Table
dbms_sql.Date_Table
dbms_sql.Interval_Day_To_Second_Table
dbms_sql.Interval_Year_To_Month_Table
dbms_sql.Number_Table
dbms_sql.Time_Table
dbms_sql.Timestamp_Table
dbms_sql.Varchar2_Table

パラメータ

表7-25 VARIABLE_VALUEプロシージャのパラメータ

パラメータ

説明

c

値を取得するカーソルのID番号

name

取得した値を代入する変数名

value

単一行オプションの場合、指定した位置の変数の値

配列オプションの場合、table_typeとして宣言されたローカル変数

注意: バルク操作の場合、valueはOUT NOCOPYパラメータです。

例外

ORA-06562: Type of out argument must match type of column or bind variable

これは、出力パラメータのタイプがBIND_VARIABLEコールで定義された値のタイプと違う場合に発生します。

例

「例」を参照してください。

8 DBMS_UTILITY

DBMS_UTILITYパッケージは、各種のユーティリティ・サブプログラムを提供します。

この章の内容は次のとおりです。

- DBMS_UTILITYの使用

- セキュリティ・モデル

- 定数

- データ・タイプ

- 例外

- DBMS_UTILITYサブプログラムの要約

DBMS_UTILITYの使用

- セキュリティ・モデル

- 定数

- データ・タイプ

- 例外

セキュリティ・モデル

DBMS_UTILITYは、NAME_RESOLVEプロシージャおよびCOMPILE_SCHEMAプロシージャのコール・ユーザーの権限で実行されます。これは、SQLが正しく動作するために必要です。

このパッケージは、SYSとして実行されません。

定数

DBMS_UTILITYパッケージでは、表8-1に示す定数が使用されます。

表8-1 DBMS_UTILITYの定数

名前

タイプ

値

説明

INV_ERROR_ON_RESTRICTIONS

BINARY_INTEGER

1

この定数は、INVALIDATEサブプログラムのp_option_flagsパラメータに対して唯一有効な値です。

注意:

- PLS_INTEGERデータ・タイプとBINARY_INTEGERデータ・タイプは同じです。このドキュメントでは、リファレンス情報でデータ・タイプ(表タイプ、レコード・タイプ、サブプログラム・パラメータ、サブプログラム戻り値など)を示す場合にBINARY_INTEGERを使用しますが、説明および例ではいずれも使用される場合があります。

- INTEGERデータ・タイプとNUMBER(38)データ・タイプも同じです。このドキュメントでは、全体をとおしてINTEGERを使用します。

データ・タイプ

- dblink_array

- index_table_type

- instance_record

- lname_array

- name_array

- number_array

- uncl_array

dblink_array

TYPE dblink_array IS TABLE OF VARCHAR2(128) INDEX BY BINARY_INTEGER;

データベース・リンクのリストは、ここに格納されます。(TimesTenはdblinkをサポートしません。)

index_table_type

TYPE index_table_type IS TABLE OF BINARY_INTEGER INDEX BY BINARY_INTEGER;

オブジェクトの生成順序は、ここに戻されます。

instance_record

TYPE instance_record IS RECORD (
inst_number   NUMBER,
inst_name     VARCHAR2(60));
TYPE instance_table IS TABLE OF instance_record INDEX BY BINARY_INTEGER;

アクティブなインスタンス番号とインスタンス名のリスト。

instance_tableの索引の開始は1で、instance_tableは稠密です。

lname_array

TYPE lname_array IS TABLE OF VARCHAR2(4000) index by BINARY_INTEGER;

完全修飾属性名を含むlong NAMEのリストは、ここに格納されます。

name_array

TYPE name_array IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;

NAMEのリストは、ここに格納されます。

number_array

TYPE number_array IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;

オブジェクトの生成順序は、ここに戻されます。

uncl_array

TYPE uncl_array IS TABLE OF VARCHAR2(227) INDEX BY BINARY_INTEGER;

"USER"."NAME"."COLUMN"@LINKのリストは、ここに格納されます。

例外

次の表に、DBMS_UTILITYで発生する例外を示します。

表8-2 DBMS_UTILITYで発生する例外

例外

エラー・コード

説明

INV_NOT_EXIST_OR_NO_PRIV

-24237

object_id引数がNULLまたは無効な値の場合、あるいは無効化されているオブジェクトのCREATE権限をコール元が持っていない場合に、INVALIDATEサブプログラムによって発行されます。

INV_MALFORMED_SETTINGS

-24238

コンパイラの設定がp_plsql_object_settingsパラメータで複数回指定された場合に、INVALIDATEサブプログラムによって発行されます。

INV_RESTRICTED_OBJECT

-24239

p_object_idパラメータに関連する条件の様々な組合せが互いに矛盾する場合に、INVALIDATEサブプログラムによって発行されます。

DBMS_UTILITYサブプログラムの要約

表8-3 DBMS_UTILITYパッケージのサブプログラム

サブプログラム

説明

CANONICALIZEプロシージャ

指定した文字列を正規化します。

COMMA_TO_TABLEプロシージャ

カンマで区切られた名前のリストを、名前のPL/SQL表に変換します。

COMPILE_SCHEMAプロシージャ

指定したスキーマ内にあるすべてのプロシージャ、ファンクション、パッケージおよびビューをコンパイルします。

DB_VERSIONプロシージャ

データベースに関するバージョン情報を戻します。

TimesTenはシステム・パラメータCOMPATIBLEをサポートしていないため、互換性設定にNULLを戻します。

FORMAT_CALL_STACKファンクション

現行のコール・スタックをフォーマットします。

FORMAT_ERROR_BACKTRACEファンクション

現行のエラーのポイントから、エラーが捕捉された例外ハンドラまでのバックトレースをフォーマットします。

FORMAT_ERROR_STACKファンクション

現行のエラー・スタックをフォーマットします。

GET_CPU_TIMEファンクション

現在のCPU時間を100分の1秒単位で戻します。

GET_DEPENDENCYプロシージャ

渡されたオブジェクトの依存関係を示します。

GET_ENDIANNESSファンクション

データベース・プラットフォームのエンディアンを戻します。

GET_HASH_VALUEファンクション

指定した文字列についてハッシュ値を計算します。

GET_SQL_HASHファンクション

MD5アルゴリズムを使用して、指定した文字列についてハッシュ値を計算します。

GET_TIMEファンクション

現在の時間を100分の1秒単位で検出します。

INVALIDATEプロシージャ

データベース・オブジェクトを無効化し、オプションでそのPL/SQLコンパイラのパラメータ設定を変更します。

IS_BIT_SETファンクション

RAW値の指定したビットの設定をチェックします。

NAME_RESOLVEプロシージャ

指定されたフォームの名前を解決します。

[[a.]b.]c[@dblink]

a、bおよびcはSQL識別子で、dblinkはdblinkです。

重要: @dblinkは使用しないでください。TimesTenは、データベース・リンクをサポートしていません。

NAME_TOKENIZEプロシージャ

指定した名前を解析するパーサーをコールします。

'a[.b[.c]][@dblink]"

a、bおよびcはSQL識別子で、dblinkはdblinkです。二重引用符を削除するか、または引用符がない場合は大文字に変換します。コメントは無視し、意味的な分析は行いません。不明な値はNULLになります。

重要: @dblinkは使用しないでください。TimesTenは、データベース・リンクをサポートしていません。

TABLE_TO_COMMAプロシージャ

名前のPL/SQL表を、カンマで区切られた名前のリストに変換します。

VALIDATEプロシージャ

所有者、名前および名前空間、またはオブジェクトIDで記述されたオブジェクトを検証します。

CANONICALIZEプロシージャ

このプロシージャは、指定した文字列を正規化します。このプロシージャは単一の予約語またはキーワード("table"など)を処理し、単一の識別子の空白を取り除きます。たとえば、" table"はTABLEになります。

構文

DBMS_UTILITY.CANONICALIZE(
name           IN    VARCHAR2,
canon_name     OUT   VARCHAR2,
canon_len      IN    BINARY_INTEGER);

パラメータ

表8-4 CANONICALIZEプロシージャのパラメータ

パラメータ

説明

name

正規化する文字列

canon_name

正規化された文字

canon_len

正規化する文字列の長さ(バイト単位)

戻り値

canon_nameの先頭のcanon_lenバイト

使用上の注意

- name値がNULLの場合、canon_name値はNULLになります。

- nameがドット付きの名前(a."b".cなど)の場合、ドット付きの名前の各要素の中に二重引用符で囲まれている要素があると、このコンポーネントに対する変換は行われません。かわりに、NLS_UPPERによって大文字に変換し、この要素の大文字の形式を二重引用符で囲みます。そのような場合、正規化された各要素は、"."で区切られて、入力位置に連結されます。

- nameがドットの付いた名前でない場合、およびnameが二重引用符で囲まれている場合、二重引用符を削除します。または、NLS_UPPERで大文字に変換します。この例には、スペースなどの特殊文字が使用されていても、二重引用符で囲まれていない名前は含まれません。

- a[.b]*の後の他の文字は無視されます。

- このプロシージャでは、'A B'のような例は処理されません。

例

- aはAに変換されます。

- "a"はaに変換されます。

- "a".bは"a"."B"に変換されます。

- "a".b,c.fは"a"."B"に変換され、",c.f"が無視されます。

COMMA_TO_TABLEプロシージャ

このプロシージャは、名前のカンマ区切りリストを名前のPL/SQL表に変換します。2番目のバージョンでは、完全修飾属性名をサポートしています。

構文

DBMS_UTILITY.COMMA_TO_TABLE (
list   IN  VARCHAR2,
tablen OUT BINARY_INTEGER,
tab    OUT dbms_utility.uncl_array);

DBMS_UTILITY.COMMA_TO_TABLE (
list   IN  VARCHAR2,
tablen OUT BINARY_INTEGER,
tab    OUT dbms_utility.lname_array);

パラメータ

表8-5 COMMA_TO_TABLEプロシージャのパラメータ

パラメータ

説明

list

名前のカンマ区切りリストで、名前には1番目のバージョンのプロシージャについて次の形式が必要です。

a[.b[.c]][@d]

または、2番目のプロシージャの場合は、次の形式となります。

a[.b]*

a、b、cおよびdは、単純な識別子です(引用符あり、または引用符なし)。

tablen

PL/SQL表にある表の数。

tab

名前のリストを含むPL/SQL表

戻り値

値1..nを持つPL/SQL表(n+1はNULL)

使用上の注意

listは、空ではないカンマで区切られたリストであることが必要です。カンマ区切りのリスト以外の場合は拒否されます。二重引用符内のカンマは無視されます。

カンマで区切られたリストに、マルチバイト・キャラクタを含めることはできません。

tabにある値は、変換されずに元のリストからコピーされます。

COMPILE_SCHEMAプロシージャ

このプロシージャは、指定したスキーマ内にあるすべてのプロシージャ、ファンクション、パッケージおよびビューをコンパイルします。

構文

DBMS_UTILITY.COMPILE_SCHEMA (
schema          IN VARCHAR2,
compile_all     IN BOOLEAN DEFAULT TRUE,
reuse_settings  IN BOOLEAN DEFAULT FALSE);

パラメータ

表8-6 COMPILE_SCHEMAプロシージャのパラメータ

パラメータ

説明

schema

スキーマの名前。

compile_all

ステータスがVALIDであるかどうかに関係なく、スキーマ内のすべてをコンパイルするには、TRUE

ステータスがINVALIDのオブジェクトのみをコンパイルするには、FALSE

reuse_settings

オブジェクトのセッション設定を再利用するかどうか、または現在のセッション設定を採用するかどうかを指定するフラグ

使用上の注意

- このサブプログラムは、UTL_RECOMPパッケージのRECOMP_SERIALプロシージャのラッパーであることに注意してください。

- このプロシージャのコール後、ステータスがINVALIDの項目をビューALL_OBJECTSから選択して、すべてのオブジェクトが正常にコンパイルされたかどうかを調べます。

- ttIsqlのshow errorsコマンドを使用すると、無効なオブジェクトに関連するエラーを表示できます。

Command> show errors [{FUNCTION | PROCEDURE | PACKAGE | PACKAGE BODY}
[schema.]name];

例:

Command> show errors function foo;
Command> show errors procedure fred.bar;
Command> show errors package body emp_actions;

例外

表8-7 COMPILE_SCHEMAプロシージャの例外

例外

説明

ORA-20000

このスキーマ内のいずれかのオブジェクトに対する権限が不十分な場合に発生します。

ORA-20001

SYSオブジェクトをコンパイルできない場合に発生します。

ORA-20002

最大反復数を超える場合に発生します。一部のオブジェクトが再コンパイルされていない可能性があります。

DB_VERSIONプロシージャ

このプロシージャは、データベースに関するバージョン情報を戻します。

TimesTenはシステム・パラメータCOMPATIBLEをサポートしていないため、互換性設定にNULLを戻します。

第9章「TT_DB_VERSION」も参照してください。

構文

DBMS_UTILITY.DB_VERSION (
version       OUT VARCHAR2,
compatibility OUT VARCHAR2);

パラメータ

表8-8 DB_VERSIONプロシージャ・パラメータ

パラメータ

説明

version

データベースの内部ソフトウェア・バージョンを表す文字列(例: 11.2.2.1.0)

この文字列の長さは可変なので、データベース・バージョンによって決定されます。

compatibility

データベースの互換性設定

TimesTenの場合、システム・パラメータCOMPATIBLEをサポートしていないため、DB_VERSIONは互換性設定でNULLを戻します。

FORMAT_CALL_STACKファンクション

このファンクションは、現行のコール・スタックをフォーマットします。これは、任意のストアド・プロシージャを使用してコール・スタックにアクセスでき、デバッグに役立ちます。

構文

DBMS_UTILITY.FORMAT_CALL_STACK
RETURN VARCHAR2;

戻り値

最大2000バイトまでのコール・スタック

FORMAT_ERROR_BACKTRACEファンクション

このプロシージャは、有効範囲外の例外ハンドラからコールされた場合でも、例外が発生したポイントのコール・スタックを表示します。出力は、SQLERRMファンクションの出力と似ていますが、サイズ制限が異なります。

構文

DBMS_UTILITY.FORMAT_ERROR_BACKTRACE
RETURN VARCHAR2;

戻り値

バックトレース文字列(または現在処理中のエラーがない場合はnull文字列)

例

スクリプトformat_error_backtrace.sql:

runコマンドを使用して、ttIsqlから次のスクリプトを実行します。

CREATE OR REPLACE PROCEDURE Log_Errors ( i_buff in varchar2 ) IS
g_start_pos integer := 1;
g_end_pos  integer;

FUNCTION Output_One_Line RETURN BOOLEAN IS
BEGIN
g_end_pos := Instr ( i_buff, Chr(10), g_start_pos );

CASE g_end_pos > 0
WHEN true THEN
DBMS_OUTPUT.PUT_LINE ( Substr ( i_buff, g_start_pos,
g_end_pos-g_start_pos ) );
g_start_pos := g_end_pos+1;
RETURN TRUE;

WHEN FALSE THEN
DBMS_OUTPUT.PUT_LINE ( Substr ( i_buff, g_start_pos,
(Length(i_buff)-g_start_pos)+1 ) );
RETURN FALSE;
END CASE;
END Output_One_Line;

BEGIN
WHILE Output_One_Line() LOOP NULL;
END LOOP;
END Log_Errors;
/

-- Define and raise an exception to view backtrace.
-- See "EXCEPTION_INIT Pragma" in Oracle Database PL/SQL Language Reference.

CREATE OR REPLACE PROCEDURE P0 IS
e_01476 EXCEPTION; pragma exception_init ( e_01476, -1476 );
BEGIN
RAISE e_01476;
END P0;
/
Show Errors

CREATE OR REPLACE PROCEDURE P1 IS
BEGIN
P0();
END P1;
/
SHOW ERRORS

CREATE OR REPLACE PROCEDURE P2 IS
BEGIN
P1();
END P2;
/
SHOW ERRORS

CREATE OR REPLACE PROCEDURE P3 IS
BEGIN
P2();
END P3;
/
SHOW ERRORS

CREATE OR REPLACE PROCEDURE P4 IS
BEGIN
P3();
END P4;
/
CREATE OR REPLACE PROCEDURE P5 IS
BEGIN
P4();
END P5;
/
SHOW ERRORS

CREATE OR REPLACE PROCEDURE Top_Naive IS
BEGIN
P5();
END Top_Naive;
/
SHOW ERRORS

CREATE OR REPLACE PROCEDURE Top_With_Logging IS
-- NOTE: SqlErrm in principle gives the same info as Format_Error_Stack.
-- But SqlErrm is subject to some length limits,
-- while Format_Error_Stack is not.

BEGIN
P5();
EXCEPTION
WHEN OTHERS THEN
Log_Errors ( 'Error_Stack...' || Chr(10) ||
DBMS_UTILITY.FORMAT_ERROR_STACK() );
Log_Errors ( 'Error_Backtrace...' || Chr(10) ||
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE() );
DBMS_OUTPUT.PUT_LINE ( '----------' );
END Top_With_Logging;
/
SHOW ERRORS

Top_Naiveの実行:

これは、スクリプトで作成されたTop_Naiveプロシージャの実行結果を示しており、ユーザーSCOTTがスクリプトを実行してから、プロシージャを実行したと想定しています。

Command> set serveroutput on
Command> begin
> Top_Naive();
> end;
> /
8507: ORA-01476: divisor is equal to zero
8507: ORA-06512: at "SCOTT.P0", line 4
8507: ORA-06512: at "SCOTT.P1", line 3
8507: ORA-06512: at "SCOTT.P2", line 3
8507: ORA-06512: at "SCOTT.P3", line 3
8507: ORA-06512: at "SCOTT.P4", line 3
8507: ORA-06512: at "SCOTT.P5", line 3
8507: ORA-06512: at "SCOTT.TOP_NAIVE", line 3
8507: ORA-06512: at line 2
The command failed.

この出力は、例外が発生したポイントのコール・スタックを示しています。これは、SCOTT.P0の行4で発生した未処理の例外ORA-01476で始まり、SCOTT.Top_Naiveの行3に戻される、展開済のコール・スタックとしてのバックトレース・エラー・メッセージを示しています。

Top_With_Loggingの実行:

これは、スクリプトで作成されたTop_With_Logging()プロシージャの実行結果を示しており、ユーザーSCOTTがスクリプトを実行してから、プロシージャを実行したと想定しています。

Command> begin
> Top_With_Logging();
> end;
> /
Error_Stack...
ORA-01476: divisor is equal to zero
Error_Backtrace...
ORA-06512: at "SCOTT.P0", line 4
ORA-06512: at "SCOTT.P1", line 3
ORA-06512: at "SCOTT.P2", line 3
ORA-06512: at "SCOTT.P3", line 3
ORA-06512: at "SCOTT.P4", line 3
ORA-06512: at "SCOTT.P5", line 3
ORA-06512: at "SCOTT.TOP_WITH_LOGGING", line 6
----------

PL/SQL procedure successfully completed.

この出力は、例外が発生したポイントのコール・スタックを示しています。これは、SCOTT.P0の行4で発生した未処理の例外ORA-01476で始まり、SCOTT.Top_With_Loggingの行6に戻される、展開済のコール・スタックとしてのバックトレース・エラー・メッセージを示しています。

ORA-06512の情報:

『Oracle Databaseエラー・メッセージ』では、ORA-06512エラーについて次の情報が示されています。

ORA-06512: at stringline string
Cause: Backtrace message as the stack is unwound by unhandled exceptions.
Action: Fix the problem causing the exception or write an exception handler
for this condition. Or you may need to contact your application administrator or
DBA.

FORMAT_ERROR_STACKファンクション

このファンクションは、現行のエラー・スタックをフォーマットします。これは、全エラー・スタックを表示するための例外ハンドラで使用できます。

構文

DBMS_UTILITY.FORMAT_ERROR_STACK
RETURN VARCHAR2;

戻り値

最大2000バイトのエラー・スタック(または現在処理中のエラーがない場合はnull文字列)

GET_CPU_TIMEファンクション

このファンクションは、現在のCPU処理時間の測定値を100分の1秒単位で戻します。2つのコールから戻される時間の差では、(合計経過時間ではなく)2つのポイント間のCPUの処理時間が測定されます。

別の目的がある「GET_TIMEファンクション」も参照してください。

構文

DBMS_UTILITY.GET_CPU_TIME
RETURN NUMBER;

戻り値

任意のポイントからのCPU処理時間(100分の1秒単位)

使用上の注意

このサブプログラムは、作業の実行に使用されるサイクル(CPU時間)をレポートするもので、クロック時間またはその他の固定参照とは無関係です。常に正の値が戻されます。実行された作業の量は、各ポイントでGET_CPU_TIMEコールを使用して、特定の操作の開始ポイントと終了ポイントの差分を測定することによって計算されます。

GET_DEPENDENCYプロシージャ

このプロシージャは、渡されたオブジェクトの依存関係を示します。

構文

DBMS_UTILITY.GET_DEPENDENCY
type      IN     VARCHAR2,
schema    IN     VARCHAR2,
name      IN     VARCHAR2);

パラメータ

表8-9 GET_DEPENDENCYプロシージャのパラメータ

パラメータ

説明

type

オブジェクトのタイプ。

たとえば、オブジェクトが表の場合は、タイプを"TABLE"と指定します。

schema

オブジェクトのスキーマ名

name

オブジェクトの名前。

使用上の注意

このプロシージャは、DBMS_OUTPUTパッケージを使用して結果を表示するため、依存性を表示する場合は、ttIsqlからSET SERVEROUTPUT ONを宣言する必要があります。また、DBMS_OUTPUT出力バッファをチェックするアプリケーションでこのサブプログラムを起動し、GET_LINESなどのDBMS_OUTPUTサブプログラムを使用して出力を取得することもできます。

GET_ENDIANNESSファンクション

このファンクションは、データベース・プラットフォームのエンディアンを示します。

構文

DBMS_UTILITY.GET_ENDIANNESS
RETURN NUMBER;

戻り値

データベース・プラットフォームのエンディアンを示すNUMBER値(big-endianの場合は1、little-endianの場合は2)

GET_HASH_VALUEファンクション

このファンクションは、指定した文字列についてハッシュ値を計算します。

構文

DBMS_UTILITY.GET_HASH_VALUE (
name      IN  VARCHAR2,
base      IN  NUMBER,
hash_size IN  NUMBER)
RETURN NUMBER;

パラメータ

表8-10 GET_HASH_VALUEファンクションのパラメータ

パラメータ

説明

name

ハッシュする文字列。

base

戻されるハッシュ値が始まるベース値

hash_size

必要とするハッシュ表のサイズ。

戻り値

入力文字列に基づくハッシュ値

たとえば、ハッシュ値が1000から3047の範囲にある文字列についてハッシュ値を取得するには、ベース値として1000、hash_size値として2048を使用します。hash_sizeに2の累乗を使用すると動作が最適になります。

GET_SQL_HASHファンクション

このファンクションは、MD5アルゴリズムを使用して、指定した文字列についてハッシュ値を計算します。

構文

DBMS_UTILITY.GET_SQL_HASH (
name          IN   VARCHAR2
[,hash          OUT  RAW,
pre10ihash    OUT  NUMBER])
RETURN NUMBER;

パラメータ

表8-11 GET_SQL_HASHプロシージャのパラメータ

パラメータ

説明

name

ハッシュする文字列。

hash

戻されるハッシュ値の16バイトすべてを格納するフィールド(オプション)

pre10ihash

10gより前のOracle Databaseバージョンのハッシュ値を格納するフィールド(オプション)

戻り値

入力文字列に基づくハッシュ値(最後の4バイト)

MD5ハッシュ・アルゴリズムでは16バイトのハッシュ値が計算されますが、TimesTenは実際の数値を戻すことができるように最後の4バイトのみを戻します。オプションのRAWパラメータを使用し、16バイトすべてを取得して、Oracle Database 10gより前の4バイトのハッシュ値をオプションのpre10ihashパラメータに格納できます。

GET_TIMEファンクション

このファンクションは、現在の時間の測定値を100分の1秒単位で戻します。2つのコールから戻される時間の差では、(CPU処理時間のみではなく)2つのポイント間の合計経過時間が測定されます。

別の目的がある「GET_CPU_TIMEファンクション」も参照してください。

構文

DBMS_UTILITY.GET_TIME
RETURN NUMBER;

戻り値

サブプログラムが起動された時点からの時間(100分の1秒単位)。

使用上の注意

プラットフォームおよびシステムに応じて、-2,147,483,648から2,147,483,647の範囲の数が戻されるため、アプリケーションによる間隔の判別では、数に付加される記号(マイナス記号)を考慮する必要があります。たとえば2つの数が負である場合、アプリケーション・ロジックで、1つ目の(先の)数が、よりゼロに近い2つ目の(後の)数よりも大きいことが許可される必要があります。同様に、アプリケーションでは、1つ目の(先の)数が負で2つ目の(後の)数が正であることも許可される必要があります。

INVALIDATEプロシージャ

このプロシージャは、データベース・オブジェクトを無効化し、オプションでそのPL/SQLコンパイラのパラメータ設定を変更します。また、無効化されるオブジェクトに直接的または間接的に依存するすべてのオブジェクトも無効化します。

構文

DBMS_UTILITY.INVALIDATE (
p_object_id              IN  NUMBER
[,p_plsql_object_settings  IN  VARCHAR2 DEFAULT NULL,
p_option_flags           BINARY_INTEGER DEFAULT 0]);

パラメータ

表8-12 INVALIDATEプロシージャのパラメータ

パラメータ

説明

p_object_id

無効化するオブジェクトのID番号

これは、ALL_OBJECTSのOBJECT_ID列の値と同じです。p_object_id引数がNULLまたは無効な値の場合は、例外inv_not_exist_or_no_privが発生します。このプロシージャのコール元は、無効化されるオブジェクトのCREATE権限を持っている必要があり、そうでない場合は、例外inv_not_exist_or_no_privが発生します。

p_plsql_object_settings

p_object_idで指定されたオブジェクトがPL/SQLオブジェクトでない場合、無視されるこのオプションのパラメータ

このパラメータに値を指定しないと、PL/SQLコンパイラの設定は変更されず、REUSE SETTINGSと同じになります。値を指定した場合は、1つ以上の空白で区切られたPL/SQLコンパイラ設定の値を指定する必要があります。設定が複数回指定された場合は、例外inv_malformed_settingsが発生します。設定値は、p_object_idで指定したオブジェクトに関してのみ変更され、無効化されている可能性のある依存オブジェクトには影響しません。設定名および設定値では、大/小文字は区別されません。設定を省略し、REUSE SETTINGSを指定した場合、このライブラリ・ユニットの以前のコンパイルでのコンパイラ設定で値が指定されていると、TimesTenは以前の値を使用します。設定を省略し、REUSE SETTINGSを指定しなかったか、または以前のコンパイルでパラメータを指定していなかった場合、データベースはセッション環境からこの設定のための値を取得します。

p_option_flags

デフォルト値がゼロ(フラグなし)のオプション・パラメータ

inv_error_on_restrictionsフラグのみがサポートされています(「定数」を参照してください)。このフラグでは、サブプログラムによって無効化が可能なオブジェクトに様々な制限が課せられます。たとえば、p_object_idによって指定されたオブジェクトは表にできません。デフォルトでは、これらの条件に対してINVALIDATEが暗黙的に戻されます(例外は発生しません)。コール元がこのフラグを設定した場合は、例外inv_restricted_objectが発生します。

使用上の注意

p_object_idによって指定されるオブジェクトのオブジェクト・タイプ(ALL_OBJECTSのobject_type列)は、PROCEDURE、FUNCTION、PACKAGE、PACKAGE BODY、LIBRARY、OPERATORまたはSYNONYMである必要があります。オブジェクトがこれらのタイプのいずれでもなく、p_option_flagsにフラグinv_error_on_restrictionsが指定されている場合は、例外inv_restricted_objectが発生します。このような状況でinv_error_on_restrictionsが指定されていない場合、何も実行されません。

p_object_idによって指定されるオブジェクトがSTANDARDのパッケージ仕様部、DBMS_STANDARDのパッケージ仕様部、あるいはDBMS_UTILITYのパッケージ仕様部または本体であり、p_option_flagsにフラグinv_error_on_restrictionsが指定されている場合は、例外inv_restricted_objectが発生します。このような状況でinv_error_on_restrictionsが指定されていない場合、何も実行されません。

p_object_idによって指定されるオブジェクトがオブジェクト・タイプ仕様部であり、そのタイプに依存する表が存在し、p_option_flagsにフラグinv_error_on_restrictionsが指定されている場合は、例外inv_restricted_objectが発生します。inv_error_on_restrictionsが指定されていない場合は、何も実行されません。

例外

表8-13 INVALIDATEの例外

例外

説明

INV_NOT_EXIST_OR_NO_PRIV

object_id引数がNULLまたは無効な値の場合、あるいは無効化されているオブジェクトのCREATE権限をコール元が持っていない場合に発生します。

INV_MALFORMED_SETTINGS

コンパイラの設定がp_plsql_object_settingsパラメータで複数回指定された場合に発生します。

INV_RESTRICTED_OBJECT

p_object_idパラメータに関連する条件の様々な組合せが互いに矛盾する場合に発生します。

例

この例は、「FORMAT_ERROR_BACKTRACEファンクション」の例で作成したプロシージャを無効化します。user_objectsを調べると、その例で作成されたプロシージャの情報を確認できます。次はuser_objectsを示しており、その内容を問い合せています。

Command> describe user_objects;

View SYS.USER_OBJECTS:
Columns:
OBJECT_NAME                     VARCHAR2 (30) INLINE
SUBOBJECT_NAME                  VARCHAR2 (30) INLINE
OBJECT_ID                       TT_BIGINT NOT NULL
DATA_OBJECT_ID                  TT_BIGINT
OBJECT_TYPE                     VARCHAR2 (17) INLINE NOT NULL
CREATED                         DATE NOT NULL
LAST_DDL_TIME                   DATE NOT NULL
TIMESTAMP                       VARCHAR2 (78) INLINE NOT NULL
STATUS                          VARCHAR2 (7) INLINE NOT NULL
TEMPORARY                       VARCHAR2 (1) INLINE NOT NULL
GENERATED                       VARCHAR2 (1) INLINE NOT NULL
SECONDARY                       VARCHAR2 (1) INLINE NOT NULL
NAMESPACE                       TT_INTEGER NOT NULL
EDITION_NAME                    VARCHAR2 (30) INLINE

1 view found.

Command> select * from user_objects;
...
< LOG_ERRORS, <NULL>, 296, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09-18 12
:58:22, 2009-09-18:12:58:22, VALID, N, N, N, 1, <NULL> >
< P0, <NULL>, 297, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09-18 12:58:22,
2009-09-18:12:58:22, VALID, N, N, N, 1, <NULL> >
< P1, <NULL>, 298, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09-18 12:58:22,
2009-09-18:12:58:22, VALID, N, N, N, 1, <NULL> >
< P2, <NULL>, 299, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09-18 12:58:22,
2009-09-18:12:58:22, VALID, N, N, N, 1, <NULL> >
< P3, <NULL>, 300, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09-18 12:58:22,
2009-09-18:12:58:22, VALID, N, N, N, 1, <NULL> >
< P4, <NULL>, 301, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09-18 12:58:22,
2009-09-18:12:58:22, VALID, N, N, N, 1, <NULL> >
< P5, <NULL>, 302, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09-18 12:58:22,
2009-09-18:12:58:22, VALID, N, N, N, 1, <NULL> >
< TOP_NAIVE, <NULL>, 303, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09-18 12:
58:22, 2009-09-18:12:58:22, VALID, N, N, N, 1, <NULL> >
< TOP_WITH_LOGGING, <NULL>, 304, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09
-18 15:19:16, 2009-09-18:15:19:16, VALID, N, N, N, 1, <NULL> >
...
20 rows found.

たとえば、P5プロシージャを無効化するには、INVALIDATEコールでobject_id 302を指定します。

Command> begin
> dbms_utility.invalidate(302, 'PLSQL_OPTIMIZE_LEVEL=2 REUSE SETTINGS');
> end;
> /

これは、P5プロシージャを無効とマーク付けし、そのPLSQL_OPTIMIZE_LEVELコンパイラ設定に2を設定します。REUSE SETTINGSが指定されているため、他のコンパイラ設定の値は変更されません。P5が無効化されることに加え、そのオブジェクトを参照するPL/SQLオブジェクトも無効化されます。Top_With_LoggingおよびTop_NaiveがP5をコールすると仮定すると、INVALIDATEコールの結果は次のようになり、現在無効なすべてのユーザー・オブジェクトを問い合せます。

Command> select * from user_objects where status='INVALID';
< P5, <NULL>, 302, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09-18 12:58:22,
2009-09-18:12:58:22, INVALID, N, N, N, 1, <NULL> >
< TOP_NAIVE, <NULL>, 303, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09-18 12:
58:22, 2009-09-18:12:58:22, INVALID, N, N, N, 1, <NULL> >
< TOP_WITH_LOGGING, <NULL>, 304, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09
-18 15:19:16, 2009-09-18:15:19:16, INVALID, N, N, N, 1, <NULL> >
3 rows found.

ユーザーは、この章の後半で説明するVALIDATEプロシージャをコールするか、必要に応じて、オブジェクトに対してALTER PROCEDURE、ALTER FUNCTIONまたはALTER PACKAGEを実行して、明示的にオブジェクトを再コンパイルおよび再検証できます。また、各オブジェクトは、次に実行されるときに自動的に再コンパイルおよび再検証されます。

IS_BIT_SETファンクション

このファンクションは、指定のRAW値の指定のビットについて、ビット設定をチェックします。

構文

DBMS_UTILITY.IS_BIT_SET (
r       IN RAW,
n       IN NUMBER)
RETURN NUMBER;

パラメータ

表8-14 IS_BIT_SETプロシージャのパラメータ

パラメータ

説明

r

ソースRAW

n

チェックするrのビット

戻り値

RAW rのビットnが設定されている場合は1(ここでビットは昇順で番号付けされており、最小のビット番号は1)

NAME_RESOLVEプロシージャ

このプロシージャは、指定したフォームの名前を解決します。

[[a.]b.]c[@dblink]

a、bおよびcはSQL識別子、dblinkはdblinkであり、必要に応じてシノニム変換と認可チェックが含まれます。

@dblinkは使用しないでください。TimesTenは、データベース・リンクをサポートしていません。

構文

DBMS_UTILITY.NAME_RESOLVE (
name          IN  VARCHAR2,
context       IN  NUMBER,
schema        OUT VARCHAR2,
part1         OUT VARCHAR2,
part2         OUT VARCHAR2,
dblink        OUT VARCHAR2,
part1_type    OUT NUMBER,
object_number OUT NUMBER);

パラメータ

表8-15 NAME_RESOLVEプロシージャのパラメータ

パラメータ

説明

name

オブジェクト名。

これはフォームで指定します。

[[a.]b.]c[@dblink]

a、bおよびcはSQL識別子で、dblinkはdblinkです。TimesTenはdblinkをサポートしません。dblinkでは、構文チェックは実行されません。dblinkが指定されている場合や名前がdblinkの一部に変換される場合、オブジェクトは解決されませんが、schema、part1、part2およびdblink OUTの各パラメータには値が入力されます。

a、bおよびcエントリは、デリミタ付き識別子の場合があり、グローバリゼーション・サポート(NLS)文字(シングルおよびマルチバイト)を含む場合があります。

context

次の0から9の整数

- 0 - 表

- 1 - PL/SQL(2つの部分の名前の場合)

- 2 - 順序

- 3 - トリガー(TimesTenには適用されない)

- 4 - Javaソース(TimesTenには適用されない)

- 5 - Javaリソース(TimesTenには適用されない)

- 6 - Javaクラス(TimesTenには適用されない)

- 7 - タイプ(TimesTenには適用されない)

- 8 - Java共有データ(TimesTenには適用されない)

- 9 - 索引

schema

オブジェクトのスキーマ、c

nameにスキーマが指定されていない場合、schemaは、名前を解決することによって決定されます。

part1

名前の最初の部分

この名前のタイプは、part1_typeに指定されます(シノニムまたはパッケージ)。

part2

サブプログラム名(適切な場合)またはNULL。

part1がnull以外の場合、このサブプログラムはpart1が示すパッケージ内に配置されます。part1がnullの場合、このサブプログラムはトップ・レベルのサブプログラムになります。

dblink

なし

TimesTenは、データベース・リンクをサポートしていません。

part1_type

次のpart1のタイプ

- 5 - シノニム

- 7 - プロシージャ(トップレベル)

- 8 - ファンクション(トップレベル)

- 9 - パッケージ

object_number

オブジェクト識別子。

例外

すべてのエラーは、例外を呼び出すことによって処理されます。オブジェクト名の指定時に起こり得る各種の構文エラーに基づいて、広範囲にわたる例外が用意されています。

NAME_TOKENIZEプロシージャ

このプロシージャは、次のように入力名を解析するパーサーをコールします。

"a[.b[.c]][@dblink]"

a、bおよびcはSQL識別子で、dblinkはdblinkです。二重引用符を削除するか、または引用符がない場合は大文字に変換します。ソートに関するすべてのコメントは無視し、意味的な分析は行いません。不明な値はNULLのまま残ります。

@dblinkは使用しないでください。TimesTenは、データベース・リンクをサポートしていません。

構文

DBMS_UTILITY.NAME_TOKENIZE (
name    IN  VARCHAR2,
a       OUT VARCHAR2,
b       OUT VARCHAR2,
c       OUT VARCHAR2,
dblink  OUT VARCHAR2,
nextpos OUT BINARY_INTEGER);

パラメータ

表8-16 NAME_TOKENIZEプロシージャのパラメータ

パラメータ

説明

name

SQL識別子で構成される入力名(scott.fooなど)

a

名前の1番目のトークンに対応する出力。

b

名前の2番目のトークンに対応する出力(該当する場合)。

c

名前の3番目のトークンに対応する出力(該当する場合)。

dblink

名前のdblinkに対応する出力(TimesTenにはありません)

nextpos

入力名解析後の次の位置。

例

ttIsqlで次のスクリプトを実行することを検討します。

declare
a varchar2(30);
b varchar2(30);
c varchar2(30);
d varchar2(30);
next integer;

begin
dbms_utility.name_tokenize('scott.foo', a, b, c, d, next);
dbms_output.put_line('a: ' || a);
dbms_output.put_line('b: ' || b);
dbms_output.put_line('c: ' || c);
dbms_output.put_line('d: ' || d);
dbms_output.put_line('next: ' || next);
end;
/

次の出力が生成されます。

a: SCOTT
b: FOO
c:
d:
next: 9

PL/SQL procedure successfully completed.

TABLE_TO_COMMAプロシージャ

このプロシージャは、名前のPL/SQL表を名前のカンマ区切りリストに変換します。PL/SQL表を1..nに変換し、n+1をNULLにして終了します。2番目のバージョンでは、完全修飾属性名をサポートしています。

構文

DBMS_UTILITY.TABLE_TO_COMMA (
tab    IN  dbms_utility.uncl_array,
tablen OUT BINARY_INTEGER,
list   OUT VARCHAR2);

DBMS_UTILITY.TABLE_TO_COMMA (
tab    IN  dbms_utility.lname_array,
tablen OUT BINARY_INTEGER,
list   OUT VARCHAR2);

パラメータ

表8-17 TABLE_TO_COMMAプロシージャのパラメータ

パラメータ

説明

tab

表名のリストを含むPL/SQL表

tablen

PL/SQL表にある表の数。

list

表のカンマ区切りリスト

戻り値

カンマ区切りリストのVARCHAR2値と、表で検出された要素の数

VALIDATEプロシージャ

所有者、名前および名前空間、またはオブジェクトIDで記述されたオブジェクトを検証します。

構文

DBMS_UTILITY.VALIDATE(
object_id     IN  NUMBER);

DBMS_UTILITY.VALIDATE(
owner          IN  VARCHAR2,
objname        IN  VARCHAR2,
namespace      NUMBER,
edition_name   VARCHAR2 := NULL;

パラメータ

表8-18 VALIDATEプロシージャのパラメータ

パラメータ

説明

object_id

有効化するオブジェクトのID番号

オブジェクトIDの詳細は、「INVALIDATEプロシージャ」を参照してください。

owner

オブジェクトを所有するユーザーの名前

ALL_OBJECTSのOWNERフィールドと同じです。

objname

検証するオブジェクトの名前

ALL_OBJECTSのOBJECT_NAMEフィールドと同じです。

namespace

オブジェクトのネームスペース

obj$のnamespaceフィールドと同じです。同等の数値は次のとおりです。

- 1 - 表またはプロシージャ

- 2 - 本文

- 3 - トリガー(TimesTenには適用されない)

- 4 - 索引

- 5 - クラスタ

- 9 - ディレクトリ

- 10 - キュー

- 11 - レプリケーション・オブジェクト・グループ

- 12 - レプリケーション・プロパゲータ

- 13 - Javaソース(TimesTenには適用されない)

- 14 - Javaリソース(TimesTenには適用されない)

- 58 - モデル(データ・マイニング)

edition_name

予約済

使用上の注意

- サブプログラムでVALIDATEを実行すると、そのサブプログラムが参照しているサブプログラムも検証されます。(次の例を参照。)

- オブジェクトが、存在しないか、すでに有効か、検証不可能な場合、エラーは発生しません。

- INVALIDATEプロシージャはデータベース・オブジェクトを無効化し、オプションでそのPL/SQLコンパイラのパラメータ設定を変更します。無効化するオブジェクトはそのobject_id値で指定します。

例

この例は、「INVALIDATEプロシージャ」のINVALIDATE例の続きです。次に示すように、P5、Top_NaiveおよびTop_With_Loggingが無効化されています。

Command> select * from user_objects where status='INVALID';
< P5, <NULL>, 302, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09-18 12:58:22,
2009-09-18:12:58:22, INVALID, N, N, N, 1, <NULL> >
< TOP_NAIVE, <NULL>, 303, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09-18 12:
58:22, 2009-09-18:12:58:22, INVALID, N, N, N, 1, <NULL> >
< TOP_WITH_LOGGING, <NULL>, 304, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09
-18 15:19:16, 2009-09-18:15:19:16, INVALID, N, N, N, 1, <NULL> >
3 rows found.

たとえば、Top_With_LoggingはP5をコールするため、これを検証するとP5も検証されます(Top_Naiveを無効にしておくだけです)。

Command> begin
> dbms_utility.validate(304);
> end;
> /

PL/SQL procedure successfully completed.

Command> select * from user_objects where status='INVALID';
< TOP_NAIVE, <NULL>, 303, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09-21 11:
14:37, 2009-09-21:11:14:37, INVALID, N, N, N, 1, <NULL> >
1 row found.

9 TT_DB_VERSION

TT_DB_VERSIONパッケージは、TimesTenのバージョン番号を示します。

この章の内容は次のとおりです。

- TT_DB_VERSIONの使用

- 概要

- 定数

- 例

TT_DB_VERSIONの使用

- 概要

- 定数

- 例

概要

TT_DB_VERSIONパッケージには、パッケージが含まれるTimesTenのメジャー・リリースを示すブール変数があります。

TimesTen 11gリリース2(11.2.2)のパッケージは次のとおりです。

PACKAGE TT_DB_VERSION IS
VER_LE_1121 CONSTANT BOOLEAN := FALSE;
VER_LE_1122 CONSTANT BOOLEAN := TRUE;
...
END TT_DB_VERSION;

定数

TT_DB_VERSIONパッケージには、現在のTimesTenリリースを示すブール定数があります。表9-1に、TimesTen 11gリリース2(11.2.2)の場合について示します。

表9-1 TT_DB_VERSIONの定数

名前

タイプ

値

説明

VER_LE_1121

BOOLEAN

FALSE

このパッケージが含まれるTimesTenのバージョンがTimesTen 11.2.1以下の場合、TRUEのブール

VER_LE_1122

BOOLEAN

TRUE

このパッケージが含まれるTimesTenのバージョンがTimesTen 11gリリース2(11.2.2)以下の場合、TRUEのブール

例

条件付きコンパイルにパッケージとTT_DB_VERSIONの両方を使用した例については、「UTL_IDENT」の「例」を参照してください。

10 TT_STATS

TT_STATSパッケージでは、TimesTenデータベース・メトリック(統計、状態およびその他の情報)のスナップショットを収集し、特定の2つのスナップショットを比較してレポートを生成することができます。

この章の内容は次のとおりです。

- TT_STATSの使用

- 概要

- セキュリティ・モデル

- 使用上の注意

- TT_STATSサブプログラムの要約

注意:
また、ttStatsユーティリティ・プログラムもあります。このユーティリティは、TT_STATSパッケージがスナップショットの収集およびレポートの生成を行うための便利なフロントエンドとして機能するとともに、メトリックをリアルタイムに監視できます。詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttStatsに関する説明を参照してください。

TT_STATSの使用

ここでは、TT_STATSパッケージについて次の項目を説明します。

- 概要

- セキュリティ・モデル

- 使用上の注意

概要

TT_STATSパッケージには、TimesTenシステム・メトリックのスナップショットを取得レベルに応じて収集および比較する機能が備えられています。各スナップショットは、TimesTenで基本的なメトリックまたは一般的なメトリックとみなされるもの、あるいは使用可能なすべてのメトリックで構成されます。

生成されるレポートは、Oracle Databaseのパフォーマンス分析ツールに例えた場合、Oracle Automatic Workload Repository (AWR)レポートに類似しています。

このパッケージには、次を実現するためのプロシージャおよびファンクションが含まれています。

- メトリックのスナップショットを取得レベルに応じて取得する。

- メトリックの前後の値またはそれらの値の差異を示すレポートをHTMLまたはプレーン・テキストで生成する。

- 現在格納されているスナップショットのスナップショットIDおよびタイムスタンプを表示する。

- IDまたはタイムスタンプの範囲に基づいてスナップショットを削除する。

- 特定のTT_STATS構成パラメータの値を取得または設定する。

- すべての構成パラメータの値を表示する。

注意:
このリリースでは、格納可能なスナップショットの最大数および最大合計サイズに関する構成パラメータのみがサポートされています。

セキュリティ・モデル

デフォルトでは、インスタンス管理者のみが、TT_STATS PL/SQLパッケージのファンクションまたはプロシージャを実行する権限を持っています。ADMINユーザーを含む他のユーザーは、次の例に示すように、インスタンス管理者またはADMINユーザーによってTT_STATSパッケージに対するEXECUTE権限を付与される必要があります。

GRANT EXECUTE ON SYS.TT_STATS TO scott;

注意:
ADMINユーザーは、デフォルトではパッケージを実行できませんが、自身に権限を付与してパッケージを実行することができます。

使用上の注意

SYS.SYSTEMSTATS表の各メトリックはレベルが指定されており、このレベルに応じて、スナップショットの取得レベルが設定されます。使用可能なレベルは、「NONE」、「BASIC」、「TYPICAL」(ほとんどの場合に適したデフォルト)および「ALL」です。詳細は、「CAPTURE_SNAPSHOTプロシージャおよびファンクション」を参照してください。

ただし、取得レベルはSYS.SYSTEMSTATS表のメトリックにのみ適用されることに注意してください。SYSTEMSTATS以外のメトリックでは、取得レベルに関係なく、同じデータのセットが収集されます。

注意:
ttStatsConfig組込みプロシージャを使用して取得レベルを変更することもできます。『Oracle TimesTen In-Memory Databaseリファレンス』のttStatsConfigに関する説明を参照してください。

スナップショットは、TimesTenの複数のSYS.SNAPSHOT_xxxxxシステム表に格納されます。(これらの表のリストは、『Oracle TimesTen In-Memory Databaseシステム表およびビュー・リファレンス』の内部的な使用または将来の使用のために予約された表またはビューに関する説明を参照してください。) 永続表領域が不足する可能性を最小限にするために、TT_STATSパッケージには、格納できるスナップショットの最大数および格納されるスナップショットの合計サイズを指定するための構成パラメータが含まれます。このリリースでは、いずれかの制限を超えた場合にエラーが発生し、スナップショットの取得に失敗します。TimesTenではデフォルトの制限が指定されていますが、SET_CONFIGプロシージャを使用してこれを変更できます。(「SET_CONFIGプロシージャ」を参照してください。)

このパッケージを実行すると、多数の読取りおよび挿入が行われる場合があるため、パッケージ操作中にデータベースのパフォーマンスが影響を受ける可能性があることに注意してください。

注意:
標準出力に送信される出力(SHOW_SNAPSHOTSプロシージャおよびGET_CONFIGプロシージャのバージョンからの出力など)を表示するには、ttIsqlから次のコマンドを実行します。

set serveroutput on;

TT_STATSサブプログラムの要約

ここでは、TT_STATSパッケージのプロシージャおよびファンクションについて、一覧を示した後、説明します。

表10-1 TT_STATSパッケージのサブプログラム

サブプログラム

説明

CAPTURE_SNAPSHOTプロシージャおよびファンクション

TimesTenメトリックのスナップショットを取得します。また、ファンクションはスナップショットIDも戻します。

DROP_SNAPSHOTS_RANGEプロシージャ

特定の範囲のスナップショットIDまたはタイムスタンプに従ってスナップショットを削除します。

GENERATE_REPORT_HTMLプロシージャ

特定の2つのスナップショットのデータに基づいて、レポートをHTML形式で生成します。

GENERATE_REPORT_TEXTプロシージャ

特定の2つのスナップショットのデータに基づいて、レポートをプレーン・テキスト形式で生成します。

GET_CONFIGプロシージャ

特定のTT_STATS構成パラメータの値またはすべての構成パラメータの値を取得します。

SET_CONFIGプロシージャ

特定のTT_STATS構成パラメータに特定の値を設定します。

SHOW_SNAPSHOTSプロシージャ

データベースに現在格納されているすべてのスナップショットのスナップショットIDおよびタイムスタンプを表示します。

注意:
このリリースでは、永続メモリー・セグメントに格納可能なスナップショットの数および合計サイズを制限するためのTT_STATS構成パラメータのみがサポートされています。

CAPTURE_SNAPSHOTプロシージャおよびファンクション

このプロシージャは、特定の取得レベルに従ってTimesTenメトリックのスナップショットを取得するか、一般的なレベルとみなされるスナップショットをデフォルトで使用します。スナップショットは、TimesTenのSYS.SNAPSHOT_xxxxシステム表に格納されます。

このファンクションは、同様に動作するとともに、スナップショットのID番号も戻します。

注意:

- 後述のように、取得レベルはSYS.SYSTEMSTATSからのメトリックに対してのみ適用されます。

- 格納できるスナップショットの最大数および格納されるすべてのスナップショットの最大合計サイズには、制限が定義されています。新しい値の設定方法など、詳細は、「SET_CONFIGプロシージャ」を参照してください。

構文

TT_STATS.CAPTURE_SNAPSHOT (
capture_level     IN VARCHAR2 DEFAULTED,
description       IN VARCHAR2 DEFAULTED);

TT_STATS.CAPTURE_SNAPSHOT (
capture_level     IN VARCHAR2 DEFAULTED,
description       IN VARCHAR2 DEFAULTED)
RETURN BINARY_INTEGER;

パラメータ

表10-2 CAPTURE_SNAPSHOTプロシージャのパラメータ

パラメータ

説明

capture_level

希望するメトリックの取得レベル

次の選択肢を使用できます。

- NONE: SYS.SYSTEMSTATS以外のメトリックのみ。

- BASIC: 最小限の基本的なセットのメトリック。

- TYPICAL (デフォルト): 一般的なセットのメトリック。このレベルは、ほとんどの場合に適しています。基本的なセットは、一般的なセットのサブセットです。

- ALL: 使用可能なすべてのメトリック。

レポートで任意の2つのスナップショットを使用する場合は、各スナップショットに同じレベルを使用します。

注意: SYS.SYSTEMSTATS以外のメトリックでは、取得レベルに関係なく同じデータが収集されます。

description

スナップショットの説明(オプション)

他のスナップショットと区別するなど、スナップショットに任意の説明または注意を付与するには、これを使用します。

使用上の注意

- 前述のように、取得レベルはSYS.SYSTEMSTATS表のメトリックにのみ適用されます。SYSTEMSTATS以外のメトリックでは、取得レベルに関係なく同じデータが収集されます。

- SYSTEMSTATSメトリックでは、特定の取得レベル内のメトリックのみが意味のある累積値を持ちます。特定のレベル以外のSYSTEMSTATSメトリックは、0 (ゼロ)の値になります。

- このプロシージャまたはファンクションは、capture_levelパラメータを指定することなくコールできます。その場合は、一般的なレベルのメトリックとみなされるものが取得されます。

戻り値

このファンクションは、スナップショットのIDにBINARY_INTEGER値を戻します。

例

基本的なメトリックのみを取得します。

call tt_stats.capture_snapshop('BASIC');

デフォルトの一般的なレベルのメトリックを取得します。

call tt_stats.capture_snapshot;

次の例では、ファンクションを使用して、デフォルトの一般的なレベルのメトリックを取得し、スナップショットIDを表示します。

declare
id   number;
begin
id := tt_stats.capture_snapshot();
dbms_output.put_line('Snapshot with ID (' || id || ') was captured.');
end;

DROP_SNAPSHOTS_RANGEプロシージャ

このプロシージャは、特定の範囲のスナップショットIDまたはタイムスタンプに従って、以前に取得した、TimesTenメトリックのスナップショットを削除します。

注意:
SHOW_SNAPSHOTSプロシージャを使用すると、現在格納されているすべてのスナップショットのIDおよびタイムスタンプを表示できます。

構文

TT_STATS.DROP_SNAPSHOTS_RANGE (
snapshot_low      IN BINARY_INTEGER,
snapshot_high     IN BINARY_INTEGER);

TT_STATS.DROP_SNAPSHOTS_RANGE (
ts_old            IN TIMESTAMP(6),
ts_new            IN TIMESTAMP(6));

パラメータ

表10-3 DROP_SNAPSHOTS_RANGEプロシージャのパラメータ

パラメータ

説明

snapshot_low

削除する範囲に含まれる最初のスナップショットを表すスナップショットID

snapshot_high

削除する範囲に含まれる最後のスナップショットを表すスナップショットID

ts_old

削除する範囲に含まれる最初のスナップショットを表すタイムスタンプ

ts_new

削除する範囲に含まれる最後のスナップショットを表すタイムスタンプ

使用上の注意

- すべてのスナップショットを削除するには、両方の入力パラメータに0 (ゼロ)を指定します。

- snapshot_lowがsnapshot_highより大きい場合も許容されます。その場合も、低い値から高い値までの範囲に含まれるスナップショットは削除されます。

- 同様に、ts_newがts_oldより古いタイムスタンプである場合も許容されます。

例

この例では、スナップショットIDを指定し、IDが1、2および3のスナップショットを削除します。

call tt_stats.drop_snapshots_range(1,3);

GENERATE_REPORT_HTMLプロシージャ

このプロシージャは、TimesTenメトリックの特定の2つのスナップショットからデータを使用して、変更率、開始値、終了値など、各メトリックに関する情報を含むレポートをHTML形式で作成します。

レポートには、メモリー使用量、接続およびロード・プロファイルの概要が含まれ、その後に(必要に応じて)SQL文、トランザクション、PL/SQLメモリー、レプリケーション、ログとログの保持、チェックポイント、キャッシュ・グループ、キャッシュ・グリッド、ラッチ、ロック、XLAおよびTimesTen接続属性に関するメトリックが続きます。

作成されるHTMLレポートの詳細な例は、『Oracle TimesTen In-Memory Databaseリファレンス』のttStatsに関する説明を参照してください。

「GENERATE_REPORT_TEXTプロシージャ」も参照してください。

注意:

- SHOW_SNAPSHOTSプロシージャを使用すると、現在格納されているすべてのスナップショットのIDおよびタイムスタンプを表示できます。

- 同じ取得レベルで取得されるスナップショットを使用します。「CAPTURE_SNAPSHOTプロシージャおよびファンクション」を参照してください。

- レポートは、Oracle Automatic Workload Repository (AWR)レポートに類似しています。

- SYSTEMSTATSメトリックでは、特定の取得レベル内のメトリックのみが意味のある累積値を持ちます。特定のレベル以外のSYSTEMSTATSメトリックは、0 (ゼロ)の値になります。

構文

TT_STATS.GENERATE_REPORT_HTML (
snapshot_id1     IN  BINARY_INTEGER,
snapshot_id2     IN  BINARY_INTEGER,
report           OUT TT_STATS.REPORT_TABLE);

パラメータ

表10-4 GENERATE_REPORT_HTMLプロシージャのパラメータ

パラメータ

説明

snapshot_id1

分析する1つ目のスナップショットのID

snapshot_id2

分析する2つ目のスナップショットのID

report

HTML形式のレポートを含む連想配列(索引付き表)

各行のタイプはVARCHAR2(32767)です。

アプリケーションは、必要に応じて、レポートの内容を行単位で出力できます。

使用上の注意

- スナップショットIDは、任意の順番で入力できます。プロシージャによって、順序が判別されます。

GENERATE_REPORT_TEXTプロシージャ

このプロシージャは、TimesTenメトリックの特定の2つのスナップショットを分析および比較して、変更率、開始値、終了値など、各メトリックに関する情報を含むレポートをプレーン・テキスト形式で作成します。

レポートには、メモリー使用量、接続およびロード・プロファイルの概要が含まれ、その後に(必要に応じて)SQL文、トランザクション、PL/SQLメモリー、レプリケーション、ログとログの保持、チェックポイント、キャッシュ・グループ、キャッシュ・グリッド、ラッチ、ロック、XLAおよびTimesTen接続属性に関するメトリックが続きます。

「GENERATE_REPORT_HTMLプロシージャ」も参照してください。

注意:

- SHOW_SNAPSHOTSプロシージャを使用すると、現在格納されているすべてのスナップショットのID (およびタイムスタンプ)を表示できます。

- 同じ取得レベルで取得されるスナップショットを使用します。「CAPTURE_SNAPSHOTプロシージャおよびファンクション」を参照してください。

- レポートは、Oracle Automatic Workload Repository (AWR)レポートに類似しています。

- SYSTEMSTATSメトリックでは、特定の取得レベル内のメトリックのみが意味のある累積値を持ちます。特定のレベル以外のSYSTEMSTATSメトリックは、0 (ゼロ)の値になります。

構文

TT_STATS.GENERATE_REPORT_TEXT (
snapshot_id1     IN  BINARY_INTEGER,
snapshot_id2     IN  BINARY_INTEGER,
report           OUT TT_STATS.REPORT_TABLE);

パラメータ

表10-5 GENERATE_REPORT_TEXTプロシージャのパラメータ

パラメータ

説明

snapshot_id1

分析する1つ目のスナップショットのID

snapshot_id2

分析する2つ目のスナップショットのID

report

プレーン・テキスト形式のレポートを含む連想配列(索引付き表)

各行のタイプはVARCHAR2(32767)です。

アプリケーションは、必要に応じて、レポートの内容を行単位で出力できます。

使用上の注意

- スナップショットIDは、任意の順番で入力できます。プロシージャによって、順序が判別されます。

GET_CONFIGプロシージャ

特定のTT_STATS構成パラメータの値またはすべての構成パラメータの値を取得します。OUTパラメータを含まないバージョンでは、標準出力に情報が送信されます。

構文

TT_STATS.GET_CONFIG (
name      IN   VARCHAR2 DEFAULTED);

TT_STATS.GET_CONFIG (
name      IN   VARCHAR2 DEFAULTED,
params    OUT  TT_STATS.REPORT_TABLE);

パラメータ

表10-6 GET_CONFIGプロシージャのパラメータ

パラメータ

説明

name

値を取得するTT_STATS構成パラメータの名前

このリリースでは、次のTT_STATSパラメータがサポートされています。

- MAX_SNAPSHOT_COUNT: これは、格納できるスナップショットの最大数を表します。

- MAX_SNAPSHOT_RETENTION_SIZE: これは、格納されるすべてのスナップショットの最大合計サイズをMBで表します。

パラメータ名が指定されていない場合 (nameが空の場合)は、すべての構成パラメータの値が表示されます。

「SET_CONFIGプロシージャ」も参照してください。

params

特定のTT_STATSパラメータの値またはすべてのパラメータの値を含む連想配列(索引付き表)

各行のタイプはVARCHAR2(32767)です。

SET_CONFIGプロシージャ

このプロシージャは、特定のTT_STATS構成パラメータに特定の値を設定します。

構文

TT_STATS.SET_CONFIG (
name      IN  VARCHAR2,
value     IN  BINARY_INTEGER);

パラメータ

表10-7 SET_CONFIGプロシージャのパラメータ

パラメータ

説明

name

設定するTT_STATS構成パラメータの名前

このリリースでは、次のTT_STATSパラメータがサポートされています。

- MAX_SNAPSHOT_COUNT: これは、格納できるスナップショットの最大数を表します。デフォルト値は256です。

- MAX_SNAPSHOT_RETENTION_SIZE: これは、格納されるすべてのスナップショットの最大合計サイズをMBで表します。デフォルト値は256MBです。

いずれかの制限を超えた場合にエラーが発生し、スナップショットの取得に失敗します。

「GET_CONFIGプロシージャ」も参照してください。

value

特定のパラメータに設定する値

使用上の注意

- これらの設定の有効範囲は広く、データベースに対するすべての接続に影響を与えます。

例

格納されるスナップショットの制限数として500を指定します。

call tt_stats.set_config('MAX_SNAPSHOT_COUNT', 500);

SHOW_SNAPSHOTSプロシージャ

このプロシージャは、データベースに現在格納されている、TimesTenメトリックのすべてのスナップショットのIDおよびタイムスタンプを表示します。

OUTパラメータを含まないバージョンでは、標準出力に情報が送信されます。

構文

TT_STATS.SHOW_SNAPSHOTS;

TT_STATS.SHOW_SNAPSHOTS (
resultset    OUT TT_STATS.REPORT_TABLE);

パラメータ

表10-8 SHOW_SNAPSHOTSプロシージャのパラメータ

パラメータ

説明

resultset

現在格納されている各スナップショットのIDおよびタイムスタンプを示すデータのペアを含む連想配列(索引付き表)

各行のタイプはVARCHAR2(32767)です。

11 UTL_FILE

UTL_FILEパッケージを使用して、PL/SQLプログラムでオペレーティング・システムのテキスト・ファイルの読込みと書込みができます。UTL_FILEは、オペレーティング・システムのストリーム・ファイルI/Oの制約付きバージョンを提供します。

この章の内容は次のとおりです。

- UTL_FILEの使用

- セキュリティ・モデル

- ルールおよび制限

- 例外

- 例

- データ構造

- UTL_FILEサブプログラムの要約

UTL_FILEの使用

- セキュリティ・モデル

- 使用上の注意

- ルールおよび制限

- 例外

- 例

セキュリティ・モデル

TimesTen 11.2.xリリースでは、UTL_FILEは、ディレクトリinstall_dir/plsql/utl_file_tempに制限されます。アクセスは、このディレクトリのサブディレクトリにまで拡張されることはありません。また、アクセスでは、ファイル・システムに対する権限チェックが行われます。必要に応じて、インスタンス管理者は、UTL_FILEアクセス権限を特定のユーザーに付与できます。ユーザーは、UTL_FILEサブプログラムのロケーション・パラメータに文字列'UTL_FILE_TEMP'を使用して、このUTL_FILEディレクトリを参照できます。この事前定義済の文字列は、Oracle Databaseのディレクトリ・オブジェクト名と同じ方法で使用されます。

UTL_FILEは、目的のアクセス制限を回避するように使用できるリンクで使用することはできません。ファイル名としてリンクを指定すると、FOPENが失敗し、エラーが発生します。

TimesTenの直接接続の場合、アプリケーション所有者がファイルの所有者です。クライアント/サーバー接続の場合、サーバー所有者がファイルの所有者です。

UTL_FILE_DIRアクセスは、TimesTenでサポートされていません。

重要:

- デフォルトでは、ユーザーにはUTL_FILEに対する実行権限はありません。TimesTenでUTL_FILEを使用するには、次の例に示すように、ADMINユーザーまたはインスタンス管理者が、明示的にGRANT EXECUTEを実行して権限を付与する必要があります。

GRANT EXECUTE ON SYS.UTL_FILE TO scott;

- ファイルへのアクセスに必要な権限は、オペレーティング・システムに固有です。UTL_FILE権限によって、ユーザーには、UTL_FILEディレクトリ内のすべてのファイルに対する読取りと書込みのアクセス権限が与えられますが、サブディレクトリ内のファイルにはアクセスできません。

- 無効なUTL_FILEオプションを適用しようとすると、予期しない動作が発生します。

使用上の注意

ファイルの場所とファイル名の各パラメータは、別々の文字列としてFOPENファンクションに指定されるため、ファイルの場所は、utl_file_tempディレクトリと照合してチェックできます。ファイルの場所と名前は、システム上の有効なファイル名である必要があり、ディレクトリはアクセス可能である必要があります。utl_file_tempのサブディレクトリにはアクセスできません。

UTL_FILEは読込み要求に対する行終了記号を暗黙的に解析するため、GET_LINEコールに対して戻されるバイト数に影響を与えます。たとえば、GET_LINEのlenパラメータは、文字データの要求バイト数を指定します。実際にユーザーに戻されるバイト数は、次のいずれかの最も小さい値になります。

- GET_LINE lenパラメータ値

- 次の行終了文字までのバイト数

- FOPENによって指定されるmax_linesizeパラメータ値

FOPEN max_linesizeパラメータは、1から32767の範囲内の数字である必要があります。指定しない場合は、デフォルト値の1024が設定されます。GET_LINE lenパラメータは、1から32767の範囲内の数字である必要があります。指定がない場合は、デフォルト値のmax_linesizeが指定されます。max_linesizeとlenに異なる値が指定された場合は、小さい方の値が優先されます。

1つのキャラクタ・セットにエンコードされたデータが読み込まれ、そのデータを別のキャラクタ・セットにエンコードするようにグローバリゼーション・サポートが命じられた(NLS_LANGなどを使用して)場合、結果は不定です。NLS_LANGを設定する場合は、データベースのキャラクタ・セットと同じものにする必要があります。

ルールおよび制限

UNIXでのCシェル環境変数などのオペレーティング・システム固有のパラメータは、ファイルの場所またはファイル名のパラメータでは使用できません。

UTL_FILEのI/O機能は、標準のオペレーティング・システムに備えられたストリーム・ファイルのI/O(OPEN、GET、PUT、CLOSE)機能に類似していますが、いくつかの点で制限があります。たとえば、FOPENファンクションをコールすると、ファイル・ハンドルが戻されますが、後続のGET_LINEまたはPUTのコールでこのファイル・ハンドルを使用し、ファイルへのストリームI/Oを実行します。ファイルのI/Oが完了した場合、FCLOSEをコールして出力を完了し、そのファイルに関連付けられたリソースを解放します。

例外

この項では、UTL_FILEサブプログラムによってスローされる例外について説明します。

注意:
ここに示す例外に加え、UTL_FILEのプロシージャおよびファンクションでは、NO_DATA_FOUND、VALUE_ERRORなど、事前定義済のPL/SQL例外が発生する可能性があります。詳細は、『Oracle Database PL/SQL言語リファレンス』の事前定義済の例外に関する説明を参照してください。

表11-1 UTL_FILEパッケージの例外

例外名

説明

ACCESS_DENIED

ファイルの場所に対するアクセス許可が拒否されました。

CHARSETMISMATCH

ファイルはFOPEN_NCHARを使用してオープンされますが、後のI/O操作ではPUTF、GET_LINEなどのNCHAR以外のファンクションを使用します。また、ファイルはFOPENを使用してオープンされますが、後のI/O操作ではPUTF_NCHAR、GET_LINE_NCHARなどのNCHARファンクションを使用します。

DELETE_FAILED

要求したファイルの削除操作に失敗しました。

FILE_OPEN

要求した操作は、ファイルがオープンしているため失敗しました。

INTERNAL_ERROR

PL/SQL内で不明なエラーが発生しました。

INVALID_FILEHANDLE

ファイル・ハンドルが無効です。

INVALID_FILENAME

filenameパラメータが無効です。

INVALID_MAXLINESIZE

FOPENのmax_linesize値が有効範囲外です。1から32767の範囲内にしてください。

INVALID_MODE

FOPENのopen_modeパラメータが無効です。

INVALID_OFFSET

原因は次のいずれかです。

- ABSOLUTE_OFFSETはNULLで、RELATIVE_OFFSETはNULLです。

- ABSOLUTE_OFFSETは0未満です。

- ファイルの終わりを超える検索がどちらかのオフセットで発生。

INVALID_OPERATION

要求どおりにファイルをオープンできないか、または操作できません。

INVALID_PATH

ファイルの場所または名前が無効です。

LENGTH_MISMATCH

CHARまたはRAWデータの長さが不一致。

READ_ERROR

読取り操作中にオペレーティング・システムのエラーが発生しました。

RENAME_FAILED

要求したファイル名変更操作に失敗しました。

WRITE_ERROR

書込み操作中にオペレーティング・システムのエラーが発生しました。

例

例1

この例では、GET_LINEプロシージャを使用してファイルからの読取りを行います。

DECLARE
V1 VARCHAR2(32767);
F1 UTL_FILE.FILE_TYPE;
BEGIN
-- In this example MAX_LINESIZE is less than GET_LINE's length request
-- so number of bytes returned is 256 or less if a line terminator is seen.
F1 := UTL_FILE.FOPEN('UTL_FILE_TEMP','u12345.tmp','R',256);
UTL_FILE.GET_LINE(F1,V1,32767);
DBMS_OUTPUT.PUT_LINE('Get line: ' || V1);
UTL_FILE.FCLOSE(F1);

-- In this example, FOPEN's MAX_LINESIZE is NULL and defaults to 1024,
-- so number of bytes returned is 1024 or less if line terminator is seen.
F1 := UTL_FILE.FOPEN('UTL_FILE_TEMP','u12345.tmp','R');
UTL_FILE.GET_LINE(F1,V1,32767);
DBMS_OUTPUT.PUT_LINE('Get line: ' || V1);
UTL_FILE.FCLOSE(F1);

-- GET_LINE doesn't specify a number of bytes, so it defaults to
-- same value as FOPEN's MAX_LINESIZE which is NULL and defaults to 1024.
-- So number of bytes returned is 1024 or less if line terminator is seen.
F1 := UTL_FILE.FOPEN('UTL_FILE_TEMP','u12345.tmp','R');
UTL_FILE.GET_LINE(F1,V1);
DBMS_OUTPUT.PUT_LINE('Get line: ' || V1);
UTL_FILE.FCLOSE(F1);
END;

テスト・ファイル(utl_file_tempディレクトリにあるu12345.tmp)を検討します。

This is line 1.
This is line 2.
This is line 3.
This is line 4.
This is line 5.

例の結果は、次の出力のようになり、最初の行のみが繰り返し取得されます。

Get line: This is line 1.
Get line: This is line 1.
Get line: This is line 1.

PL/SQL procedure successfully completed.

例2

この例では、PUTFプロシージャを使用して、ファイルの末尾にコンテンツが追加されます。

declare
handle utl_file.file_type;
my_world  varchar2(4) := 'Zork';
begin
handle := utl_file.fopen('UTL_FILE_TEMP','u12345.tmp','a');
utl_file.putf(handle, '\nHello, world!\nI come from %s with %s.\n', my_world,
'greetings for all earthlings');
utl_file.fflush(handle);
utl_file.fclose(handle);
end;

これによって、次のものがutl_file_tempディレクトリのファイルu12345.tmpに追加されます。

Hello, world!
I come from Zork with greetings for all earthlings.

例3

このプロシージャは、GET_RAWプロシージャを使用して、指定したファイルからRAWデータを取得します。これは、EXCEPTION処理のNO_DATA_FOUNDの処理によって、データの最後に到達すると終了します。

CREATE OR REPLACE PROCEDURE getraw(n IN VARCHAR2) IS
h     UTL_FILE.FILE_TYPE;
Buf   RAW(32767);
Amnt  CONSTANT BINARY_INTEGER := 32767;
BEGIN
h := UTL_FILE.FOPEN('UTL_FILE_TEMP', n, 'r', 32767);
LOOP
BEGIN
UTL_FILE.GET_RAW(h, Buf, Amnt);

-- Do something with this chunk
DBMS_OUTPUT.PUT_LINE('This is the raw data:');
DBMS_OUTPUT.PUT_LINE(Buf);
EXCEPTION WHEN No_Data_Found THEN
EXIT;
END;
END LOOP;
UTL_FILE.FCLOSE (h);
END;

utl_file_tempディレクトリ内のファイルu12345.tmpの次のコンテンツを検討します。

hello world!

例では、次のような出力が生成されます。

Command> begin
> getraw('u12345.tmp');
> end;
> /
This is the raw data:
68656C6C6F20776F726C64210A

PL/SQL procedure successfully completed.

データ構造

UTL_FILEパッケージは、レコード・タイプを定義します。

レコード・タイプ

- FILE_TYPEレコード・タイプ

FILE_TYPEレコード・タイプ

FILE_TYPEの内容は、UTL_FILEパッケージ専用です。このレコードのコンポーネントを参照または変更しないでください。

TYPE file_type IS RECORD (
id          BINARY_INTEGER,
datatype    BINARY_INTEGER,
byte_mode   BOOLEAN);

フィールド

表11-2 FILE_TYPEのフィールド

フィールド

説明

id

内部ファイル・ハンドル番号(数値)を示します。

datatype

ファイルのタイプを示します(CHARファイル、NCHARファイルまたは他のファイル(バイナリ))。

byte_mode

ファイルがバイナリ・ファイルとしてオープンされたか、テキスト・ファイルとしてオープンされたかを示します。

重要:
Oracle Databaseでは、データベース・セッション間または単一セッション内でのFILE_TYPE値の永続性は保証されていません。ファイル・ハンドルのクローン化やダミー・ファイルの使用を試みると、予測できない結果が生じる可能性があります。

注意:

- PLS_INTEGERデータ・タイプとBINARY_INTEGERデータ・タイプは同じです。このドキュメントでは、リファレンス情報でデータ・タイプ(表タイプ、レコード・タイプ、サブプログラム・パラメータ、サブプログラム戻り値など)を示す場合にBINARY_INTEGERを使用しますが、説明および例ではいずれも使用される場合があります。

- INTEGERデータ・タイプとNUMBER(38)データ・タイプも同じです。このドキュメントでは、全体をとおしてINTEGERを使用します。

UTL_FILEサブプログラムの要約

表11-3 UTL_FILEサブプログラム

サブプログラム

説明

FCLOSEプロシージャ

ファイルをクローズします。

FCLOSE_ALLプロシージャ

オープンしているファイル・ハンドルをすべてクローズします。

FCOPYプロシージャ

ファイルの連続部分を新規に作成したファイルにコピーします。

FFLUSHプロシージャ

保留中のすべての出力を物理的にファイルに書き込みます。

FGETATTRプロシージャ

ディスク・ファイルの属性を読み込んで戻します。

FGETPOSファンクション

ファイル内の現行の相対オフセット位置をバイト数で戻します。

FOPENファンクション

入力用または出力用にファイルをオープンします。

FOPEN_NCHARファンクション

入力用または出力用にファイルをUnicodeでオープンします。

FREMOVEプロシージャ

ユーザーに十分な権限がある場合、ディスク・ファイルを削除します。

FRENAMEプロシージャ

UNIXのmvファンクションと同じように、既存のファイルに新規の名前を指定します。

FSEEKプロシージャ

指定したバイトの数だけ、ファイル内でポインタを前方または後方に調整します。

GET_LINEプロシージャ

オープンしているファイルからテキストを読み込みます。

GET_LINE_NCHARプロシージャ

オープンしているファイルからテキストをUnicodeで読み込みます。

GET_RAWプロシージャ

RAW文字列値をファイルから読み込み、読み込んだバイトの数だけ、ファイルのポインタを前方に調整します。

IS_OPENファンクション

ファイル・ハンドルが、オープンしているファイルを参照しているかどうかを判別します。

NEW_LINEプロシージャ

1つ以上のOS固有の行終了記号をファイルに書き込みます。

PUTプロシージャ

ファイルに1つの文字列を書き込みます。

PUT_LINEプロシージャ

ファイルに1行書き込み、それによってOS固有の行終了記号を1つ追加します。

PUT_LINE_NCHARプロシージャ

ファイルにUnicode行を1行書き込みます。

PUT_NCHARプロシージャ

ファイルに1つのUnicode文字列を書き込みます。

PUT_RAWプロシージャ

RAWデータ値を入力として受け入れ、出力バッファに書き込みます。

PUTFプロシージャ

これは、PUTと同じですが、フォーマットを行います。

PUTF_NCHARプロシージャ

これは、PUT_NCHARと同じですが、フォーマットを行います。

FCLOSEプロシージャ

このプロシージャは、ファイル・ハンドルが示すオープン・ファイルをクローズします。

構文

UTL_FILE.FCLOSE (
file IN OUT UTL_FILE.FILE_TYPE);

パラメータ

表11-4 FCLOSEプロシージャのパラメータ

パラメータ

説明

file

FOPENまたはFOPEN_NCHARコールが戻すアクティブなファイル・ハンドル。

例外

これらの例外については、「例外」を参照してください。

INVALID_FILEHANDLE
WRITE_ERROR

FCLOSEの実行時に、まだ書き込んでいないデータがバッファに残っていると、ファイルのクローズ時にWRITE_ERRORを受け取る場合があります。

例

「例」を参照してください。

FCLOSE_ALLプロシージャ

このプロシージャは、セッションでオープンしているすべてのファイル・ハンドルをクローズします。これは、PL/SQLプログラムの例外終了後などの非常時のクリーンアップ・プロシージャとして役立ちます。

構文

UTL_FILE.FCLOSE_ALL;

使用上の注意

FCLOSE_ALLは、ユーザーが保持しているオープン・ファイル・ハンドルの状態は変更しません。つまり、FCLOSE_ALLコール後のファイル・ハンドルのIS_OPENテストでは、たとえファイルがすでにクローズしていてもTRUEが戻されます。FCLOSE_ALLの前にオープンされたファイルには、以降の読込み操作や書込み操作を行うことができません。

例外

この例外については、「例外」を参照してください。

WRITE_ERROR

FCOPYプロシージャ

このプロシージャは、ファイルの連続部分を新規に作成したファイルにコピーします。デフォルトでは、start_lineパラメータとend_lineパラメータが省略されると、ファイル全体がコピーされます。ソース・ファイルは読取りモードでオープンします。宛先ファイルは書込みモードでオープンします。ソース・ファイルのコピー操作では、ファイルの一部を選択するために、開始および終了の行番号をオプションで指定できます。

構文

UTL_FILE.FCOPY (
src_location    IN VARCHAR2,
src_filename    IN VARCHAR2,
dest_location   IN VARCHAR2,
dest_filename   IN VARCHAR2,
[start_line      IN BINARY_INTEGER DEFAULT 1,
end_line        IN BINARY_INTEGER DEFAULT NULL]);

パラメータ

表11-5 FCOPYプロシージャのパラメータ

パラメータ

説明

src_location

ソース・ファイルのディレクトリ位置。

src_filename

コピー対象のソース・ファイル。

dest_location

宛先ファイルが作成される宛先ディレクトリ。

dest_filename

ソース・ファイルから作成された宛先ファイル。

start_line

コピー操作を開始する行の番号。

デフォルトは、最初の行の1です。

end_line

コピー操作を停止する行の番号。

デフォルトは、ファイルの最後を示すNULLです。

例外

これらの例外については、「例外」を参照してください。

INVALID_FILENAME
INVALID_PATH
INVALID_OPERATION
INVALID_OFFSET
READ_ERROR
WRITE_ERROR

FFLUSHプロシージャ

FFLUSHは、ファイル・ハンドルが示すファイルに、保留中のデータを物理的に書き込みます。ファイルに書き込むデータは通常バッファリングされます。FFLUSHプロシージャは、バッファリングされているデータを強制的にファイルに書き込みます。データは改行文字で終了する必要があります。

フラッシュは、まだオープンしているファイルを読み込む必要がある場合に役立ちます。たとえば、デバッグ・メッセージをファイルにフラッシュして、即時に読み込むことができます。

構文

UTL_FILE.FFLUSH (
file  IN UTL_FILE.FILE_TYPE);

パラメータ

表11-6 FFLUSHプロシージャのパラメータ

パラメータ

説明

file

FOPENまたはFOPEN_NCHARコールが戻すアクティブなファイル・ハンドル。

例外

これらの例外については、「例外」を参照してください。

INVALID_FILEHANDLE
INVALID_OPERATION
WRITE_ERROR

例

「例」を参照してください。

FGETATTRプロシージャ

このプロシージャは、ディスク・ファイルの属性を読み込んで戻します。

構文

UTL_FILE.FGETATTR(
location    IN VARCHAR2,
filename    IN VARCHAR2,
fexists     OUT BOOLEAN,
file_length OUT NUMBER,
block_size   OUT BINARY_INTEGER);

パラメータ

表11-7 FGETATTRプロシージャのパラメータ

パラメータ

説明

location

ソース・ファイルの位置

filename

検証されるファイルの名前。

fexists

ファイルが存在するかどうかを示すBOOLEAN

file_length

バイト単位でのファイルの長さ、またはファイルが存在しない場合はNULL

block_size

バイト単位でのファイル・システムのブロック・サイズ、またはファイルが存在しない場合はNULL

例外

これらの例外については、「例外」を参照してください。

INVALID_PATH
INVALID_FILENAME
INVALID_OPERATION
READ_ERROR
ACCESS_DENIED

FGETPOSファンクション

このファンクションは、ファイル内の現行の相対オフセット位置をバイト数で戻します。

構文

UTL_FILE.FGETPOS (
file   IN utl_file.file_type)
RETURN BINARY_INTEGER;

パラメータ

表11-8 FGETPOSファンクションのパラメータ

パラメータ

説明

file

FOPENまたはFOPEN_NCHARコールが戻すアクティブなファイル・ハンドル。

戻り値

オープン・ファイルのバイト単位での相対的なオフセット位置、またはファイルの先頭の場合は0

例外

これらの例外については、「例外」を参照してください。

INVALID_FILEHANDLE
INVALID_OPERATION
READ_ERROR

ファイルがオープンしていない場合は、INVALID_FILEHANDLE例外が発生します。ファイルがバイト・モード操作用にオープンしていた場合は、INVALID_OPERATION例外が発生します。

FOPENファンクション

このファンクションは、ファイルをオープンします。最大行サイズを指定でき、最大50ファイルまで同時にオープンできます。「FOPEN_NCHARファンクション」も参照してください。

構文

UTL_FILE.FOPEN (
location     IN VARCHAR2,
filename     IN VARCHAR2,
open_mode    IN VARCHAR2,
max_linesize IN BINARY_INTEGER DEFAULT 1024)
RETURN utl_file.file_type;

パラメータ

表11-9 FOPENファンクション・パラメータ

パラメータ

説明

location

ファイルのディレクトリ位置。

filename

拡張子(ファイル・タイプ)も含めたファイル名で、ディレクトリ・パスはありません

ディレクトリ・パスがファイル名の一部として指定される場合も、FOPENに無視されます。UNIXでは、ファイル名の末尾にスラッシュ(/)を指定できません。

open_mode

ファイルがオープンしたモード

- r - テキストの読込み

- w - テキストの書込み

- a - テキストの追加

- rb - バイトの読込み

- wb - バイトの書込み

- ab - バイトの追加

open_modeに'a'や'ab'を指定してファイルをオープンしようとしたときに、そのファイルが存在しない場合、ファイルはWRITEモードで作成されます。

max_linesize

改行文字を含むこのファイルの1行当たりの最大文字数

最小値は1、最大値は32767です。指定しない場合は、デフォルト値の1024が設定されます。

戻り値

そのファイルを操作する後続プロシージャすべてに渡す必要のあるファイル・ハンドル

ファイル・ハンドルの特定の内容は、UTL_FILEパッケージ専用であり、UTL_FILEのユーザーは、個々のコンポーネントの参照または変更を行わないでください。

使用上の注意

ファイルの場所とファイル名の各パラメータは、別々の文字列としてFOPENファンクションに指定されるため、ファイルの場所は、utl_file_tempディレクトリと照合してチェックできます。ファイルの場所と名前は、システム上の有効なファイル名である必要があり、ディレクトリはアクセス可能である必要があります。utl_file_tempのサブディレクトリにはアクセスできません。

例外

これらの例外については、「例外」を参照してください。

INVALID_PATH
INVALID_MODE
INVALID_OPERATION
INVALID_MAXLINESIZE

例

「例」を参照してください。

FOPEN_NCHARファンクション

このファンクションは、指定した最大行サイズで入力用または出力用ファイルを各国語キャラクタ・セット・モードでオープンします。最大50ファイルまで同時にオープンできます。このファンクションを使用すると、データベース・キャラクタ・セットではなくUnicodeでテキスト・ファイルの読込みまたは書込みを実行できます。

NVARCHAR2のバッファの内容が(データベースの各国語キャラクタ・セットによっては)AL16UTF16またはUTF-8の可能性がある場合でも、ファイルの内容は常にUTF-8で読取りおよび書込みされます。UTL_FILEは、必要に応じてUTF-8とAL16UTF16の間で変換を行います。

「FOPENファンクション」も参照してください。

構文

UTL_FILE.FOPEN_NCHAR (
location     IN VARCHAR2,
filename     IN VARCHAR2,
open_mode    IN VARCHAR2,
max_linesize IN BINARY_INTEGER DEFAULT 1024)
RETURN utl_file.file_type;

パラメータ

表11-10 FOPEN_NCHARファンクションのパラメータ

パラメータ

説明

location

ファイルのディレクトリ位置。

filename

拡張子も含めたファイル名

open_mode

ファイルをオープンするモード: r、w、a、rb、wbまたはab(FOPENの説明を参照)

max_linesize

改行文字を含むこのファイルの1行当たりの最大文字数

最小値は1、最大値は32767です。指定しない場合は、デフォルト値の1024が設定されます。

戻り値

そのファイルを操作する後続プロシージャすべてに渡す必要のあるファイル・ハンドル

ファイル・ハンドルの特定の内容は、UTL_FILEパッケージ専用であり、UTL_FILEのユーザーは、個々のコンポーネントの参照または変更を行わないでください。

例外

これらの例外については、「例外」を参照してください。

INVALID_PATH
INVALID_MODE
INVALID_OPERATION
INVALID_MAXLINESIZE

FREMOVEプロシージャ

このプロシージャは、ユーザーに十分な権限がある場合に、ディスク・ファイルを削除します。

構文

UTL_FILE.FREMOVE (
location IN VARCHAR2,
filename IN VARCHAR2);

パラメータ

表11-11 FREMOVEプロシージャのパラメータ

パラメータ

説明

location

ファイルのディレクトリ位置

filename

削除されるファイルの名前。

使用上の注意

このプロシージャでは、ファイルを削除する前に権限の有無を検証しません。ファイルとディレクトリに対するアクセス権限は、オペレーティング・システムによって検証されます。

例外

これらの例外については、「例外」を参照してください。

INVALID_PATH
INVALID_FILENAME
INVALID_OPERATION
ACCESS_DENIED
DELETE_FAILED

FRENAMEプロシージャ

このプロシージャは、既存のファイルの名前を変更します。

構文

UTL_FILE.FRENAME (
src_location  IN VARCHAR2,
src_filename  IN VARCHAR2,
dest_location IN VARCHAR2,
dest_filename IN VARCHAR2,
overwrite     IN BOOLEAN DEFAULT FALSE);

パラメータ

表11-12 FRENAMEプロシージャのパラメータ

パラメータ

説明

src_location

ソース・ファイルのディレクトリ位置。

src_filename

名前変更対象のソース・ファイル。

dest_location

宛先ファイルの宛先ディレクトリ

dest_filename

ファイルの新しい名前。

overwrite

宛先ディレクトリ内の既存のファイルの上書きを許可するかどうか(デフォルト: FALSE)

使用上の注意

ソース・ディレクトリと宛先ディレクトリの両方に対するアクセス権限の付与が必要です。

例外

これらの例外については、「例外」を参照してください。

INVALID_PATH
INVALID_FILENAME
RENAME_FAILED
ACCESS_DENIED

FSEEKプロシージャ

このプロシージャは、指定したバイトの数だけ、ファイル内でポインタを前方または後方に調整します。

構文

UTL_FILE.FSEEK (
file            IN OUT utl_file.file_type,
absolute_offset IN     BINARY_INTEGER DEFAULT NULL,
relative_offset IN     BINARY_INTEGER DEFAULT NULL);

パラメータ

表11-13 FSEEKプロシージャのパラメータ

パラメータ

説明

file

FOPENまたはFOPEN_NCHARコールが戻すアクティブなファイル・ハンドル。

absolute_offset

検索先のバイト単位での絶対位置(デフォルト=NULL)

relative_offset

前方または後方に検索するバイト数

前方に検索する場合は正の整数、後方に検索する場合は負の整数、現在の位置の場合は0(ゼロ)。デフォルトはNULLです。

使用上の注意

- FSEEKを使用すると、最初にファイルのクローズと再オープンを行わずに、ファイル内の前の行を読み込むことができます。ナビゲートするバイト数を把握しておく必要があります。

- 指定されたバイト数に至る前にファイルの先頭まで到達した場合、ファイル・ポインタはファイルの先頭に置かれます。

例外

これらの例外については、「例外」を参照してください。

INVALID_FILEHANDLE
INVALID_OPERATION
READ_ERROR
INVALID_OFFSET

ファイルがバイト・モード操作用にオープンしていた場合は、INVALID_OPERATION例外が発生します。指定されたバイト数に至る前にファイルの終わりに達した場合は、INVALID_OFFSETエラーが発生します。

GET_LINEプロシージャ

このプロシージャは、ファイル・ハンドルが示すオープン・ファイルからテキストを読み込んで、出力バッファ・パラメータに配置します。テキストは、ファイルまたはlenパラメータの最後まで読み込まれますが、行の終了記号は含まれません。FOPENに指定されているmax_linesizeを超えることはできません。

構文

UTL_FILE.GET_LINE (
file        IN  UTL_FILE.FILE_TYPE,
buffer      OUT VARCHAR2,
len         IN  BINARY_INTEGER DEFAULT NULL);

パラメータ

表11-14 GET_LINEプロシージャのパラメータ

パラメータ

説明

file

FOPENコールが戻すアクティブなファイル・ハンドル。

buffer

ファイルから読み込まれた行を受け取るデータ・バッファ。

len

ファイルから読み込むバイト数

NULL(デフォルト)を指定すると、FOPENのmax_linesizeの値が設定されます。

使用上の注意

- 行終了記号の文字はバッファに読み込まれないため、ブランク行を読み込むと空の文字列が戻されます。

- bufferパラメータの最大サイズは、より小さいサイズをFOPENに指定しないかぎり、32767バイトです。

- 指定しない場合は、デフォルト値の1024が設定されます。「GET_LINE_NCHARプロシージャ」も設定してください。

例外

これらの例外については、「例外」を参照してください。

INVALID_FILEHANDLE
INVALID_OPERATION
READ_ERROR
CHARSETMISMATCH
NO_DATA_FOUND
VALUE_ERROR

ファイルが読取りモード用(モードr)にオープンしていない場合、またはバイト・モード操作用にオープンしていた場合は、INVALID_OPERATIONがスローされます。FOPENでなくFOPEN_NCHARを使用してファイルをオープンした場合は、CHARSETMISMATCHがスローされます。ファイルの終わりに到達したためにテキストが読み込まれなかった場合は、NO_DATA_FOUNDがスローされます。行がバッファに格納されない場合は、VALUE_ERRORがスローされます。(NO_DATA_FOUNDおよびVALUE_ERRORは、事前定義済のPL/SQL例外です。)

例

「例」を参照してください。

GET_LINE_NCHARプロシージャ

このプロシージャは、ファイル・ハンドルが示すオープン・ファイルからテキストを読み込んで、出力バッファ・パラメータに配置します。このファンクションを使用すると、データベース・キャラクタ・セットではなくUnicodeでテキスト・ファイルの読込みを実行できます。

ファイルは、各国語キャラクタ・セット・モードでオープンされ、UTF-8キャラクタ・セットにエンコードされます。想定されるバッファのデータ・タイプは、NVARCHAR2です。NCHAR、VARCHAR2など、その他のデータ型の変数が指定された場合、テキストの読取りの後で、PL/SQLでNVARCHAR2からの標準の暗黙的な変換が実行されます。

「GET_LINEプロシージャ」も参照してください。

構文

UTL_FILE.GET_LINE_NCHAR (
file        IN  UTL_FILE.FILE_TYPE,
buffer      OUT NVARCHAR2,
len         IN  BINARY_INTEGER DEFAULT NULL);

パラメータ

表11-15 GET_LINE_NCHARプロシージャのパラメータ

パラメータ

説明

file

FOPEN_NCHARコールが戻すアクティブなファイル・ハンドル

このファイルは読込み用(モードr)にオープンされる必要があります。

buffer

ファイルから読み込まれた行を受け取るデータ・バッファ。

len

ファイルから読み込むバイト数

NULL(デフォルト)を指定すると、FOPEN_NCHARのmax_linesizeの値が設定されます。

例外

これらの例外については、「例外」を参照してください。

INVALID_FILEHANDLE
INVALID_OPERATION
READ_ERROR
CHARSETMISMATCH
NO_DATA_FOUND
VALUE_ERROR

ファイルが読取りモード用(モードr)にオープンしていない場合、またはバイト・モード操作用にオープンしていた場合は、INVALID_OPERATIONがスローされます。ファイルの終わりに到達したためにテキストが読み込まれなかった場合は、NO_DATA_FOUNDがスローされます。行がバッファに格納されない場合は、VALUE_ERRORがスローされます。FOPEN_NCHARでなくFOPENでファイルをオープンした場合は、CHARSETMISMATCHがスローされます。(NO_DATA_FOUNDおよびVALUE_ERRORは、事前定義済のPL/SQL例外です。)

GET_RAWプロシージャ

このプロシージャは、RAW文字列値をファイルから読み込み、読み込んだバイトの数だけ、ファイルのポインタを前方に調整します。行終了記号は無視します。

構文

UTL_FILE.GET_RAW (
file    IN  utl_file.file_type,
buffer  OUT NOCOPY RAW,
len     IN  BINARY_INTEGER DEFAULT NULL);

パラメータ

表11-16 GET_RAWファンクションのパラメータ

パラメータ

説明

file

FOPENまたはFOPEN_NCHARコールが戻すアクティブなファイル・ハンドル。

buffer

RAWデータ

len

ファイルから読み込むバイト数

NULL(デフォルト)の場合、lenはRAWの最大長とみなされます。

例外

これらの例外については、「例外」を参照してください。

INVALID_FILEHANDLE
INVALID_OPERATION
READ_ERROR
LENGTH_MISMATCH
NO_DATA_FOUND

(NO_DATA_FOUNDは、事前定義済のPL/SQL例外です。)

例

「例」を参照してください。

IS_OPENファンクション

このファンクションは、オープン・ファイルをファイル・ハンドルが識別しているかどうかをテストします。これは、ファイル・ハンドルが、オープン状態でクローズしていないファイルを示しているかどうかを通知するのみです。これは、エラーなしでファイルを使用できることを保証するものではありません。

構文

UTL_FILE.IS_OPEN (
file  IN UTL_FILE.FILE_TYPE)
RETURN BOOLEAN;

パラメータ

表11-17 IS_OPENファンクションのパラメータ

パラメータ

説明

file

FOPENまたはFOPEN_NCHARコールが戻すアクティブなファイル・ハンドル。

戻り値

ファイルがオープンしている場合はTRUE、そうでない場合はFALSE

例外

この例外については、「例外」を参照してください。

INVALID_FILEHANDLE

NEW_LINEプロシージャ

このプロシージャは、入力ファイル・ハンドルが示すファイルに、1つ以上の行終了記号を書き込みます。行終了記号はプラットフォーム固有の文字や文字列であるため、このプロシージャはPUTとは異なります。

構文

UTL_FILE.NEW_LINE (
file     IN UTL_FILE.FILE_TYPE,
lines    IN BINARY_INTEGER := 1);

パラメータ

表11-18 NEW_LINEプロシージャのパラメータ

パラメータ

説明

file

FOPENまたはFOPEN_NCHARコールが戻すアクティブなファイル・ハンドル。

lines

ファイルに書き込む行終了記号の数。

例外

この例外については、「例外」を参照してください。

INVALID_FILEHANDLE
INVALID_OPERATION
WRITE_ERROR

PUTプロシージャ

PUTプロシージャは、ファイル・ハンドルが示すオープン・ファイルに、バッファ・パラメータ内に格納されているテキスト文字列を書き込みます。このファイルは書込み操作用にオープンされる必要があります。PUTは、行終了記号を追加しません。行の終了にはNEW_LINEを使用するか、またはPUT_LINEを使用して行終了記号付きの完全な1行を書き込んでください。「PUT_NCHARプロシージャ」も参照してください。

構文

UTL_FILE.PUT (
file      IN UTL_FILE.FILE_TYPE,
buffer    IN VARCHAR2);

パラメータ

表11-19 PUTプロシージャのパラメータ

パラメータ

説明

file

FOPEN_NCHARコールが戻すアクティブなファイル・ハンドル

このファイルは書込み用(モードw)にオープンされる必要があります。

buffer

ファイルに書き込むテキストを含んだバッファ

使用上の注意

bufferパラメータの最大サイズは、より小さいサイズをFOPENに指定しないかぎり、32767バイトです。指定しない場合は、デフォルト値の1024が設定されます。連続したPUTコールの全合計は、途中でバッファ・フラッシュをしないかぎり、32767を超えません。

例外

この例外については、「例外」を参照してください。

INVALID_FILEHANDLE
INVALID_OPERATION
WRITE_ERROR
CHARSETMISMATCH

モードwまたはa(書込みまたは追加)を使用してファイルをオープンしていない場合は、INVALID_OPERATIONがスローされます。FOPENでなくFOPEN_NCHARを使用してファイルをオープンした場合は、CHARSETMISMATCHがスローされます。

PUT_LINEプロシージャ

このプロシージャは、ファイル・ハンドルが示すオープン・ファイルに、バッファ・パラメータ内に格納されているテキスト文字列を書き込みます。このファイルは書込み操作用にオープンされる必要があります。PUT_LINEは、プラットフォーム固有の行終了文字または文字列で行を終了します。「PUT_LINE_NCHARプロシージャ」も参照してください。

構文

UTL_FILE.PUT_LINE (
file      IN UTL_FILE.FILE_TYPE,
buffer    IN VARCHAR2,
autoflush IN BOOLEAN DEFAULT FALSE);

パラメータ

表11-20 PUT_LINEプロシージャのパラメータ

パラメータ

説明

file

FOPENコールが戻すアクティブなファイル・ハンドル。

buffer

ファイルに書き込む行を含んだテキスト・バッファ。

autoflush

書込みの後で、バッファをディスクにフラッシュするフラグ

使用上の注意

bufferパラメータの最大サイズは、より小さいサイズをFOPENに指定しないかぎり、32767バイトです。指定しない場合は、デフォルト値の1024が設定されます。連続したPUTコールの全合計は、途中でバッファ・フラッシュをしないかぎり、32767を超えません。

例外

この例外については、「例外」を参照してください。

INVALID_FILEHANDLE
INVALID_OPERATION
WRITE_ERROR
CHARSETMISMATCH

ファイルがバイト・モード操作用にオープンしている場合は、INVALID_OPERATIONがスローされます。FOPENでなくFOPEN_NCHARを使用してファイルをオープンした場合は、CHARSETMISMATCHがスローされます。

PUT_LINE_NCHARプロシージャ

このプロシージャは、ファイル・ハンドルが示すオープン・ファイルに、バッファ・パラメータ内に格納されているテキスト文字列を書き込みます。このファンクションを使用すると、データベース・キャラクタ・セットではなくUnicodeでテキスト・ファイルの書込みを実行できます。このプロシージャは、書き込まれたテキストに行セパレータが追加されることを除いて、PUT_NCHARプロシージャと同じです。「PUT_LINEプロシージャ」も参照してください。

構文

UTL_FILE.PUT_LINE_NCHAR (
file    IN UTL_FILE.FILE_TYPE,
buffer  IN NVARCHAR2);

パラメータ

表11-21 PUT_LINE_NCHARプロシージャのパラメータ

パラメータ

説明

file

FOPEN_NCHARコールが戻すアクティブなファイル・ハンドル

このファイルは書込み用(モードw)にオープンされる必要があります。

buffer

ファイルに書き込む行を含んだテキスト・バッファ。

使用上の注意

bufferパラメータの最大サイズは、より小さいサイズをFOPENに指定しないかぎり、32767バイトです。指定しない場合は、デフォルト値の1024が設定されます。連続したPUTコールの全合計は、途中でバッファ・フラッシュをしないかぎり、32767を超えません。

例外

この例外については、「例外」を参照してください。

INVALID_FILEHANDLE
INVALID_OPERATION
WRITE_ERROR
CHARSETMISMATCH

ファイルがバイト・モード操作用にオープンしている場合は、INVALID_OPERATIONがスローされます。FOPEN_NCHARでなくFOPENを使用してファイルをオープンした場合は、CHARSETMISMATCHがスローされます。

PUT_NCHARプロシージャ

このプロシージャは、ファイル・ハンドルが示すオープン・ファイルに、バッファ・パラメータ内に格納されているテキスト文字列を書き込みます。

このファンクションを使用すると、データベース・キャラクタ・セットではなくUnicodeでテキスト・ファイルの書込みを実行できます。このファイルは、各国語キャラクタ・セット・モードでオープンされる必要があります。テキスト文字列は、UTF-8キャラクタ・セットで書き込まれます。想定されるバッファのデータ・タイプは、NVARCHAR2です。その他のデータ型の変数が指定された場合、テキストの書込みの前に、PL/SQLでNVARCHAR2への暗黙的な変換が実行されます。

「PUTプロシージャ」も参照してください。

構文

UTL_FILE.PUT_NCHAR (
file      IN UTL_FILE.FILE_TYPE,
buffer    IN NVARCHAR2);

パラメータ

表11-22 PUT_NCHARプロシージャのパラメータ

パラメータ

説明

file

FOPEN_NCHARコールが戻すアクティブなファイル・ハンドル

buffer

ファイルに書き込むテキストを含んだバッファ

使用上の注意

bufferパラメータの最大サイズは、より小さいサイズをFOPENに指定しないかぎり、32767バイトです。指定しない場合は、デフォルト値の1024が設定されます。連続したPUTコールの全合計は、途中でバッファ・フラッシュをしないかぎり、32767を超えません。

例外

この例外については、「例外」を参照してください。

INVALID_FILEHANDLE
INVALID_OPERATION
WRITE_ERROR
CHARSETMISMATCH

モードwまたはa(書込みまたは追加)を使用してファイルをオープンしていない場合は、INVALID_OPERATIONがスローされます。FOPEN_NCHARでなくFOPENでファイルをオープンした場合は、CHARSETMISMATCHがスローされます。

PUT_RAWプロシージャ

このプロシージャは、RAWデータ値を入力として受け入れ、出力バッファに書き込みます。

構文

UTL_FILE.PUT_RAW (
file       IN utl_file.file_type,
buffer     IN RAW,
autoflush  IN BOOLEAN DEFAULT FALSE);

パラメータ

表11-23 PUT_RAWプロシージャのパラメータ

パラメータ

説明

file

FOPENまたはFOPEN_NCHARコールが戻すアクティブなファイル・ハンドル。

buffer

バッファに書き込まれたRAWデータ。

autoflush

出力バッファに値を書き込んだ後でフラッシュを実行するフラグ(デフォルト: FALSEです)

使用上の注意

autoflushにTRUEを設定することで、バッファの自動フラッシュを要求できます。

bufferパラメータの最大サイズは、より小さいサイズをFOPENに指定しないかぎり、32767バイトです。指定しない場合は、デフォルト値の1024が設定されます。連続したPUTコールの全合計は、途中でバッファ・フラッシュをしないかぎり、32767を超えません。

例外

これらの例外については、「例外」を参照してください。

INVALID_FILEHANDLE
INVALID_OPERATION
WRITE_ERROR

PUTFプロシージャ

このプロシージャは、書式付きのPUTプロシージャです。これは、制限付きのprintf()のように動作します。「PUTF_NCHARプロシージャ」も参照してください。

構文

UTL_FILE.PUTF (
file    IN UTL_FILE.FILE_TYPE,
format  IN VARCHAR2,
[arg1   IN VARCHAR2  DEFAULT NULL,
. . .
arg5    IN VARCHAR2  DEFAULT NULL]);

パラメータ

表11-24 PUTFプロシージャのパラメータ

パラメータ

説明

file

FOPENコールが戻すアクティブなファイル・ハンドル。

format

テキストや書式文字\nと%sを含むことができる書式文字列

arg1..arg5

1から5個までのオプションの引数文字列

引数文字列は、書式文字列内の%s書式指定文字に、順序正しく置き換えられます。引数より多い書式指定文字が書式パラメータ文字列内にある場合は、引数のない各%sは空の文字列に置き換えられます。

使用上の注意

書式文字列には任意のテキストを指定できますが、文字列%sと\nには特別な意味があります。

文字列

意味

%s

この文字列を引数リスト内の次の引数の文字列値に置き換えます。

\n

適切なプラットフォーム固有の行終了記号に置き換えます。

例外

これらの例外については、「例外」を参照してください。

INVALID_FILEHANDLE
INVALID_OPERATION
WRITE_ERROR
CHARSETMISMATCH

ファイルがバイト・モード操作用にオープンしている場合は、INVALID_OPERATIONがスローされます。FOPENでなくFOPEN_NCHARを使用してファイルをオープンした場合は、CHARSETMISMATCHがスローされます。

例

「例」を参照してください。

PUTF_NCHARプロシージャ

このプロシージャは、PUT_NCHARプロシージャの書式化されたバージョンです。PUTF_NCHARを使用すると、データベース・キャラクタ・セットではなくUnicodeでテキスト・ファイルの書込みを実行できます。これは、書式要素\nおよび%sを含む書式文字列を受け入れ、書式文字列内の%sの連続出現を最大で5つの引数に置き換えることができます。書式文字列および引数に想定されるデータ・タイプは、NVARCHAR2です。

別のデータ型の変数が指定されていると、テキストの書式設定前に、PL/SQLでNVARCHAR2への暗黙的な変換が実行されます。書式化されたテキストは、ファイル・ハンドルが示すファイルにUTF-8キャラクタ・セットで書き込まれます。このファイルは、各国語キャラクタ・セット・モードでオープンされる必要があります。

構文

UTL_FILE.PUTF_NCHAR (
file    IN UTL_FILE.FILE_TYPE,
format  IN NVARCHAR2,
[arg1   IN NVARCHAR2  DEFAULT NULL,
. . .
arg5    IN NVARCHAR2  DEFAULT NULL]);

パラメータ

表11-25 PUTF_NCHARプロシージャのパラメータ

パラメータ

説明

file

FOPEN_NCHARコールが戻すアクティブなファイル・ハンドル

このファイルは読込み用(モードr)にオープンされる必要があります。

format

テキストや書式文字\nと%sを含むことができる書式文字列

arg1..arg5

1から5個までのオプションの引数文字列

引数文字列は、書式文字列内の%s書式文字に、順序正しく置き換えられます。引数より多い書式文字が書式文字列内にある場合は、引数のない各%sは空の文字列に置き換えられます。

使用上の注意

bufferパラメータの最大サイズは、より小さいサイズをFOPENに指定しないかぎり、32767バイトです。指定しない場合は、デフォルト値の1024が設定されます。連続したPUTコールの全合計は、途中でバッファ・フラッシュをしないかぎり、32767を超えません。

例外

これらの例外については、「例外」を参照してください。

INVALID_FILEHANDLE
INVALID_OPERATION
WRITE_ERROR
CHARSETMISMATCH

ファイルがバイト・モード操作用にオープンしている場合は、INVALID_OPERATIONがスローされます。FOPEN_NCHARでなくFOPENでファイルをオープンした場合は、CHARSETMISMATCHがスローされます。

12 UTL_IDENT

UTL_IDENTパッケージは、PL/SQLを実行しているデータベースまたはクライアント(TimesTenとOracle Database、サーバーとクライアントなど)を示します。PL/SQLを実行する各データベースまたはクライアントには、このパッケージのコピーがあります。

この章の内容は次のとおりです。

- UTL_IDENTの使用

- 概要

- セキュリティ・モデル

- 定数

- 例

UTL_IDENTの使用

この項では、UTL_IDENTパッケージの使用に関連するトピックについて説明します。

- 概要

- セキュリティ・モデル

- 定数

- 例

概要

UTL_IDENTパッケージは、PL/SQLを実行しているのがTimesTen、Oracle Databaseクライアント、Oracle DatabaseサーバーまたはOracle Formsであるかを示します。これらにはそれぞれ、定数に適切な設定を持つUTL_IDENTのバージョンがあります。

UTL_IDENTパッケージの主な使用例は、次に示すように、Oracle Database、TimesTen、またはOracle FormsなどのクライアントでサポートされているPL/SQLパッケージの条件付きコンパイルを対象にしています。

$if utl_ident.is_oracle_server $then
[...Run code supported for Oracle Database...]
$elsif utl_ident.is_timesten $then
[...code supported for TimesTen Database...]
$end

「例」も参照してください。

セキュリティ・モデル

UTL_IDENTパッケージは、パッケージ所有者SYSとして実行されます。パブリック・シノニムUTL_IDENTおよびこのパッケージに対するEXECUTE権限がPUBLICに付与されます。

定数

UTL_IDENTパッケージでは、表12-1に示す定数が使用されます(ここではTimesTenインストールでの設定も示します)。

表12-1 UTL_IDENTの定数

定数

タイプ

値

説明

IS_ORACLE_SERVER

BOOLEAN

FALSE

Oracle Databaseで実行されるPL/SQLです。

IS_ORACLE_CLIENT

BOOLEAN

FALSE

Oracle Clientで実行されるPL/SQLです。

IS_ORACLE_FORMS

BOOLEAN

FALSE

Oracle Formsで実行されるPL/SQLです。

IS_TIMESTEN

BOOLEAN

TRUE

TimesTenで実行されるPL/SQLです。

例

この例は、使用されるデータベースの情報を提供するUTL_IDENTとTT_DB_VERSIONパッケージを使用するIS_CLOB_SUPPORTEDファンクションを作成および実行するスクリプトの出力を示します。このファンクションでは、データベースがTimesTenであるかの判断にUTL_IDENTを使用し、TimesTenのバージョンの判断にTT_DB_VERSIONを使用します。VER_LE_1121は、TimesTen 11.2.1リリースではTRUEであり、TimesTen 11gリリース2(11.2.2)のリリースではFALSEです。この例では、VER_LE_1121がFALSEと判断されたので、これはTimesTen 11gリリース2(11.2.2)リリースであり、LOBはサポートされるとみなすことができます。次に例では、CLOB列を含む表を作成し、表のDESCRIBE出力を示します。

create or replace function is_clob_supported return boolean
as
begin
$if utl_ident.is_oracle_server
$then
return true;
$elsif utl_ident.is_timesten
$then
$if tt_db_version.ver_le_1121
$then
return false; -- CLOB datatype was introduced in 11g Release 2 (11.2.2)
$else
return true;
$end
$end
end;

Function created.

show errors;
No errors.

begin
if is_clob_supported
then
execute immediate 'create table mytab (mydata clob)';
else
execute immediate 'create table mytab (mydata varchar2(4000000))';
end if;
end;

PL/SQL procedure successfully completed.

describe mytab;

Table MYSCHEMA.MYTAB:
Columns:
MYDATA                          CLOB

1 table found.
(primary key columns are indicated with *)

(SQLスクリプトからコマンドを実行した後、出力が表示されます。)

13 UTL_RAW

UTL_RAWパッケージは、RAWデータ・タイプを操作するためのSQLファンクションを提供します。

この章の内容は次のとおりです。

- UTL_RAWの使用

- 概要

- 使用上の注意

- UTL_RAWサブプログラムの要約

UTL_RAWの使用

- 概要

- 使用上の注意

概要

通常のSQLファンクションは複数のRAW値で作動せず、PL/SQLはRAWデータ・タイプとCHARデータ・タイプの間でのオーバーロードができないため、このパッケージが必要になります。

UTL_RAWは、データベース環境に固有のものではなく、他の環境でも使用できます。このため、DBMSのかわりに、UTLという接頭辞がパッケージに付けられています。

使用上の注意

UTL_RAWでは、RAWレコードを多くの要素で構成できます。RAWデータ・タイプを使用すると、キャラクタ・セット変換は実行されず、リモート・プロシージャ・コールによる転送時にRAW値は元の形式で保持されます。

また、RAWファンクションによって、以前はhextorawファンクションとrawtohex SQLファンクションに限定されていたバイナリ・データを操作できます。

RAW値を戻すファンクションは、16進数エンコーディングでその処理を行います。

UTL_RAWサブプログラムの要約

表13-1 UTL_RAWパッケージのサブプログラム

サブプログラム

説明

BIT_ANDファンクション

2つのRAW値でビット単位の論理演算ANDを実行し、結果のRAWを戻します。

BIT_COMPLEMENTファンクション

1つのRAW値でビット単位の論理演算COMPLEMENTを実行して、結果のRAWを戻します。

BIT_ORファンクション

2つのRAW値でビット単位の論理演算ORを実行し、結果のRAWを戻します。

BIT_XORファンクション

2つのRAW値でビット単位の論理演算XOR(排他OR)を実行して、結果のRAWを戻します。

CAST_FROM_BINARY_DOUBLEファンクション

BINARY_DOUBLE値のRAWバイナリ表現を戻します。

CAST_FROM_BINARY_FLOATファンクション

BINARY_FLOAT値のRAWバイナリ表現を戻します。

CAST_FROM_BINARY_INTEGERファンクション

BINARY_INTEGER値のRAWバイナリ表現を戻します。

CAST_FROM_NUMBERファンクション

NUMBER値のRAWバイナリ表現を戻します。

CAST_TO_BINARY_DOUBLEファンクション

BINARY_DOUBLE値のRAWバイナリ表現をBINARY_DOUBLEに変換します。

CAST_TO_BINARY_FLOATファンクション

BINARY_FLOAT値のRAWバイナリ表現をBINARY_FLOATに変換します。

CAST_TO_BINARY_INTEGERファンクション

BINARY_INTEGER値のRAWバイナリ表現をBINARY_INTEGERに変換します。

CAST_TO_NUMBERファンクション

NUMBER値のRAWバイナリ表現をNUMBERに変換します。

CAST_TO_NVARCHAR2ファンクション

NVARCHAR2値にRAW値をキャストします。

CAST_TO_RAWファンクション

RAW値にVARCHAR2値をキャストします。

CAST_TO_VARCHAR2ファンクション

VARCHAR2値にRAW値をキャストします。

COMPAREファンクション

2つのRAW値を比較します。

CONCATファンクション

最大12のRAW値を単一のRAWに連結します。

CONVERTファンクション

RAW値をあるキャラクタ・セットから別のキャラクタ・セットに変換して、結果のRAWを戻します。

COPIESファンクション

RAW値を指定回数コピーして、連結されたRAW値を戻します。

LENGTHファンクション

RAW値の長さをバイトで戻します。

OVERLAYファンクション

ターゲットRAW値の指定部分をオーバーレイRAW値でオーバーレイします(指定したバイト位置から開始され、指定したバイト数だけ進められます)。

REVERSEファンクション

RAW値内のバイトの順序を逆にします。

SUBSTRファンクション

指定された開始位置から指定されたバイト数だけ、RAW値のサブストリングを戻します。

TRANSLATEファンクション

指定された変換RAW値のバイトに従って、入力RAW値内の指定されたバイトを変換します。

TRANSLITERATEファンクション

指定された文字変換RAW値のバイトに従って、入力RAW値内の指定されたバイトを変換します。

XRANGEファンクション

指定されたバイト・コードで開始および終了する連続する1バイト・エンコーディングを含むRAW値を戻します。

注意:

- PLS_INTEGERデータ・タイプとBINARY_INTEGERデータ・タイプは同じです。このドキュメントでは、リファレンス情報でデータ・タイプ(表タイプ、レコード・タイプ、サブプログラム・パラメータ、サブプログラム戻り値など)を示す場合にBINARY_INTEGERを使用しますが、説明および例ではいずれも使用される場合があります。

- INTEGERデータ・タイプとNUMBER(38)データ・タイプも同じです。このドキュメントでは、全体をとおしてINTEGERを使用します。

BIT_ANDファンクション

このファンクションは、2つの提供されたRAW値でビット単位の論理演算ANDを実行し、結果のRAWを戻します。

構文

UTL_RAW.BIT_AND (
r1 IN RAW,
r2 IN RAW)
RETURN RAW;

パラメータ

表13-2 BIT_ANDファンクションのパラメータ

パラメータ

説明

r1

AND演算の1つ目のRAW値

r2

AND演算の2つ目のRAW値

戻り値

AND演算の結果、またはNULL(いずれかの入力値がNULLの場合)

使用上の注意

r1とr2の長さが異なる場合、2つのRAW値のうち短い方の最終バイトが終わると演算は終了され、長い方のRAW値の未処理部分が部分的な結果に追加されます。結果の長さは、2つの入力値のうち長い方に等しくなります。

BIT_COMPLEMENTファンクション

このファンクションは、提供されたRAW値でビット単位の論理演算COMPLEMENTを実行し、結果のRAWを戻します。結果の長さは、入力RAWの長さに等しくなります。

構文

UTL_RAW.BIT_COMPLEMENT (
r IN RAW)
RETURN RAW;

パラメータ

表13-3 BIT_COMPLEMENTファンクションのパラメータ

パラメータ

説明

r

COMPLEMENT演算のRAW値

戻り値

COMPLEMENT演算の結果、またはNULL(入力値がNULLの場合)

BIT_ORファンクション

このファンクションは、2つの提供されたRAW値でビット単位の論理演算ORを実行し、結果のRAWを戻します。

構文

UTL_RAW.BIT_OR (
r1 IN RAW,
r2 IN RAW)
RETURN RAW;

パラメータ

表13-4 BIT_ORファンクションのパラメータ

パラメータ

説明

r1

OR演算の1つ目のRAW値

r2

OR演算の2つ目のRAW値

戻り値

OR演算の結果、またはNULL(いずれかの入力値がNULLの場合)

使用上の注意

r1とr2の長さが異なる場合、2つのRAW値のうち短い方の最終バイトが終わると演算は終了され、長い方のRAW値の未処理部分が部分的な結果に追加されます。結果の長さは、2つの入力値のうち長い方に等しくなります。

BIT_XORファンクション

このファンクションは、2つの提供されたRAW値でビット単位の論理演算XOR(排他OR)を実行し、結果のRAWを戻します。

構文

UTL_RAW.BIT_XOR (
r1 IN RAW,
r2 IN RAW)
RETURN RAW;

パラメータ

表13-5 BIT_XORファンクションのパラメータ

パラメータ

説明

r1

XOR演算の1つ目のRAW値

r2

XOR演算の2つ目のRAW値

戻り値

XOR演算の結果、またはNULL(いずれかの入力値がNULLの場合)

使用上の注意

r1とr2の長さが異なる場合、2つのRAW値のうち短い方の最終バイトが終わると演算は終了され、長い方のRAW値の未処理部分が部分的な結果に追加されます。結果の長さは、2つの入力値のうち長い方に等しくなります。

CAST_FROM_BINARY_DOUBLEファンクション

このファンクションは、BINARY_DOUBLE値のRAWバイナリ表現を戻します。

構文

UTL_RAW.CAST_FROM_BINARY_DOUBLE(
n          IN BINARY_DOUBLE,
endianess  IN BINARY_INTEGER DEFAULT 1)
RETURN RAW;

パラメータ

表13-6 CAST_FROM_BINARY_DOUBLEファンクションのパラメータ

パラメータ

説明

n

BINARY_DOUBLE値

endianess

エンディアンを示すBINARY_INTEGER値

このファンクションは、定義済定数big_endian、little_endianおよびmachine_endianを認識します。デフォルトはbig_endianです。

戻り値

BINARY_DOUBLE値のRAWバイナリ表現、またはNULL(入力がNULLの場合)

使用上の注意

- 8バイトのBINARY_DOUBLE値からIEEE 754倍精度形式へのマッピングは、次のとおりです。

byte 0: bit 63 ~ bit 56
byte 1: bit 55 ~ bit 48
byte 2: bit 47 ~ bit 40
byte 3: bit 39 ~ bit 32
byte 4: bit 31 ~ bit 24
byte 5: bit 23 ~ bit 16
byte 6: bit 15 ~ bit  8
byte 7: bit  7 ~ bit  0

- パラメータendianessは、BINARY_DOUBLE値のバイトがRAW値のバイトにマップされる方法を指定します。次のマトリックスのrb0からrb7はRAWのバイトを示し、db0からdb7はBINARY_DOUBLEのバイトを示しています。

Endianess

rb0

rb1

rb2

rb3

rb4

rb5

rb6

rb7

big_endian

db0

db1

db2

db3

db4

db5

db6

db7

little_endian

db7

db6

db5

db4

db3

db2

db1

db0

- machine_endianを指定すると、BINARY_DOUBLE引数の8バイトがRAW戻り値に直接コピーされます。ユーザーがビッグエンディアン・システムでbig_endianを、またはリトルエンディアン・システムでlittle_endianを指定した場合と同様です。

CAST_FROM_BINARY_FLOATファンクション

このファンクションは、BINARY_FLOAT値のRAWバイナリ表現を戻します。

構文

UTL_RAW.CAST_FROM_BINARY_FLOAT(
n          IN BINARY_FLOAT,
endianess  IN BINARY_INTEGER DEFAULT 1)
RETURN RAW;

パラメータ

表13-7 CAST_FROM_BINARY_FLOATファンクションのパラメータ

パラメータ

説明

n

BINARY_FLOAT値

endianess

エンディアンを示すBINARY_INTEGER値

このファンクションは、定義済定数big_endian、little_endianおよびmachine_endianを認識します。デフォルトはbig_endianです。

戻り値

BINARY_FLOAT値のRAWバイナリ表現、またはNULL(入力がNULLの場合)

使用上の注意

- 4バイトのBINARY_FLOAT値からIEEE 754単精度形式へのマッピングは、次のとおりです。

byte 0: bit 31 ~ bit 24
byte 1: bit 23 ~ bit 16
byte 2: bit 15 ~ bit  8
byte 3: bit 7 ~  bit  0

- パラメータendianessは、BINARY_FLOAT値のバイトをRAW値のバイトにマップする方法を指定します。次のマトリックスのrb0からrb3はRAWのバイトを示し、fb0からfb3はBINARY_FLOATのバイトを示しています。

Endianess

rb0

rb1

rb2

rb3

big_endian

fbo

fb1

fb2

fb3

little_endian

fb3

fb2

fb1

fb0

- machine_endianを指定すると、BINARY_FLOAT引数の4バイトがRAW戻り値に直接コピーされます。ユーザーがビッグエンディアン・システムでbig_endianを、またはリトルエンディアン・システムでlittle_endianを指定した場合と同様です。

CAST_FROM_BINARY_INTEGERファンクション

このファンクションは、BINARY_INTEGER値のRAWバイナリ表現を戻します。

構文

UTL_RAW.CAST_FROM_BINARY_INTEGER (
n          IN BINARY_INTEGER
endianess  IN BINARY_INTEGER DEFAULT 1)
RETURN RAW;

パラメータ

表13-8 CAST_FROM_BINARY_INTEGERファンクションのパラメータ

パラメータ

説明

n

BINARY_INTEGER値。

endianess

エンディアンを示すBINARY_INTEGER値

このファンクションは、定義済定数big_endian、little_endianおよびmachine_endianを認識します。デフォルトはbig_endianです。

戻り値

BINARY_INTEGER値のRAWバイナリ表現、またはNULL(入力がNULLの場合)

CAST_FROM_NUMBERファンクション

このファンクションは、NUMBER値のRAWバイナリ表現を戻します。

構文

UTL_RAW.CAST_FROM_NUMBER (
n  IN NUMBER)
RETURN RAW;

パラメータ

表13-9 CAST_FROM_NUMBERファンクションのパラメータ

パラメータ

説明

n

NUMBER値

戻り値

NUMBER値のRAWバイナリ表現、またはNULL(入力がNULLの場合)

CAST_TO_BINARY_DOUBLEファンクション

このファンクションは、BINARY_DOUBLE値のRAWバイナリ表現をBINARY_DOUBLE値に変換します。

構文

UTL_RAW.CAST_TO_BINARY_DOUBLE (
r          IN RAW
endianess  IN BINARY_INTEGER DEFAULT 1)
RETURN BINARY_DOUBLE;

パラメータ

表13-10 CAST_TO_BINARY_DOUBLEファンクションのパラメータ

パラメータ

説明

r

BINARY_DOUBLE値のRAWバイナリ表現

endianess

エンディアンを示すBINARY_INTEGER値

このファンクションは、定義済定数big_endian、little_endianおよびmachine_endianを認識します。デフォルトはbig_endianです。

戻り値

BINARY_DOUBLE値、またはNULL(入力がNULLの場合)

使用上の注意

- RAW引数が8バイトを超える場合、最初の8バイトのみが使用され、残りのバイトは無視されます。結果が-0の場合、+0が戻されます。結果がNaNの場合、値BINARY_DOUBLE_NANが戻されます。

- 8バイトのBINARY_DOUBLE値からIEEE 754倍精度形式へのマッピングは、次のとおりです。

byte 0: bit 63 ~ bit 56
byte 1: bit 55 ~ bit 48
byte 2: bit 47 ~ bit 40
byte 3: bit 39 ~ bit 32
byte 4: bit 31 ~ bit 24
byte 5: bit 23 ~ bit 16
byte 6: bit 15 ~ bit  8
byte 7: bit  7 ~ bit  0

- パラメータendianessは、BINARY_DOUBLE値のバイトがRAW値のバイトにマップされる方法を指定します。次のマトリックスのrb0からrb7はRAW内のバイトを示し、db0からdb7はBINARY_DOUBLE内のバイトを示しています。

Endianess

rb0

rb1

rb2

rb3

rb4

rb5

rb6

rb7

big_endian

db0

db1

db2

db3

db4

db5

db6

db7

little_endian

db7

db6

db5

db4

db3

db2

db1

db0

- machine_endianを指定すると、RAW引数の8バイトがBINARY_DOUBLE戻り値に直接コピーされます。ユーザーがビッグエンディアン・システムでbig_endianを、またはリトルエンディアン・システムでlittle_endianを指定した場合と同様です。

例外

RAW引数が8バイト未満の場合、VALUE_ERROR例外が発生します。

CAST_TO_BINARY_FLOATファンクション

このファンクションは、BINARY_FLOAT値のRAWバイナリ表現をBINARY_FLOAT値に変換します。

構文

UTL_RAW.CAST_TO_BINARY_FLOAT (
r          IN RAW
endianess  IN BINARY_INTEGER DEFAULT 1)
RETURN BINARY_FLOAT;

パラメータ

表13-11 CAST_TO_BINARY_FLOATファンクション・パラメータ

パラメータ

説明

r

BINARY_FLOAT値のRAWバイナリ表現

endianess

エンディアンを示すBINARY_INTEGER値

このファンクションは、定義済定数big_endian、little_endianおよびmachine_endianを認識します。デフォルトはbig_endianです。

戻り値

BINARY_FLOAT値、またはNULL(入力がNULLの場合)

使用上の注意

- RAW引数が4バイトを超える場合、最初の4バイトのみが使用され、残りのバイトは無視されます。結果が-0の場合、+0が戻されます。結果がNaNの場合、値BINARY_FLOAT_NANが戻されます。

- 4バイトのBINARY_FLOAT値からIEEE 754単精度形式へのマッピングは、次のとおりです。

byte 0: bit 31 ~ bit 24
byte 1: bit 23 ~ bit 16
byte 2: bit 15 ~ bit  8
byte 3: bit 7 ~  bit  0

- パラメータendianessは、BINARY_FLOAT値のバイトをRAW値のバイトにマップする方法を指定します。次のマトリックスのrb0からrb3はRAW内のバイトを示し、fb0からfb3はBINARY_FLOAT内のバイトを示しています。

Endianess

rb0

rb1

rb2

rb3

big_endian

fbo

fb1

fb2

fb3

little_endian

fb3

fb2

fb1

fb0

- machine_endianを指定すると、RAW引数の4バイトがBINARY_FLOAT戻り値に直接コピーされます。ユーザーがビッグエンディアン・システムでbig_endianを、またはリトルエンディアン・システムでlittle_endianを指定した場合と同様です。

例外

RAW引数が4バイト未満の場合、VALUE_ERROR例外が発生します。

CAST_TO_BINARY_INTEGERファンクション

このファンクションは、BINARY_INTEGER値のRAWバイナリ表現をBINARY_INTEGER値に変換します。

構文

UTL_RAW.CAST_TO_BINARY_INTEGER (
r          IN RAW
endianess  IN BINARY_INTEGER DEFAULT 1)
RETURN BINARY_INTEGER;

パラメータ

表13-12 CAST_TO_BINARY_INTEGERファンクションのパラメータ

パラメータ

説明

r

BINARY_INTEGER値のRAWバイナリ表現

endianess

エンディアンを示すBINARY_INTEGER値

このファンクションは、定義済定数big_endian、little_endianおよびmachine_endianを認識します。デフォルトはbig_endianです。

戻り値

BINARY_INTEGER値、またはNULL(入力がNULLの場合)

CAST_TO_NUMBERファンクション

このファンクションは、NUMBER値のRAWバイナリ表現をNUMBER値に変換します。

構文

UTL_RAW.CAST_TO_NUMBER (
r  IN RAW)
RETURN NUMBER;

パラメータ

表13-13 CAST_TO_NUMBERファンクションのパラメータ

パラメータ

説明

r

NUMBER値のRAWバイナリ表現

戻り値

NUMBER値、またはNULL(入力がNULLの場合)

CAST_TO_NVARCHAR2ファンクション

このファンクションは、一定数のデータ・バイトを使用して表したRAW値を、同じ数のデータ・バイトのNVARCHAR2値にキャストします。

注意:
NVARCHAR2への変換時、そのNVARCHAR2値内の文字に対して現行のグローバリゼーション・サポート・キャラクタ・セットが使用されます。

構文

UTL_RAW.CAST_TO_NVARCHAR2 (
r IN RAW)
RETURN NVARCHAR2;

パラメータ

表13-14 CAST_TO_NVARCHAR2ファンクションのパラメータ

パラメータ

説明

r

NVARCHAR2値に変更するRAW値(先行する長さのフィールドなし)

戻り値

入力RAW値から変換されたデータ、またはNULL(入力がNULLの場合)

CAST_TO_RAWファンクション

このファンクションは、一定数のデータ・バイトを使用して表したVARCHAR2値を、同じ数のデータ・バイトのRAW値にキャストします。データ自体は変更されませんが、そのデータ・タイプはRAWデータ・タイプに再変換されます。

構文

UTL_RAW.CAST_TO_RAW (
c  IN VARCHAR2)
RETURN RAW;

パラメータ

表13-15 CAST_TO_RAWファンクションのパラメータ

パラメータ

説明

c

RAW値に変更されるVARCHAR2値

戻り値

先行する長さのフィールドはない、入力値と同じバイト長の、入力VARCHAR2値から変換されたデータ、またはNULL(入力がNULLの場合)

CAST_TO_VARCHAR2ファンクション

このファンクションは、一定数のデータ・バイトを使用して表したRAW値を、同じ数のデータ・バイトのVARCHAR2値にキャストします。

注意:
VARCHAR2への変換時、そのVARCHAR2値内の文字に対して現行のグローバリゼーション・サポート・キャラクタ・セットが使用されます。

構文

UTL_RAW.CAST_TO_VARCHAR2 (
r IN RAW)
RETURN VARCHAR2;

パラメータ

表13-16 CAST_TO_VARCHAR2ファンクションのパラメータ

パラメータ

説明

r

VARCHAR2値に変更するRAW値(先行する長さのフィールドなし)

戻り値

入力RAW値から変換されたデータ、またはNULL(入力がNULLの場合)

COMPAREファンクション

このファンクションは、2つのRAW値を比較します。それぞれの値の長さが異なる場合、短い方の値は、オプションのpadパラメータに従って右側に拡張されます。

構文

UTL_RAW.COMPARE (
r1  IN RAW,
r2  IN RAW
[,pad IN RAW DEFAULT NULL])
RETURN NUMBER;

パラメータ

表13-17 COMPAREファンクションのパラメータ

パラメータ

説明

r1

比較する1つ目のRAW値

注意: 値はNULLまたはゼロ長です。

r2

比較する2つ目のRAW値

注意: 値はNULLまたはゼロ長です。

pad

入力値の短い方を延長するバイト(デフォルト: x'00')

戻り値

2つの入力値を比較した場合は最初の不一致バイトの位置番号(1から番号付けされている)に等しいNUMBER値で、入力値が同じまたは両方がNULLの場合は0

CONCATファンクション

このファンクションは、最大12のRAW値を単一のRAW値に連結します。連結後のサイズが32 KBを超えると、エラーが戻されます。

構文

UTL_RAW.CONCAT (
r1  IN RAW DEFAULT NULL,
r2  IN RAW DEFAULT NULL,
r3  IN RAW DEFAULT NULL,
r4  IN RAW DEFAULT NULL,
r5  IN RAW DEFAULT NULL,
r6  IN RAW DEFAULT NULL,
r7  IN RAW DEFAULT NULL,
r8  IN RAW DEFAULT NULL,
r9  IN RAW DEFAULT NULL,
r10 IN RAW DEFAULT NULL,
r11 IN RAW DEFAULT NULL,
r12 IN RAW DEFAULT NULL)
RETURN RAW;

パラメータ

項目r1...r12は、連結するRAW項目です。

戻り値

連結された入力値で構成されるRAW値

例外

入力の長さの合計がRAW値で許容される最大長(32767バイト)を超えると、エラーが発生します。

CONVERTファンクション

このファンクションは、RAW値をあるキャラクタ・セットから別のキャラクタ・セットに変換して、結果のRAWを戻します。

どちらのキャラクタ・セットも、データベースに定義されているサポートされるキャラクタ・セットである必要があります。

構文

UTL_RAW.CONVERT (
r            IN RAW,
to_charset   IN VARCHAR2,
from_charset IN VARCHAR2)
RETURN RAW;

パラメータ

表13-18 CONVERTファンクションのパラメータ

パラメータ

説明

r

変換するRAWバイト列。

to_charset

入力値の変換後のグローバリゼーション・サポート・キャラクタ・セットの名前

from_charset

入力値の変換前のグローバリゼーション・サポート・キャラクタ・セットの名前

戻り値

指定したキャラクタ・セットに従って変換されたバイト文字列

例外

VALUE_ERRORは、次のいずれかの場合に発生します。

- 入力バイト文字列が欠落しているか、NULLまたは長さが0(ゼロ)。

- from_charsetまたはto_charsetが失われたか、NULLまたは長さが0。

- from_charsetまたはto_charsetが無効であるか、サポートされていない。

COPIESファンクション

このファンクションは、指定されたRAW値を指定された回数だけコピーし、連結して戻します。

構文

UTL_RAW.COPIES (
r IN RAW,
n IN NUMBER)
RETURN RAW;

パラメータ

表13-19 COPIESファンクションのパラメータ

パラメータ

説明

r

コピーするRAW値

n

RAW値をコピーする回数

注意: これは正の値である必要があります。

戻り値

指定された回数だけコピーされ、連結されたRAW値

例外

VALUE_ERRORは、次のいずれかの場合に発生します。

- コピーする値が失われたか、NULLまたは長さが0(ゼロ)。

- 値をコピーする回数が0以下。

- 結果の長さがRAW値で許容される最大長(32767バイト)を超える場合。

LENGTHファンクション

このファンクションは、RAW値の長さをバイト単位で戻します。

構文

UTL_RAW.LENGTH (
r  IN RAW)
RETURN NUMBER;

パラメータ

表13-20 LENGTHファンクション・パラメータ

パラメータ

説明

r

測定されるRAWバイトストリーム

戻り値

RAW値の長さを示すNUMBER値(バイト単位)

OVERLAYファンクション

このファンクションは、ターゲットRAW値の指定部分をオーバーレイRAWでオーバーレイします(指定したバイト位置から開始され、指定したバイト数だけ進められます)。

構文

UTL_RAW.OVERLAY (
overlay_str IN RAW,
target      IN RAW
[,pos         IN BINARY_INTEGER DEFAULT 1,
len         IN BINARY_INTEGER DEFAULT NULL,
pad         IN RAW            DEFAULT NULL])
RETURN RAW;

パラメータ

表13-21 OVERLAYファンクションのパラメータ

パラメータ

説明

overlay_str

targetをオーバーレイするために使用するバイト列。

target

オーバーレイされるターゲットのバイト文字列

pos

オーバーレイを開始するターゲットのバイト位置(デフォルトは1で1から番号付けされている)

len

オーバーレイするバイト数(デフォルト: overlay_strの長さ)

pad

lenがoverlay_strの長さを超えた場合、またはposがtargetの長さを超えた場合に使用するpadバイト(デフォルト: x'00')

戻り値

指定どおりにオーバーレイされたRAWターゲット・バイト値

使用上の注意

overlay_strがlenバイト未満の場合は、padバイトを使用してlenバイトまで延長されます。overlay_strがlenバイトを超える場合は、overlay_strの余分なバイトは無視されます。targetの位置posから始まるlenバイトがtargetの長さを超える場合、overlay_str全体の長さまでtargetが延長されます。

lenを指定する場合、0以上である必要があります。posを指定する場合、1以上である必要があります。posがtargetの長さを超える場合、targetはpadバイトを使用してposの位置までパディングされ、さらにtargetはoverlay_strバイトを使用して延長されます。

例外

VALUE_ERRORは、次のいずれかの場合に発生します。

- overlay_strがNULLまたは長さが0(ゼロ)の場合。

- targetが失われたか、未定義の場合。

- targetの長さがRAW値の最大長(32767バイト)を超える場合。

- lenが0未満の場合。

- posが0以下の場合。

REVERSEファンクション

このファンクションは、RAWのバイトの順序をすべて逆転させます。たとえば、x'0102F3'は逆転されてx'F30201'になり、'xyz'は逆転されて'zyx'になります。結果の長さは入力の長さと同じです。

構文

UTL_RAW.REVERSE (
r IN RAW)
RETURN RAW;

パラメータ

表13-22 REVERSEファンクションのパラメータ

パラメータ

説明

r

逆転するRAW値

戻り値

入力値の逆転であるRAW値

例外

入力値がNULLまたは長さが0(ゼロ)の場合にVALUE_ERRORが発生します。

SUBSTRファンクション

このファンクションは、指定されたバイト数および開始位置のRAW値のサブストリングを戻します。

構文

UTL_RAW.SUBSTR (
r   IN RAW,
pos IN BINARY_INTEGER
[,len IN BINARY_INTEGER DEFAULT NULL])
RETURN RAW;

パラメータ

表13-23 SUBSTRファンクションのパラメータ

パラメータ

説明

r

サブストリングの抽出元のRAWバイト文字列

pos

入力バイト文字列の先頭から前方へカウントされるか(正の値)、末尾から後方へカウントされる(負の値)抽出を開始するバイト位置

len

posからバイト文字列の末尾方向へカウントされる抽出するバイト数(デフォルト: RAWバイト文字列の末尾方向)

戻り値

開始位置posからlenバイト分のRAWサブストリング、またはNULL(入力がNULLの場合)

使用上の注意

posが正の値の場合、SUBSTRはRAWバイト文字列の先頭からカウントされ、最初のバイトが見つけられます。posが負の値の場合、SUBSTRはRAWバイト文字列の末尾から後方にカウントされます。posの値に0は指定できません。

lenには正の値を指定する必要があります。lenを省略すると、SUBSTRはRAWバイト文字列の末尾までのすべてのバイトを戻します。

例外

VALUE_ERRORは、次のいずれかの場合に発生します。

- posが0であるか、またはrの長さを超える場合。

- lenが0以下の場合。

- lenが、(rの長さ) - (pos-1) より大きい場合。

例

例1: ttIsqlで実行される次の例では、開始位置として、入力RAW値の末尾から15バイト後方にカウントし、そのポイントから開始して5バイト分のサブストリングを取得します。

declare
sr raw(32767);
r raw(32767);

begin
sr       := hextoraw('1236567812125612344434341234567890ABAA1234');
r := UTL_RAW.SUBSTR(sr, -15, 5);
dbms_output.put_line('source raw: ' || sr);
dbms_output.put_line('return raw: ' || r);
end;
/

結果は次のとおりです。

source raw: 1236567812125612344434341234567890ABAA1234
return raw: 5612344434

PL/SQL procedure successfully completed.

この機能の説明がより明確にわかるように、入力と出力を示します。

source raw: 12 36 56 78 12 12 56 12 34 44 34 34 12 34 56 78 90 AB AA 12 34
return raw: 56 12 34 44 34

サブストリングは、末尾から15バイト目に始まります。

例2: ttIsqlで実行される次の例は、前の例と入力RAW値と開始ポイントが同じですが、lenが指定されないため、サブストリングは開始ポイントから入力の末尾まで取得されます。

declare
sr raw(32767);
r raw(32767);
begin
sr       := hextoraw('1236567812125612344434341234567890ABAA1234');
r := UTL_RAW.SUBSTR(sr, -15);
dbms_output.put_line('source raw: ' || sr);
dbms_output.put_line('return raw: ' || r);
end;
/

次に結果を示します。

source raw: 1236567812125612344434341234567890ABAA1234
return raw: 5612344434341234567890ABAA1234

この機能の説明がより明確にわかるように、入力と出力を示します。

source raw: 12 36 56 78 12 12 56 12 34 44 34 34 12 34 56 78 90 AB AA 12 34
return raw: 56 12 34 44 34 34 12 34 56 78 90 AB AA 12 34

TRANSLATEファンクション

このファンクションは、入力バイトのセット、入力バイト内で検索する変換前のバイトのセット、および変換後の対応するバイトのセットが指定されている場合に、RAW値のバイト単位の変換を実行します。指定したfrom_set内のバイトが入力RAW値で見つかった場合は、to_set内の対応するバイトに変換されて出力RAW値が生成され、to_set内に対応するバイトがない場合は出力RAW値に含められません。from_setにはない入力RAW値内のバイトは、単にそのまま出力RAW値にコピーされます。

構文

UTL_RAW.TRANSLATE (
r        IN RAW,
from_set IN RAW,
to_set   IN RAW)
RETURN RAW;

注意:
コール・シーケンス内でのto_setとfrom_setの順番が、TRANSLITERATEとは逆であることに注意してください。

パラメータ

表13-24 TRANSLATEファンクションのパラメータ

パラメータ

説明

r

適用可能な場合に、バイトが変換されるRAWソース・バイト文字列

from_set

ソース・バイト文字列で検索されるRAWバイト・コード

見つかると結果で変換されます。

to_set

変換後のRAWバイト・コード

from_setバイトがソース・バイト文字列で見つかると、対応するto_setバイトに結果で変換されます(適用可能な場合)。

戻り値

変換後のバイト文字列を含むRAW値

使用上の注意

- to_setがfrom_setよりも短い場合、余ったfrom_setバイトに対応する変換バイトはありません。そのようなfrom_setバイトに一致する入力RAW値からのバイトは、結果で変換されることも、結果に含まれることもありません。事実上、NULLに変換されます。

- to_setがfrom_setより長い場合、余ったto_setバイトは無視されます。

- あるバイト値がfrom_setで繰り返し出現する場合、それは無視されます。

注意:
TRANSLITERATEとの相違点:

- コール・シーケンスでは、from_setパラメータはto_setパラメータの前にあります。

- from_setに存在するソース・バイト文字列からのバイトで、to_setに対応する値がないものは、結果で変換されることも、含められることもありません。

- 結果のRAW値は、入力RAW値より短い場合があります。

TRANSLATEとTRANSLITERATEの機能は、to_setのバイト数がfrom_setより少ない場合にのみ異なります。

例外

ソース・バイト文字列、from_setまたはto_setがNULLまたは長さが0(ゼロ)の場合、VALUE_ERRORが発生します。

例

例1: ttIsqlで実行される次の例では、from_setがx'12AA34'で、to_setがx'CD'です。入力RAW値に'12'が含まれていると、結果で'CD'に置き換えられます。入力RAW値に'AA'または'34'が含まれている場合、to_setに対応するバイトがないため、これらのバイトは結果に含められません(事実上NULLに変換されます)。

TRANSLITERATEセクションの「例」と比較すると、機能の違いを確認できます。

declare
sr raw(32767);
from_set raw(32767);
to_set raw(32767);
r raw(32767);
begin
sr       := hextoraw('1236567812125612344434341234567890ABAA1234');
from_set := hextoraw('12AA34');
to_set   := hextoraw('CD');
dbms_output.put_line('from_set:   ' || from_set);
dbms_output.put_line('to_set:     ' || to_set);
r := UTL_RAW.TRANSLATE(sr, from_set, to_set);
dbms_output.put_line('source raw: ' || sr);
dbms_output.put_line('return raw: ' || r);
end;
/

結果は次のとおりです。

from_set:   12AA34
to_set:     CD
source raw: 1236567812125612344434341234567890ABAA1234
return raw: CD365678CDCD56CD44CD567890ABCD

PL/SQL procedure successfully completed.

この機能の説明がより明確にわかるように、次に入力と出力を示します。

from_set:   12  AA 34
to_set:     CD
source raw: 12 365678 12 12 56 12 34 44 34 34 12 34 567890AB AA 12 34
return raw: CD 365678 CD CD 56 CD    44       CD    567890AB    CD

例2: ttIsqlで実行される次の例では、from_setがx'12AA12'で、to_setがx'CDABEF'です。入力RAWに'12'が含まれていると、結果で'CD'に置き換えられます。入力に'AA'が含まれていると、結果で'AB'に置き換えられます。from_setの2つ目の'12'は無視されるため、to_setの対応するバイトも無視されます。

declare
sr raw(32767);
from_set raw(32767);
to_set raw(32767);
r raw(32767);
begin
sr       := hextoraw('1236567812125612344434341234567890ABAA1234');
from_set := hextoraw('12AA12');
to_set   := hextoraw('CDABEF');
dbms_output.put_line('from_set:   ' || from_set);
dbms_output.put_line('to_set:     ' || to_set);
r := UTL_RAW.TRANSLATE(sr, from_set, to_set);
dbms_output.put_line('source raw: ' || sr);
dbms_output.put_line('return raw: ' || r);
end;
/

結果は次のとおりです。TRANSLITERATEでも同じ入力RAW、from_setおよびto_setを指定した場合は動作が同じです(「TRANSLITERATE」の項の「例」を参照)。

from_set:   12AA12
to_set:     CDABEF
source raw: 1236567812125612344434341234567890ABAA1234
return raw: CD365678CDCD56CD34443434CD34567890ABABCD34

PL/SQL procedure successfully completed.

TRANSLITERATEファンクション

このファンクションは、入力バイトのセット、入力バイト内で検索する変換前のバイトのセット、および変換後の対応するバイトのセットが指定されている場合に、RAW値のバイト単位の文字変換を実行します。指定したfrom_set内のバイトが入力RAW値で見つかった場合は、to_set内の対応するバイトに変換されて出力RAW値が生成され、to_set内に対応するバイトがない場合は指定したパディング・バイトに変換されます。from_setにはない入力RAW値内のバイトは、そのまま出力RAW値にコピーされます。

構文

UTL_RAW.TRANSLITERATE (
r        IN RAW,
to_set   IN RAW DEFAULT NULL,
from_set IN RAW DEFAULT NULL,
pad      IN RAW DEFAULT NULL)
RETURN RAW;

注意:
コール・シーケンス内でのto_setとfrom_setの順番が、TRANSLATEとは逆であることに注意してください。

パラメータ

表13-25 TRANSLITERATEファンクションのパラメータ

パラメータ

説明

r

適用可能な場合に、バイトが変換されるRAWソース・バイト文字列

to_set

変換後のRAWバイト・コード

from_setバイトがソース・バイト文字列で見つかると、対応するto_setバイトに結果で変換されます(適用可能な場合)。これは、デフォルトで、from_setの長さになるまで、事実上NULL文字列はpadで延長されます。

from_set

ソース・バイト文字列で検索されるRAWバイト・コード

見つかると、結果で変換されます。デフォルトはx'00'からx'FF'で、結果で変換対象となるソース・バイト文字列内のすべてのバイトになります。

pad

from_set内のバイトと一致しても、to_setに対応するバイトがない場合に、ソース・バイト文字列内の任意のバイトの変換値として使用されるパディング・バイト(デフォルト: x'00')

戻り値

変換後のバイト文字列を含むRAW値

使用上の注意

- to_setがfrom_setよりも短い場合、余ったfrom_setバイトに対応する変換バイトはありません。そのようなfrom_setバイトに一致した入力RAW値は、結果でpadバイトに変換されます。

- to_setがfrom_setより長い場合、余ったto_setバイトは無視されます。

- あるバイト値がfrom_setで繰り返し出現する場合、それは無視されます。

注意:
TRANSLATEとの相違点:

- コール・シーケンスでは、to_setパラメータはfrom_setパラメータの前にあります。

- from_setに存在するソース・バイト文字列からのバイトで、to_setに対応する値がないものは、結果でpadに置き換えられます。

- 結果のRAW値は、入力RAW値と常に同じ長さになります。

TRANSLATEとTRANSLITERATEの機能は、to_setのバイト数がfrom_setより少ない場合にのみ異なります。

例外

ソース・バイト文字列がNULLまたは長さが0(ゼロ)の場合にVALUE_ERRORが発生します。

例

例1: ttIsqlで実行される次の例では、from_setがx'12AA34'で、to_setがx'CD'です。入力RAW値に'12'が含まれていると、結果で'CD'に置き換えられます。入力RAW値に'AA'または'34'が含まれている場合、to_setに対応するバイトがないため、これらのバイトはpadバイトに置き換えられます(padバイトが指定されていないためデフォルトのx'00'が使用されます)。

TRANSLATEセクションの「例」と比較すると、機能の違いを確認できます。

declare
sr raw(32767);
from_set raw(32767);
to_set raw(32767);
r raw(32767);
begin
sr       := hextoraw('1236567812125612344434341234567890ABAA1234');
from_set := hextoraw('12AA34');
to_set   := hextoraw('CD');
dbms_output.put_line('from_set:   ' || from_set);
dbms_output.put_line('to_set:     ' || to_set);
r := UTL_RAW.TRANSLITERATE(sr, to_set, from_set);
dbms_output.put_line('source raw: ' || sr);
dbms_output.put_line('return raw: ' || r);
end;
/

結果は次のとおりです。

from_set:   12AA34
to_set:     CD
source raw: 1236567812125612344434341234567890ABAA1234
return raw: CD365678CDCD56CD00440000CD00567890AB00CD00

PL/SQL procedure successfully completed.

この機能の説明がより明確にわかるように、次に入力と出力を示します。

from_set:   12  AA 34
to_set:     CD
source raw: 12 365678 12 12 56 12 34 44 34 34 12 34 567890AB AA 12 34
return raw: CD 365678 CD CD 56 CD 00 44 00 00 CD 00 567890AB 00 CD 00

例2: ttIsqlで実行される次の例は、padにx'FF'が指定されていること以外は、前の例と同じです。

declare
sr raw(32767);
from_set raw(32767);
to_set raw(32767);
pad raw(32767);
r raw(32767);
begin
sr       := hextoraw('1236567812125612344434341234567890ABAA1234');
from_set := hextoraw('12AA34');
to_set   := hextoraw('CD');
pad      := hextoraw('FF');
dbms_output.put_line('from_set:   ' || from_set);
dbms_output.put_line('to_set:     ' || to_set);
r := UTL_RAW.TRANSLITERATE(sr, to_set, from_set, pad);
dbms_output.put_line('source raw: ' || sr);
dbms_output.put_line('return raw: ' || r);
end;
/

結果は次のとおりです。'AA'および'34'が、'00'ではなく'FF'に置き換えられています。

from_set:   12AA34
to_set:     CD
source raw: 1236567812125612344434341234567890ABAA1234
return raw: CD365678CDCD56CDFF44FFFFCDFF567890ABFFCDFF

PL/SQL procedure successfully completed.

例3: ttIsqlで実行される次の例では、from_setがx'12AA12'で、to_setがx'CDABEF'です。入力RAW値に'12'が含まれていると、結果で'CD'に置き換えられます。入力に'AA'が含まれていると、結果で'AB'に置き換えられます。from_setの2つ目の'12'は無視されるため、to_setの対応するバイトも無視されます。

declare
sr raw(32767);
from_set raw(32767);
to_set raw(32767);
r raw(32767);
begin
sr       := hextoraw('1236567812125612344434341234567890ABAA1234');
from_set := hextoraw('12AA12');
to_set   := hextoraw('CDABEF');
dbms_output.put_line('from_set:   ' || from_set);
dbms_output.put_line('to_set:     ' || to_set);
r := UTL_RAW.TRANSLITERATE(sr, to_set, from_set);
dbms_output.put_line('source raw: ' || sr);
dbms_output.put_line('return raw: ' || r);
end;
/

結果は次のとおりです。この動作は、入力RAW、from_setおよびto_setを指定したTRANSLATEの場合と同じです(「TRANSLATE」の項の「例」を参照)。

from_set:   12AA12
to_set:     CDABEF
source raw: 1236567812125612344434341234567890ABAA1234
return raw: CD365678CDCD56CD34443434CD34567890ABABCD34

PL/SQL procedure successfully completed.

例4: ttIsqlで実行される次の例では、from_setおよびto_setが指定されていません。

declare
sr raw(32767);
r raw(32767);
begin
sr       := hextoraw('1236567812125612344434341234567890ABAA1234');
r := UTL_RAW.TRANSLITERATE(sr);
dbms_output.put_line('source raw: ' || sr);
dbms_output.put_line('return raw: ' || r);
end;
/

結果は次のとおりです。from_setおよびto_setのデフォルトに従って、すべてのバイトはx'00'で置き換えられます。

source raw: 1236567812125612344434341234567890ABAA1234
return raw: 000000000000000000000000000000000000000000

PL/SQL procedure successfully completed.

XRANGEファンクション

このファンクションは、指定したバイト・コードで開始および終了する連続した1バイト・エンコードを含むRAW値を戻します。指定するバイト・コードは、シングルバイトのRAW値である必要があります。start_byte値がend_byte値より大きい場合、結果バイトの連続はstart_byteで始まり、x'FF'からx'00'に折り返してend_byteで終わります。

構文

UTL_RAW.XRANGE (
start_byte IN RAW DEFAULT NULL,
end_byte   IN RAW DEFAULT NULL)
RETURN RAW;

パラメータ

表13-26 XRANGEファンクションのパラメータ

パラメータ

説明

start_byte

戻される連続値の最初のバイト・コード値(デフォルト: x'00')

end_byte

戻される連続値の最後のバイト・コード値(デフォルト: x'FF')

戻り値

1バイト・エンコーディングの連続を含むRAW値

例

ttIsqlで実行される次の3つの例に、start_byteがend_byteより小さい場合、start_byteがend_byteより大きい場合、およびデフォルト値の場合の結果を示します。

Command> declare
>    r raw(32767);
>    s raw(32767);
>    e raw(32767);
> begin
>    s := hextoraw('1');
>    e := hextoraw('A');
>    r := utl_raw.xrange(s,e);
>    dbms_output.put_line(r);
> end;
> /
0102030405060708090A

PL/SQL procedure successfully completed.

Command> declare
>    r raw(32767);
>    s raw(32767);
>    e raw(32767);
> begin
>    s := hextoraw('EE');
>    e := hextoraw('A');
>    r := utl_raw.xrange(s,e);
>    dbms_output.put_line(r);
> end;
> /
EEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF000102030405060708090A

PL/SQL procedure successfully completed.

Command> declare
>    r raw(32767);
> begin
>    r := utl_raw.xrange();
>    dbms_output.put_line(r);
> end;
> /
000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627
28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F
505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677
78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F
A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF
F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF

PL/SQL procedure successfully completed.

14 UTL_RECOMP

UTL_RECOMPパッケージは、データベース内の無効なPL/SQLモジュール、無効なビュー、索引タイプおよび演算子を再コンパイルします。

この章の内容は次のとおりです。

- UTL_RECOMPの使用

- 概要

- 使用上の注意

- 例

- UTL_RECOMPサブプログラムの要約

UTL_RECOMPの使用

- 概要

- 使用上の注意

- 例

概要

UTL_RECOMPは、通常すべてのPL/SQLオブジェクトが無効になるメジャー・バージョン・アップグレード後に、特に役立ちます。無効なオブジェクトは使用時に自動的に再コンパイルされますが、操作前にこれを実行しておくと、その後の実行時のオンデマンド自動再コンパイルによる遅延がなくなったり、最小限に抑えられるため、便利です。

使用上の注意

- このパッケージは、ttIsqlを使用して実行する必要があります。

- このパッケージを使用するには、インスタンス管理者である必要があり、SYS.UTL_RECOMPとして実行する必要があります。

- このパッケージには、VALIDステータスで作成されている次のパッケージが必要です。

- STANDARD (standard.sql)

- DBMS_STANDARD (dbmsstdx.sql)

- DBMS_RANDOM (dbmsrand.sql)

- このパッケージでエントリを実行している間は、データベース上で他のDDLを実行しないでください。この推奨事項に従わない場合、デッドロックが発生する場合があります。

- TimesTenではDBMS_SCHEDULERがサポートされないため、ユーザーの指定内容に関係なく、パラレル実行される再リコンパイル・スレッドの数は常に1つです。したがって、TimesTenではRECOMP_PARALLELとRECOMP_SERIALの違いは事実上ありません。

例

すべてのオブジェクトを順次再コンパイルする場合:

Command> EXECUTE SYS.UTL_RECOMP.RECOMP_SERIAL();

スキーマSCOTTのオブジェクトを順次再コンパイルする場合:

Command> EXECUTE SYS.UTL_RECOMP.RECOMP_SERIAL('SCOTT');

UTL_RECOMPサブプログラムの要約

表14-1 UTL_RECOMPパッケージのサブプログラム

サブプログラム

説明

RECOMP_PARALLELプロシージャ

特定のスキーマ内の無効なオブジェクトまたはデータベース内のすべての無効なオブジェクトを、パラレルに再コンパイルします。

前述のとおり、ユーザーの指定内容に関係なく、TimesTenでパラレル実行される再コンパイル・スレッドの数は常に1つです。したがって、TimesTenではRECOMP_PARALLELとRECOMP_SERIALの違いは事実上ありません。

RECOMP_SERIALプロシージャ

特定のスキーマ内の無効なオブジェクトまたはデータベース内のすべての無効なオブジェクトを再コンパイルします。

注意:

- PLS_INTEGERデータ・タイプとBINARY_INTEGERデータ・タイプは同じです。このドキュメントでは、リファレンス情報でデータ・タイプ(表タイプ、レコード・タイプ、サブプログラム・パラメータ、サブプログラム戻り値など)を示す場合にBINARY_INTEGERを使用しますが、説明および例ではいずれも使用される場合があります。

- INTEGERデータ・タイプとNUMBER(38)データ・タイプも同じです。このドキュメントでは、全体をとおしてINTEGERを使用します。

RECOMP_PARALLELプロシージャ

このプロシージャはDBA_Dependenciesビューに表示された情報を使用して、データベース内または指定されたスキーマ内の無効なオブジェクトをパラレルに再コンパイルします。

TimesTenでは、設定内容に関係なく、threads値は常に1です。その結果、RECOMP_PARALLELとRECOMP_SERIALの違いは事実上ありません。

構文

UTL_RECOMP.RECOMP_PARALLEL(
threads  IN   BINARY_INTEGER DEFAULT NULL,
schema   IN   VARCHAR2    DEFAULT NULL,
flags    IN   BINARY_INTEGER DEFAULT 0);

パラメータ

表14-2 RECOMP_PARALLELプロシージャ・パラメータ

パラメータ

説明

threads

再コンパイルをパラレル実行するスレッド数

TimesTenでは、threadsは常に1です。

schema

無効なオブジェクトを再コンパイルするためのスキーマ

NULLの場合、データベースのすべての無効なオブジェクトが再コンパイルされます。

flags

内部テストや診断テストを行う場合にのみ値を設定します。

RECOMP_SERIALプロシージャ

このプロシージャは、特定のスキーマ内の無効なオブジェクトまたはデータベース内のすべての無効なオブジェクトを再コンパイルします。

構文

UTL_RECOMP.RECOMP_SERIAL(
schema   IN   VARCHAR2    DEFAULT NULL,
flags    IN   BINARY_INTEGER DEFAULT 0);

パラメータ

表14-3 RECOMP_SERIALプロシージャのパラメータ

パラメータ

説明

schema

無効なオブジェクトを再コンパイルするためのスキーマ

NULLの場合、データベースのすべての無効なオブジェクトが再コンパイルされます。

flags

内部テストや診断テストを行う場合にのみ値を設定します。

索引
A  B  C  D  E  F  G  I  L  M  N  O  P  R  S  T  U  V  W  X

A

無名PL/SQLブロックおよび動的SQL, 7

APPENDプロシージャ, 2

配列

BIND_ARRAYプロシージャ, 7

DBMS_SQLを使用したバルクDML, 7

B

BINARY_DOUBLE_TABLE表タイプ, 7

BINARY_FLOAT_TABLE表タイプ, 7

バインド・パラメータ, 「バインド変数」を参照

バインド変数, 7

BIND_ARRAYプロシージャ, 7

BIND_VARIABLEプロシージャ, 7

BIT_ANDファンクション, 13

BIT_COMPLEMENTファンクション, 13

BIT_ORファンクション, 13

BIT_XORファンクション, 13

BLOB_TABLE表タイプ, 7

C

CANONICALIZEプロシージャ, 8

CAPTURE_SNAPSHOTプロシージャおよびファンクション, 10

CAST_FROM_BINARY_DOUBLEファンクション, 13

CAST_FROM_BINARY_FLOATファンクション, 13

CAST_FROM_BINARY_INTEGERファンクション, 13

CAST_FROM_NUMBERファンクション, 13

CAST_TO_BINARY_DOUBLEファンクション, 13

CAST_TO_BINARY_FLOATファンクション, 13

CAST_TO_BINARY_INTEGERファンクション, 13

CAST_TO_NUMBERファンクション, 13

CAST_TO_NVARCHAR2ファンクション, 13

CAST_TO_RAWファンクション, 13

CAST_TO_VARCHAR2ファンクション, 13

CHARARR表タイプ, 4

CLOB_TABLE表タイプ, 7

CLOSEプロシージャ, 2

CLOSE_CURSORプロシージャ, 7

コレクション

コレクションのスカラー・タイプ, 7

表項目, 7

COLUMN_VALUEプロシージャ, 7 COLUMN_VALUE_LONGプロシージャ(非サポート), 7 COMMA_TO_TABLEプロシージャ, 8 COMPAREファンクション, 13 COMPAREファンクション, 2 COMPILE_SCHEMAプロシージャ, 8 CONCATファンクション, 13 CONVERTファンクション, 13 CONVERTTOBLOBプロシージャ, 2 CONVERTTOCLOBプロシージャ, 2 COPIESファンクション, 13 COPYプロシージャ, 2 CREATETEMPORARYプロシージャ, 2 カーソル，DBMS_SQLパッケージ, 7

D

DATE_TABLE表タイプ, 7

DB_VERSIONプロシージャ, 8

DBMS_LOBパッケージ, 2

DBMS_LOCKパッケージ

サブプログラムの要約, 3

使用, 3

DBMS_OUTPUTパッケージ

データ構造, 4

例, 4

サブプログラムの要約, 4

使用, 4

DBMS_PREPROCESSORパッケージ

データ構造, 5

サブプログラムの要約, 5

使用, 5

DBMS_RANDOMパッケージ

サブプログラムの要約, 6

使用, 6

DBMS_SQLパッケージ

データ構造, 7

例, 7, 7, 7

サブプログラムの要約, 7

使用, 7

DBMS_UTILITYパッケージ

例, 8, 8, 8

サブプログラムの要約, 8

使用, 8

DBMSOUTPUT_LINESARRAY表タイプ, 4 DEFINE_ARRAYプロシージャ, 7 DEFINE_COLUMNプロシージャ, 7 DEFINE_COLUMN_LONGプロシージャ(非サポート), 7 DESC_RECレコード・タイプ, 7 DESC_REC2レコード・タイプ, 7 DESC_REC3レコード・タイプ, 7 DESC_TAB表タイプ, 7 DESC_TAB2表タイプ, 7 DESC_TAB3表タイプ, 7 DESCRIBE_COLUMNSプロシージャ, 7 DESCRIBE_COLUMNS2プロシージャ, 7 DESCRIBE_COLUMNS3プロシージャ, 7 DISABLEプロシージャ, 4 DROP_SNAPSHOTS_RANGEプロシージャ, 10 動的SQL

無名ブロック, 7

DBMS_SQLファンクション，使用, 7

実行フロー, 7

E

ENABLEプロシージャ, 4

ERASEプロシージャ, 2

例

DBMS_OUTPUT, 4

DBMS_SQL, 7

DBMS_SQL.TO_CURSOR_NUMBER, 7

DBMS_SQL.TO_REFCURSOR, 7

DBMS_UTILITY.FORMAT_ERROR_BACKTRACE, 8

DBMS_UTILITY.INVALIDATE, 8

DBMS_UTILITY.VALIDATE, 8

TT_DB_VERSION, 12

UTL_FILE, 11

UTL_IDENT, 12

EXECUTEファンクション, 7 EXECUTE_AND_FETCHファンクション, 7 動的SQLの実行フロー, 7

F

FCLOSEプロシージャ, 11

FCLOSE_ALLプロシージャ, 11

FCOPYプロシージャ, 11

FETCH_ROWSファンクション, 7

FFLUSHプロシージャ, 11

FGETATTRプロシージャ, 11

FGETPOSファンクション, 11

FILE_TYPEレコード・タイプ, 11

FOPENファンクション, 11

FOPEN_NCHARファンクション, 11

FORMAT_CALL_STACKファンクション, 8

FORMAT_ERROR_BACKTRACEファンクション, 8

FORMAT_ERROR_STACKファンクション, 8

FREETEMPORARYプロシージャ, 2

FREMOVEプロシージャ, 11

FRENAMEプロシージャ, 11

FSEEKプロシージャ, 11

G

GENERATE_REPORT_HTMLプロシージャ, 10

GENERATE_REPORT_TEXTプロシージャ, 10

GET_CONFIGプロシージャ, 10

GET_CPU_TIMEファンクション, 8

GET_DEPENDENCYプロシージャ, 8

GET_ENDIANNESSファンクション, 8

GET_HASH_VALUEファンクション, 8

GET_LINEプロシージャ, 4, 11

GET_LINE_NCHARプロシージャ, 11

GET_LINESプロシージャ, 4

GET_POST_PROCESSED_SOURCEファンクション, 5

GET_RAWファンクション, 11

GET_SQL_HASHファンクション, 8

GET_TIMEファンクション, 8

GETCHUNKSIZEファンクション, 2

GETLENGTHファンクション, 2

I

INITIALIZEプロシージャ, 6

INSTRファンクション, 2

INTERVAL_DAY_TO_SECOND_TABLE表タイプ, 7

INTERVAL_YEAR_TO_MONTH_TABLE表タイプ, 7

INVALIDATEプロシージャ, 8

IS_BIT_SETファンクション, 8

IS_OPENファンクション, 7, 11

ISOPENファンクション, 2

ISTEMPORARYファンクション, 2

L

LAST_ERROR_POSITIONファンクション, 7

LAST_ROW_COUNTファンクション, 7

LAST_ROW_IDファンクション, 7

LAST_SQL_FUNCTION_CODEファンクション, 7

LENGTHファンクション, 13

LOB

DBMS_LOBパッケージ, 2

M

メトリック, 「TT_STATS」を参照

N

NAME_RESOLVEプロシージャ, 8

NAME_TOKENIZEプロシージャ, 8

NEW_LINEプロシージャ, 4, 11

NORMALファンクション, 6

NUMBER_TABLE表タイプ, 7

O

OPENプロシージャ, 2

OPEN_CURSORファンクション, 7

OVERLAYファンクション, 13

パッケージの概要

パッケージ・コンポーネント, 1

パッケージ内容の参照, 1

TimesTenパッケージの要約, 1

TimesTenパッケージの使用, 1

P

PARSEプロシージャ, 7

PRINT_POST_PROCESSED_SOURCEプロシージャ, 5

PUTプロシージャ, 4, 11

PUT_LINEプロシージャ, 4, 11

PUT_LINE_NCHARプロシージャ, 11

PUT_NCHARプロシージャ, 11

PUT_RAWプロシージャ, 11

PUTFプロシージャ, 11

PUTF_NCHARプロシージャ, 11

R

RANDOMファンクション, 6

READプロシージャ, 2

RECOMP_PARALLELプロシージャ, 14

RECOMP_SERIALプロシージャ, 14

パッケージ内容の参照, 1

REVERSEファンクション, 13

S

SEEDプロシージャ, 6

SET_CONFIGプロシージャ, 10

SHOW_SNAPSHOTSプロシージャ, 10

SLEEPプロシージャ, 3

SOURCE_LINES_T表タイプ, 5

統計, 「TT_STATS」を参照

STRINGファンクション, 6

SUBSTRファンクション, 13

SUBSTRファンクション, 2

TimesTenパッケージの要約, 1

T

TABLE_TO_COMMAプロシージャ, 8

表，配列としての表項目, 7

TERMINATEプロシージャ, 6

TIME_TABLE表タイプ, 7

TIMESTAMP_TABLE表タイプ, 7

TO_CURSOR_NUMBERファンクション, 7

TO_REFCURSORファンクション, 7

TRANSLATEファンクション, 13

TRANSLITERATEファンクション, 13

TRIMプロシージャ, 2

TT_DB_VERSIONパッケージ

定数, 9

例, 12

使用, 9

TT_STATSパッケージ

使用上の注意, 10

概要, 10

セキュリティ・モデル, 必要な権限, 10

サブプログラムの要約, 10

使用, 10

U

TimesTenパッケージの使用, 1

UTL_FILEパッケージ

データ構造, 11

例, 11

サブプログラムの要約, 11

使用, 11

UTL_IDENTパッケージ

定数, 12

例, 12

使用, 12

UTL_RAWパッケージ

サブプログラムの要約, 13

使用, 13

UTL_RECOMPパッケージ

サブプログラムの要約, 14

使用, 14

V

VALIDATEプロシージャ, 8

VALUEファンクション, 6

VARCHAR2_TABLE表タイプ, 7

VARCHAR2A表タイプ, 7

VARCHAR2S表タイプ, 7

VARIABLE_VALUEプロシージャ, 7

W

WRITEプロシージャ, 2

WRITEAPPENDプロシージャ, 2

X

XRANGEファンクション, 13

オラクル社の法律上の注意点について

コピーライトについて

Copyright © 1994-2015, Oracle and/or its affiliates.All rights reserved.

商標と登録商標について

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

ライセンス制約の保証と結果的に生じる損害の免責

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

保証免責

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

制限付権利

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

危険な用途への使用について

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション（人的傷害を発生させる可能性があるアプリケーションを含む）への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性（redundancy）、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

第三者のコンテンツ、製品、サービスに対する免責事項

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

ドラフトのアルファ版およびベータ版ドキュメントについて

このドキュメントが試作版の場合:

このドキュメントは試作版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。オラクル社およびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。