276 ANYDATASETタイプ
ANYDATASETタイプには、特定のタイプの説明およびそのタイプの一連のデータ・インスタンスが含まれています。ANYDATASETは、必要に応じて、データベースに永続的に格納したり、自己記述型のデータ・セットと通信するインタフェース・パラメータとして使用できます。このデータ・セットは、すべて特定のタイプに属します。
この章のトピックは、次のとおりです:
276.1 ANYDATASETタイプの構成
ANYDATASETは、値ごとに順番に構成する必要があります。
ANYDATASETタイプの各データ・インスタンスについて、ADDINSTANCEファンクションを起動する必要があります。これにより、ANYDATASETに新規データ・インスタンスが追加されます。次に、SET*をコールして値をすべて設定できます。
構成およびアクセスのMODEは、PIECEWISEへのコールを実行して属性またはコレクション要素単位で変更できます。
-
ANYDATASETのタイプが
TYPECODE_OBJECTである場合、後続のSET*コールを使用して個々の属性を設定します。アクセスについても同様です。 -
現行のデータ値のタイプがコレクション・タイプである場合は、後続の
SET*コールを使用して、個々のコレクション要素を設定します。アクセスについても同様です。このコールはANYDATAタイプに対して定義されるANYDATA.PIECEWISEコールに非常に似ています。
オブジェクト・タイプまたはコレクション・タイプのネストされた属性(最上位レベルを除く)の個別の構成またはアクセスはサポートされていません。
構成プロセスを終了するには、ENDCREATEをコールする必要があります(アクセス・コールが実行される前)。
276.2 ANYDATASETタイプのサブプログラムの要約
この表は、ANYDATASETタイプのサブプログラムを示し、簡単に説明しています。
表276-1 ANYDATASETタイプのサブプログラム
| サブプログラム | 説明 |
|---|---|
|
|
|
|
指定の |
|
|
|
|
|
現行のデータ値(適切なタイプのデータ値)を取得します。 |
|
|
|
|
|
|
|
|
現行のデータ値(適切なタイプのデータ値)。 |
|
|
|
|
|
1回ごとに現行のデータ値が属性となるように構成およびアクセスの |
|
|
現行のデータ値を設定します。 |
276.2.1 ADDINSTANCEメンバー・プロシージャ
このプロシージャは、ANYDATASETに新規データ・インスタンスを追加します。
構文
MEMBER PROCEDURE AddInstance( self IN OUT NOCOPY ANYDATASET);
パラメータ
表276-2 ADDINSTANCEプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
構成される |
例外
DBMS_TYPES.invalid_parameters: Invalid parameters. DBMS_TYPES.incorrect_usage: On incorrect usage.
使用上のノート
データ・インスタンスは順番に追加する必要があります。新しいデータ・インスタンスを追加する前に、前のデータ・インスタンスが完全に構成されているか、NULLに設定されている必要があります。
このコールを実行しても、構成が個別モードで自動的に設定されることはありません。個別にインスタンスを構成するには、PIECEWISEを明示的にコールする必要があります。
276.2.2 BEGINCREATE静的プロシージャ
このプロシージャは、指定のANYTYPEの一連のデータ値を作成できるANYDATASETを新規に作成します。
構文
STATIC PROCEDURE BeginCreate( typecode IN PLS_INTEGER, rtype IN OUT NOCOPY AnyType, aset OUT NOCOPY ANYDATASET);
パラメータ
表276-3 BEGINCREATEプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
|
|
|
データ値のタイプ。このパラメータは、 |
|
|
構成される |
例外
DBMS_TYPES.invalid_parameters: dtypeは無効です(完全に構成されていない、および同様の障害)。
276.2.3 ENDCREATEメンバー・プロシージャ
このプロシージャは、ANYDATASETの作成を終了します。このコール以降は、その他の作成ファンクションをコールすることはできません。
構文
MEMBER PROCEDURE ENDCREATE( self IN OUT NOCOPY ANYDATASET);
パラメータ
表276-4 ENDCREATEプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
構成される |
276.2.4 GET*メンバー・ファンクション
これらのファンクションは、現行のデータ値(適切なタイプのデータ値)を取得します。
現在のデータ値のタイプは、アクセスに使用するMODEにより異なります。つまり、PIECEWISEコールを起動しているかどうかにより異なります。PIECEWISEがコールされていない場合は、インスタンスに完全にアクセスし、データ値のタイプはANYDATASETのタイプと一致する必要があります。
PIECEWISEがコールされている場合、インスタンスは個別にアクセスされます。データ値のタイプは、現在の位置での属性のタイプ(またはコレクション要素)に一致する必要があります。
構文
MEMBER FUNCTION GETBDOUBLE( self IN ANYDATASET, dbl OUT NOCOPY BINARY_DOUBLE) RETURN PLS_INTEGER; MEMBER FUNCTION GETBFLOAT( self IN ANYDATASET, fl OUT NOCOPY BINARY_FLOAT) RETURN PLS_INTEGER; MEMBER FUNCTION GETBFILE( self IN ANYDATASET, b OUT NOCOPY BFILE) RETURN PLS_INTEGER; MEMBER FUNCTION GETBLOB( self IN ANYDATASET, b OUT NOCOPY BLOB) RETURN PLS_INTEGER; MEMBER FUNCTION GETCHAR( self IN ANYDATASET, c OUT NOCOPY CHAR) RETURN PLS_INTEGER; MEMBER FUNCTION GETCLOB( self IN ANYDATASET, c OUT NOCOPY CLOB) RETURN PLS_INTEGER; MEMBER FUNCTION GETCOLLECTION( self IN ANYDATASET, col OUT NOCOPY "<collection_type>") RETURN PLS_INTEGER; MEMBER FUNCTION GETDATE( self IN ANYDATASET, dat OUT NOCOPY DATE) RETURN PLS_INTEGER; MEMBER FUNCTION GETINTERVALDS( self IN ANYDATASET, inv IN OUT NOCOPY INTERVAL DAY TO SECOND) RETURN PLS_INTEGER; MEMBER FUNCTION GETINTERVALYM( self IN ANYDATASET, inv IN OUT NOCOPY INTERVAL YEAR TO MONTH) RETURN PLS_INTEGER; MEMBER FUNCTION GETNCHAR( self IN ANYDATASET, nc OUT NOCOPY NCHAR) RETURN PLS_INTEGER; MEMBER FUNCTION GETNCLOB( self IN ANYDATASET, nc OUT NOCOPY NCLOB) RETURN PLS_INTEGER; MEMBER FUNCTION GETNUMBER( self IN ANYDATASET, num OUT NOCOPY NUMBER) RETURN PLS_INTEGER; MEMBER FUNCTION GETNVARCHAR2( self IN ANYDATASET, nc OUT NOCOPY NVARCHAR2) RETURN PLS_INTEGER; MEMBER FUNCTION GETOBJECT( self IN ANYDATASET, obj OUT NOCOPY "<object_type>") RETURN PLS_INTEGER; MEMBER FUNCTION GETRAW( self IN ANYDATASET, r OUT NOCOPY RAW) RETURN PLS_INTEGER; MEMBER FUNCTION GETREF( self IN ANYDATASET, rf OUT NOCOPY REF "<object_type>") RETURN PLS_INTEGER; MEMBER FUNCTION GETTIMESTAMP( self IN ANYDATASET, RETURN PLS_INTEGER; MEMBER FUNCTION GETTIMESTAMPLTZ( self IN ANYDATASET, ts OUT NOCOPY TIMESTAMP WITH LOCAL TIME ZONE) RETURN PLS_INTEGER; MEMBER FUNCTION GETTIMESTAMPTZ( self IN ANYDATASET, ts OUT NOCOPY TIMESTAMP WITH TIME ZONE) RETURN PLS_INTEGER, MEMBER FUNCTION GETUROWID( self IN ANYDATASET, rid OUT NOCOPY UROWID) RETURN PLS_INTEGER MEMBER FUNCTION GETVARCHAR( self IN ANYDATASET, c OUT NOCOPY VARCHAR) RETURN PLS_INTEGER; MEMBER FUNCTION GETVARCHAR2( self IN ANYDATASET, c OUT NOCOPY VARCHAR2) RETURN PLS_INTEGER;
パラメータ
表276-5 GET*ファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
アクセスされる |
|
|
取得する数値などの関連情報。 |
戻り値
DBMS_TYPES.SUCCESSまたはDBMS_TYPES.NO_DATA
PIECEWISEがコレクションに対してすでにコールされている場合にのみ、戻り値が関連します。このような場合、全要素にアクセスしたときにDBMS_TYPES.NO_DATAはコレクションの終了を示します。
例外
DBMS_TYPES.INVALID_PARAMETER: 無効なパラメータ(作成プロセスのこの時点での数値の追加が適切ではない場合)。
DBMS_TYPES.INCORRECT_USAGE: 不適切な使用。
DBMS_TYPES.TYPE_MISMATCH: 予想されたタイプが渡されたタイプと異なる場合。
276.2.5 GETCOUNTメンバー・ファンクション
このファンクションは、ANYDATASETのデータ・インスタンスの数を取得します。
構文
MEMBER FUNCTION GetCount( self IN ANYDATASET) RETURN PLS_INTEGER;
パラメータ
表276-6 GETCOUNTファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
アクセスされる |
戻り値
データ・インスタンスの数。
276.2.6 GETINSTANCEメンバー・ファンクション
このファンクションは、ANYDATASETの次のインスタンスを取得します。ANYDATASETのインスタンスへの順次アクセスのみが許可されます。
このファンクションのコール後、GET*ファンクションをANYDATASETで起動して現在のインスタンスにアクセスできます。GET*コールの前にPIECEWISEをコールすると、個々の属性(またはコレクション要素)にアクセスできます。
ANYDATASETが完全に作成される前にこのファンクションを起動すると、エラーが発生します。
構文
MEMBER FUNCTION GETINSTANCE( self IN OUT NOCOPY ANYDATASET) RETURN PLS_INTEGER;
パラメータ
表276-7 GETINSTANCEファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
アクセスされる |
戻り値
DBMS_TYPES.SUCCESSまたはDBMS_TYPES.NO_DATA
DBMS_TYPES.NO_DATAは、ANYDATASETの終わり(すべてのインスタンスがアクセスしたこと)を示します。
使用上のノート
このファンクションは、最初のインスタンスにアクセスする前にコールしてください。
276.2.7 GETTYPEメンバー・ファンクション
このファンクションは、ANYDATASETでデータ・インスタンスのタイプを説明するAnyTypeを取得します。
構文
MEMBER FUNCTION GETTYPE( self IN ANYDATASET, typ OUT NOCOPY AnyType) RETURN PLS_INTEGER;
パラメータ
表276-8 GETTYPEファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
|
|
|
AnyDataに対応する |
戻り値
ANYDATAのタイプに対応するtypecode。
276.2.8 GETTYPENAMEメンバー・ファンクション
このプロシージャは、ANYDATASETの完全修飾名を取得します。
ANYDATASETが組込みタイプに基づいている場合、このファンクションはNUMBERおよび関連情報を戻します。
ユーザー定義タイプに基づいている場合、このファンクションはschema_name.type_name(SCOTT.FOOなど)を戻します。
一時的な匿名タイプに基づいている場合、このファンクションはNULLを戻します。
構文
MEMBER FUNCTION GETTYPENAME( self IN ANYDATASET) RETURN VARCHAR2;
パラメータ
表276-9 GETTYPENAMEファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
構成されるANYDATASET。 |
戻り値
ANYDATASETのタイプ名。
276.2.9 PIECEWISEメンバー・プロシージャ
このプロシージャは、1回ごとに現行のデータ値が属性となるように構成およびアクセスのMODEを設定します(データ値がTYPECODE_OBJECTの場合)。
構成MODE、コレクション要素となるデータ値のアクセスを一度に設定します(データ値がコレクションTYPEの場合)。このコールが実行されると、後続の SET*およびGET*へのコールにより順番に個別の属性またはコレクション要素が取得されます。
構文
MEMBER PROCEDURE PIECEWISE( self IN OUT NOCOPY ANYDATASET);
パラメータ
表276-10 PIECEWISEプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
構成されるANYDATASET。 |
例外
DBMS_TYPES.INVALID_PARAMETERS: 無効なパラメータ。
DBMS_TYPES.INCORRECT_USAGE: 不適切な使用。
使用上のノート
このコールを実行するには、現行のデータ値がオブジェクトまたはコレクションのタイプである必要があります。埋め込まれたオブジェクト・タイプの属性またはネストされたコレクションの個別の構成またはアクセスはサポートされていません。
276.2.10 SET*メンバー・プロシージャ
このプロシージャは、現行のデータ値を設定します。
現行のデータ値のタイプは、構成中のMODEにより異なります(つまり、PIECEWISEコールを起動した方法により異なります)。PIECEWISEがコールされていない場合は、現行のデータ・タイプがANYDATASETのタイプである必要があります。PIECEWISEがコールされている場合は、現在の位置での属性のタイプにします。
構文
MEMBER PROCEDURE SETBDOUBLE( self IN OUT NOCOPY ANYDATASET, dbl IN BINARY_DOUBLE, last_elem IN BOOLEAN DEFAULT FALSE); MEMBER PROCEDURE SETBFLOAT( self IN OUT NOCOPY ANYDATASET, fl IN BINARY_FLOAT, last_elem IN BOOLEAN DEFAULT FALSE); MEMBER PROCEDURE SETBFILE( self IN OUT NOCOPY ANYDATASET, b IN BFILE, last_elem BOOLEAN DEFAULT FALSE); MEMBER PROCEDURE SETBLOB( self IN OUT NOCOPY ANYDATASET, b IN BLOB, last_elem BOOLEAN DEFAULT FALSE); MEMBER PROCEDURE SETCHAR( self IN OUT NOCOPY ANYDATASET, c IN CHAR, last_elem BOOLEAN DEFAULT FALSE); MEMBER PROCEDURE SETCLOB( self IN OUT NOCOPY ANYDATASET, c IN CLOB, last_elem BOOLEAN DEFAULT FALSE); MEMBER PROCEDURE SETCOLLECTION( self IN OUT NOCOPY ANYDATASET, col IN "<collection_type>", last_elem BOOLEAN DEFAULT FALSE); MEMBER PROCEDURE SETDATE( self IN OUT NOCOPY ANYDATASET, dat IN DATE, last_elem BOOLEAN DEFAULT FALSE); MEMBER PROCEDURE SETINTERVALDS( self IN OUT NOCOPY ANYDATASET, inv IN INTERVAL DAY TO SECOND, last_elem IN BOOLEAN DEFAULT FALSE); MEMBER PROCEDURE SETINTERVALYM( self IN OUT NOCOPY ANYDATASET, inv IN INTERVAL YEAR TO MONTH, last_elem IN BOOLEAN DEFAULT FALSE); MEMBER PROCEDURE SETNCHAR( self IN OUT NOCOPY ANYDATASET, nc IN NCHAR, last_elem IN BOOLEAN DEFAULT FALSE); MEMBER PROCEDURE SETNCLOB( self IN OUT NOCOPY ANYDATASET, nc IN NClob, last_elem IN BOOLEAN DEFAULT FALSE); MEMBER PROCEDURE SETNUMBER( self IN OUT NOCOPY ANYDATASET, num IN NUMBER, last_elem BOOLEAN DEFAULT FALSE); MEMBER PROCEDURE SETNVARCHAR2( self IN OUT NOCOPY ANYDATASET, nc IN NVarchar2, last_elem IN BOOLEAN DEFAULT FALSE); MEMBER PROCEDURE SETOBJECT( self IN OUT NOCOPY ANYDATASET, obj IN "<object_type>", last_elem BOOLEAN DEFAULT FALSE); MEMBER PROCEDURE SETRAW( self IN OUT NOCOPY ANYDATASET, r IN RAW, last_elem BOOLEAN DEFAULT FALSE); MEMBER PROCEDURE SETREF( self IN OUT NOCOPY ANYDATASET, rf IN REF "<object_type>", last_elem BOOLEAN DEFAULT FALSE); MEMBER PROCEDURE SETTIMESTAMP( self IN OUT NOCOPY ANYDATASET, ts IN TIMESTAMP, last_elem IN BOOLEAN DEFAULT FALSE); MEMBER PROCEDURE SETTIMESTAMPLTZ( self IN OUT NOCOPY ANYDATASET, ts IN TIMESTAMP WITH LOCAL TIME ZONE, last_elem IN BOOLEAN DEFAULT FALSE); MEMBER PROCEDURE SETTIMESTAMPTZ( self IN OUT NOCOPY ANYDATASET, ts IN TIMESTAMP WITH TIME ZONE, last_elem IN BOOLEAN DEFAULT FALSE); MEMBER PROCEDURE SETUROWID( self IN OUT NOCOPY ANYDATASET, rid IN UROWID, last_elem IN BOOLEAN DEFAULT FALSE); MEMBER PROCEDURE SETVARCHAR( self IN OUT NOCOPY ANYDATASET, c IN VARCHAR, last_elem BOOLEAN DEFAULT FALSE); MEMBER PROCEDURE SETVARCHAR2( self IN OUT NOCOPY ANYDATASET, c IN VARCHAR2, last_elem BOOLEAN DEFAULT FALSE);
パラメータ
表276-11 SET*プロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
アクセスされる |
|
|
設定する数値などの関連情報。 |
|
|
|
例外
-
DBMS_TYPES.INVALID_PARAMETERS: 無効なパラメータ(作成プロセスのこの時点での数値の追加が適切ではない場合)。 -
DBMS_TYPES.INCORRECT_USAGE: 不適切な使用。 -
DBMS_TYPES.TYPE_MISMATCH: 予想されたタイプが渡されたタイプと異なる場合。