280 ANYDATASETタイプ

ANYDATASETタイプには、特定のタイプの説明およびそのタイプの一連のデータ・インスタンスが含まれています。ANYDATASETは、必要に応じて、データベースに永続的に格納したり、自己記述型のデータ・セットと通信するインタフェース・パラメータとして使用できます。このデータ・セットは、すべて特定のタイプに属します。

この章のトピックは、次のとおりです:

280.1 ANYDATASETタイプの構成

ANYDATASETは、値ごとに順番に構成する必要があります。

ANYDATASETタイプの各データ・インスタンスについて、ADDINSTANCEファンクションを起動する必要があります。これにより、ANYDATASETに新規データ・インスタンスが追加されます。次に、SET*をコールして値をすべて設定できます。

構成およびアクセスのMODEは、PIECEWISEへのコールを実行して属性またはコレクション要素単位で変更できます。

  • ANYDATASETのタイプがTYPECODE_OBJECTである場合、後続のSET*コールを使用して個々の属性を設定します。アクセスについても同様です。

  • 現行のデータ値のタイプがコレクション・タイプである場合は、後続のSET*コールを使用して、個々のコレクション要素を設定します。アクセスについても同様です。このコールはANYDATAタイプに対して定義されるANYDATA.PIECEWISEコールに非常に似ています。

オブジェクト・タイプまたはコレクション・タイプのネストされた属性(最上位レベルを除く)の個別の構成またはアクセスはサポートされていません。

構成プロセスを終了するには、ENDCREATEをコールする必要があります(アクセス・コールが実行される前)。

280.2 ANYDATASETタイプのサブプログラムの要約

この表は、ANYDATASETタイプのサブプログラムを示し、簡単に説明しています。

表280-1 ANYDATASETタイプのサブプログラム

サブプログラム 説明

ADDINSTANCEメンバー・プロシージャ

ANYDATASETに新規データ・インスタンスを追加します。

BEGINCREATE静的プロシージャ

指定のANYTYPEの一連のデータ値を作成できるANYDATASETを新規に作成します。

ENDCREATEメンバー・プロシージャ

ANYDATASETの作成を終了します。このコール以降は、その他の作成ファンクションをコールすることはできません。

GET*メンバー・ファンクション

現行のデータ値(適切なタイプのデータ値)を取得します。

GETCOUNTメンバー・ファンクション

ANYDATASETのデータ・インスタンスの数を取得します。

GETINSTANCEメンバー・ファンクション

ANYDATASETの次のインスタンスを取得します。

GETTYPEメンバー・ファンクション

ANYDATASETでデータ・インスタンスのタイプを説明するANYTYPEを取得します。

現行のデータ値(適切なタイプのデータ値)。

GETTYPENAMEメンバー・ファンクション

ANYDATASETでデータ・インスタンスのタイプを説明するANYTYPEを取得します。

PIECEWISEメンバー・プロシージャ

1回ごとに現行のデータ値が属性となるように構成およびアクセスのMODEを設定します(データ値がTYPECODE_OBJECTの場合)。

SET*メンバー・プロシージャ

現行のデータ値を設定します。

280.2.1 ADDINSTANCEメンバー・プロシージャ

このプロシージャは、ANYDATASETに新規データ・インスタンスを追加します。

構文

MEMBER PROCEDURE AddInstance(
   self          IN OUT NOCOPY ANYDATASET);

パラメータ

表280-2 ADDINSTANCEプロシージャのパラメータ

パラメータ 説明

self

構成されるANYDATASET

例外

DBMS_TYPES.invalid_parameters: Invalid parameters.
DBMS_TYPES.incorrect_usage: On incorrect usage.

使用上のノート

データ・インスタンスは順番に追加する必要があります。新しいデータ・インスタンスを追加する前に、前のデータ・インスタンスが完全に構成されているか、NULLに設定されている必要があります。

このコールを実行しても、構成が個別モードで自動的に設定されることはありません。個別にインスタンスを構成するには、PIECEWISEを明示的にコールする必要があります。

280.2.2 BEGINCREATE静的プロシージャ

このプロシージャは、指定のANYTYPEの一連のデータ値を作成できるANYDATASETを新規に作成します。

構文

STATIC PROCEDURE BeginCreate(
   typecode     IN PLS_INTEGER,
   rtype        IN OUT NOCOPY AnyType,
   aset         OUT NOCOPY ANYDATASET);

パラメータ

表280-3 BEGINCREATEプロシージャのパラメータ

パラメータ 説明

typecode

ANYDATASETのタイプに対するtypecode。

dtype

データ値のタイプ。このパラメータは、TYPECODE_OBJECT、Collection typecodesなどのユーザー定義タイプには必須です。

aset

構成されるANYDATASET

例外

DBMS_TYPES.invalid_parameters: dtypeは無効です(完全に構成されていない、および同様の障害)。

280.2.3 ENDCREATEメンバー・プロシージャ

このプロシージャは、ANYDATASETの作成を終了します。このコール以降は、その他の作成ファンクションをコールすることはできません。

構文

MEMBER PROCEDURE ENDCREATE(
   self              IN OUT NOCOPY ANYDATASET);

パラメータ

表280-4 ENDCREATEプロシージャのパラメータ

パラメータ 説明

self

構成されるANYDATASET

280.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;

パラメータ

表280-5 GET*ファンクションのパラメータ

パラメータ 説明

self

アクセスされるANYDATASET

num

取得する数値などの関連情報。

戻り値

DBMS_TYPES.SUCCESSまたはDBMS_TYPES.NO_DATA

PIECEWISEがコレクションに対してすでにコールされている場合にのみ、戻り値が関連します。このような場合、全要素にアクセスしたときにDBMS_TYPES.NO_DATAはコレクションの終了を示します。

例外

DBMS_TYPES.INVALID_PARAMETER: 無効なパラメータ(作成プロセスのこの時点での数値の追加が適切ではない場合)。

DBMS_TYPES.INCORRECT_USAGE: 不適切な使用。

DBMS_TYPES.TYPE_MISMATCH: 予想されたタイプが渡されたタイプと異なる場合。

280.2.5 GETCOUNTメンバー・ファンクション

このファンクションは、ANYDATASETのデータ・インスタンスの数を取得します。

構文

MEMBER FUNCTION GetCount(
   self        IN ANYDATASET) 
   RETURN      PLS_INTEGER;

パラメータ

表280-6 GETCOUNTファンクションのパラメータ

パラメータ 説明

self

アクセスされるANYDATASET

戻り値

データ・インスタンスの数。

280.2.6 GETINSTANCEメンバー・ファンクション

このファンクションは、ANYDATASETの次のインスタンスを取得します。ANYDATASETのインスタンスへの順次アクセスのみが許可されます。

このファンクションのコール後、GET*ファンクションをANYDATASETで起動して現在のインスタンスにアクセスできます。GET*コールの前にPIECEWISEをコールすると、個々の属性(またはコレクション要素)にアクセスできます。

ANYDATASETが完全に作成される前にこのファンクションを起動すると、エラーが発生します。

構文

MEMBER FUNCTION GETINSTANCE(
   self           IN OUT NOCOPY ANYDATASET)
   RETURN         PLS_INTEGER;

パラメータ

表280-7 GETINSTANCEファンクションのパラメータ

パラメータ 説明

self

アクセスされるANYDATASET

戻り値

DBMS_TYPES.SUCCESSまたはDBMS_TYPES.NO_DATA

DBMS_TYPES.NO_DATAは、ANYDATASETの終わり(すべてのインスタンスがアクセスしたこと)を示します。

使用上のノート

このファンクションは、最初のインスタンスにアクセスする前にコールしてください。

280.2.7 GETTYPEメンバー・ファンクション

このファンクションは、ANYDATASETでデータ・インスタンスのタイプを説明するAnyTypeを取得します。

構文

MEMBER FUNCTION GETTYPE(
   self           IN ANYDATASET,
   typ            OUT NOCOPY AnyType)
   RETURN         PLS_INTEGER;

パラメータ

表280-8 GETTYPEファンクションのパラメータ

パラメータ 説明

self

ANYDATASET

typ

AnyDataに対応するANYTYPE。ユーザー定義ファンクションを表していない場合は、NULLになることがあります。

戻り値

ANYDATAのタイプに対応するtypecode。

280.2.8 GETTYPENAMEメンバー・ファンクション

このプロシージャは、ANYDATASETの完全修飾名を取得します。

ANYDATASETが組込みタイプに基づいている場合、このファンクションはNUMBERおよび関連情報を戻します。

ユーザー定義タイプに基づいている場合、このファンクションはschema_name.type_name(SCOTT.FOOなど)を戻します。

一時的な匿名タイプに基づいている場合、このファンクションはNULLを戻します。

構文

MEMBER FUNCTION GETTYPENAME(
   self           IN ANYDATASET)
   RETURN         VARCHAR2;

パラメータ

表280-9 GETTYPENAMEファンクションのパラメータ

パラメータ 説明

self

構成されるANYDATASET。

戻り値

ANYDATASETのタイプ名。

280.2.9 PIECEWISEメンバー・プロシージャ

このプロシージャは、1回ごとに現行のデータ値が属性となるように構成およびアクセスのMODEを設定します(データ値がTYPECODE_OBJECTの場合)。

構成MODE、コレクション要素となるデータ値のアクセスを一度に設定します(データ値がコレクションTYPEの場合)。このコールが実行されると、後続の SET*およびGET*へのコールにより順番に個別の属性またはコレクション要素が取得されます。

構文

MEMBER PROCEDURE PIECEWISE(
   self         IN OUT NOCOPY ANYDATASET);

パラメータ

表280-10 PIECEWISEプロシージャのパラメータ

パラメータ 説明

self

構成されるANYDATASET。

例外

DBMS_TYPES.INVALID_PARAMETERS: 無効なパラメータ。

DBMS_TYPES.INCORRECT_USAGE: 不適切な使用。

使用上のノート

このコールを実行するには、現行のデータ値がオブジェクトまたはコレクションのタイプである必要があります。埋め込まれたオブジェクト・タイプの属性またはネストされたコレクションの個別の構成またはアクセスはサポートされていません。

280.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);

パラメータ

表280-11 SET*プロシージャのパラメータ

パラメータ 説明

self

アクセスされるANYDATASET

num

設定する数値などの関連情報。

last_elem

PIECEWISEがコレクションに対してすでにコールされている場合にのみ関連します。コレクションの最後の要素の場合はTRUE、そうでない場合はFALSEに設定します。

例外

  • DBMS_TYPES.INVALID_PARAMETERS: 無効なパラメータ(作成プロセスのこの時点での数値の追加が適切ではない場合)。

  • DBMS_TYPES.INCORRECT_USAGE: 不適切な使用。

  • DBMS_TYPES.TYPE_MISMATCH: 予想されたタイプが渡されたタイプと異なる場合。