282 ANYDATAタイプ
ANYDATA
タイプには、指定のタイプのインスタンスおよびそのタイプの説明が含まれています。つまり、ANYDATA
は自己記述型です。ANYDATA
は、データベースに永続的に格納できます。
この章のトピックは、次のとおりです:
282.2 ANYDATAタイプの操作上のノート
この項では、ANYDATAタイプの構成およびアクセスに関連するノートについて説明します。
構成
ANYDATA
を構成するには、2通りの方法があります。CONVERT*
コールを使用すると、単一のコールでANYDATA
全体を構成できます。Oracle ORDBMSのあらゆるタイプからANYDATA
まで、明示的なCASTファンクションとして機能します。
STATIC FUNCTION ConvertBDouble(dbl IN BINARY_DOUBLE) return ANYDATA, STATIC FUNCTION ConvertBfile(b IN BFILE) RETURN ANYDATA, STATIC FUNCTION ConvertBFloat(fl IN BINARY_FLOAT) return ANYDATA, STATIC FUNCTION ConvertBlob(b IN BLOB) RETURN ANYDATA, STATIC FUNCTION ConvertChar(c IN CHAR) RETURN ANYDATA, STATIC FUNCTION ConvertClob(c IN CLOB) RETURN ANYDATA, STATIC FUNCTION ConvertCollection(col IN "collection_type") RETURN ANYDATA, STATIC FUNCTION ConvertDate(dat IN DATE) RETURN ANYDATA, STATIC FUNCTION ConvertIntervalDS(inv IN INTERVAL DAY TO SECOND) return ANYDATA, STATIC FUNCTION ConvertIntervalYM(invIN INTERVAL YEAR TO MONTH) return ANYDATA, STATIC FUNCTION ConvertNchar(nc IN NCHAR) return ANYDATA, STATIC FUNCTION ConvertNClob(nc IN NCLOB) return ANYDATA, STATIC FUNCTION ConvertNumber(num IN NUMBER) RETURN ANYDATA, STATIC FUNCTION ConvertNVarchar2(nc IN NVARCHAR2) return ANYDATA, STATIC FUNCTION ConvertObject(obj IN "<object_type>") RETURN ANYDATA, STATIC FUNCTION ConvertRaw(r IN RAW) RETURN ANYDATA, STATIC FUNCTION ConvertRef(rf IN REF "<object_type>") RETURN ANYDATA, STATIC FUNCTION ConvertTimestamp(ts IN TIMESTAMP) return ANYDATA, STATIC FUNCTION ConvertTimestampTZ(ts IN TIMESTAMP WITH TIMEZONE) return ANYDATA, STATIC FUNCTION ConvertTimestampLTZ(ts IN TIMESTAMP WITH LOCAL TIMEZONE) return ANYDATA, STATIC FUNCTION ConvertURowid(rid IN UROWID) return ANYDATA, STATIC FUNCTION ConvertVarchar(c IN VARCHAR) RETURN ANYDATA, STATIC FUNCTION ConvertVarchar2(c IN VARCHAR2) RETURN ANYDATA,
ANYDATA
を構成するもう1つの方法は、個別のアプローチによるものです。構成プロセスは、BEGINCREATE静的プロシージャ・コールで開始し、ENDCREATEメンバー・プロシージャ・コールで終了します。この2つのコールの間では、SET*
コールを使用して、オブジェクト・タイプの各属性またはコレクションの要素を設定できます。オブジェクト属性およびコレクション要素に個別にアクセスするには、GET*
コールの前にPIECEWISEメンバー・プロシージャ・コールを起動しておく必要があります。
ノート: ANYDATA
は、最初の属性(またはコレクション要素)から順番に構成またはアクセスする必要があります。BEGINCREATE
コールは、個別モードで構成を自動的に開始します。BEGINCREATE
の後、すぐにPIECEWISE
をコールする必要はありません。構成プロセスを終了するには、ENDCREATE
をコールする必要があります(その後、アクセス・コールが実行できます)。
アクセス
アクセス・ファンクションは、SQLに基づいて使用できます。これらのファンクションは、タイプの不一致が発生しても例外をスローしません。そのかわりに、ANYDATA
のタイプがアクセスのタイプに対応していない場合に、NULL
を戻します。問合せで戻されたタイプのうちANYDATA
ファンクションのみを使用したい場合は、GETTYPENAME
を使用するWHERE
句を使用し、該当するタイプを選択します("SYS
.NUMBER
"と指定)。各ファンクションは、SYS.ANYDATA
ラッパーの中に指定されたデータ・タイプの値を戻します。
MEMBER FUNCTION AccessBDouble(self IN ANYDATA) return BINARY_DOUBLE DETERMINISTIC, MEMBER FUNCTION AccessBfile(self IN ANYDATA) return BFILE, MEMBER FUNCTION AccessBFloat(self IN ANYDATA) return BINARY_FLOAT DETERMINISTIC, MEMBER FUNCTION AccessBlob(self IN ANYDATA) return BLOB, MEMBER FUNCTION AccessChar(self IN ANYDATA) return CHAR, MEMBER FUNCTION AccessClob(self IN ANYDATA) return CLOB, MEMBER FUNCTION AccessDate(self IN ANYDATA) return DATE, MEMBER FUNCTION AccessIntervalYM(self IN ANYDATA) return INTERVAL YEAR TO MONTH, MEMBER FUNCTION AccessIntervalDS(self IN ANYDATA) return INTERVAL DAY TO SECOND, MEMBER FUNCTION AccessNchar(self IN ANYDATA) return NCHAR, MEMBER FUNCTION AccessNClob(self IN ANYDATA) return NCLOB MEMBER FUNCTION AccessNumber(self IN ANYDATA) return NUMBER, MEMBER FUNCTION AccessNVarchar2(self IN ANYDATA) return NVARCHAR2, MEMBER FUNCTION AccessRaw(self IN ANYDATA) return RAW, MEMBER FUNCTION AccessTimestamp(self IN ANYDATA) return TIMESTAMP, MEMBER FUNCTION AccessTimestampLTZ(self IN ANYDATA) return TIMESTAMP WITH LOCAL TIMEZONE, MEMBER FUNCTION AccessTimestampTZ(self IN ANYDATA) return TIMESTAMP WITH TIMEZONE, MEMBER FUNCTION AccessURowid(self IN ANYDATA) return UROWID DETERMINISTIC MEMBER FUNCTION AccessVarchar(self IN ANYDATA) return VARCHAR, MEMBER FUNCTION AccessVarchar2(self IN ANYDATA) return VARCHAR2,
282.3 ANYDATAサブプログラムの要約
この表は、ANYDATA
のサブプログラムをアルファベット順に示し、簡単に説明しています。
表282-1 ANYDATAタイプのサブプログラム
サブプログラム | 説明 |
---|---|
新しい |
|
|
|
現行のデータ値(適切なタイプのデータ値)を取得します。 |
|
|
|
|
|
1回ごとに現行のデータ値が属性となるようにアクセスの |
|
現行のデータ値を設定します。 |
282.3.1 BEGINCREATE静的プロシージャ
このプロシージャは、新しいANYDATA
で作成プロセスを開始します。
構文
STATIC PROCEDURE BeginCreate( dtype IN OUT NOCOPY AnyType, adata OUT NOCOPY ANYDATA);
パラメータ
表282-2 BEGINCREATEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
|
|
構成されるANYDATA。 |
例外
DBMS_TYPES.INVALID_PARAMETERS
: dtypeは無効です(完全に構成されていない、および同様の障害)。
使用上のノート
このコールの後、すぐにPIECEWISE
をコールする必要はありません。この構成プロセスは、個別モードで自動的に開始されます。
282.3.2 ENDCREATEメンバー・プロシージャ
このプロシージャは、ANYDATA
の作成を終了します。このコール以降は、その他の作成ファンクションをコールすることはできません。
構文
MEMBER PROCEDURE EndCreate( self IN OUT NOCOPY ANYDATA);
パラメータ
表282-3 ENDCREATEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
|
282.3.3 GET*メンバー・ファンクション
これらのファンクションは、現行のデータ値(適切なタイプのデータ値)を取得します。
現在のデータ値のタイプは、アクセスするモードにより異なります。つまり、PIECEWISE
コールを起動しているかどうかにより異なります。
PIECEWISE
がコールされていない場合は、ANYDATA
に完全にアクセスし、データ値のタイプはANYDATA
のタイプと一致する必要があります。
PIECEWISE
がコールされている場合、ANYDATA
は個別にアクセスされます。データ値のタイプは、現在の位置での属性のタイプ(またはコレクション要素)に一致する必要があります。
構文
MEMBER FUNCTION GetBDouble( self IN ANYDATA, dbl OUT NOCOPY BINARY_DOUBLE) RETURN PLS_INTEGER; MEMBER FUNCTION GetBfile( self IN ANYDATA, b OUT NOCOPY BFILE) RETURN PLS_INTEGER; MEMBER FUNCTION GetBFloat( self IN ANYDATA, fl OUT NOCOPY BINARY_FLOAT) RETURN PLS_INTEGER; MEMBER FUNCTION GetBlob( self IN ANYDATA, b OUT NOCOPY BLOB) RETURN PLS_INTEGER; MEMBER FUNCTION GetChar( self IN ANYDATA, c OUT NOCOPY CHAR) RETURN PLS_INTEGER; MEMBER FUNCTION GetClob( self IN ANYDATA, c OUT NOCOPY CLOB) RETURN PLS_INTEGER; MEMBER FUNCTION GetCollection( self IN ANYDATA, col OUT NOCOPY "<collection_type>") RETURN PLS_INTEGER; MEMBER FUNCTION GetDate( self IN ANYDATA, dat OUT NOCOPY DATE) RETURN PLS_INTEGER; MEMBER FUNCTION GetIntervalDS( self IN ANYDATA, inv OUT NOCOPY INTERVAL DAY TO SECOND) RETURN PLS_INTEGER; MEMBER FUNCTION GetIntervalYM( self IN ANYDATA, inv OUT NOCOPY INTERVAL YEAR TO MONTH) RETURN PLS_INTEGER; MEMBER FUNCTION GetNchar( self IN ANYDATA, nc OUT NOCOPY NCHAR) RETURN PLS_INTEGER; MEMBER FUNCTION GetNClob( self IN ANYDATA, nc OUT NOCOPY NCLOB) RETURN PLS_INTEGER; MEMBER FUNCTION GetNumber( self IN ANYDATA, num OUT NOCOPY NUMBER) RETURN PLS_INTEGER; MEMBER FUNCTION GetNVarchar2( self IN ANYDATA, nc OUT NOCOPY NVARCHAR2) RETURN PLS_INTEGER; MEMBER FUNCTION GetObject( self IN ANYDATA, obj OUT NOCOPY "<object_type>") RETURN PLS_INTEGER; MEMBER FUNCTION GetRaw( self IN ANYDATA, r OUT NOCOPY RAW) RETURN PLS_INTEGER; MMEMBER FUNCTION GetRef( self IN ANYDATA, rf OUT NOCOPY REF "<object_type>") RETURN PLS_INTEGER; MEMBER FUNCTION GetTimestamp( self IN ANYDATA, ts OUT NOCOPY TIMESTAMP) RETURN PLS_INTEGER; MEMBER FUNCTION GetTimestampTZ( self IN ANYDATA, ts OUT NOCOPY TIMESTAMP WITH TIME ZONE) RETURN PLS_INTEGER; MEMBER FUNCTION GetTimestampLTZ( self IN ANYDATA, ts OUT NOCOPY TIMESTAMP WITH LOCAL TIME ZONE) RETURN PLS_INTEGER; MEMBER FUNCTION GetVarchar( self IN ANYDATA, c OUT NOCOPY VARCHAR) RETURN PLS_INTEGER; MEMBER FUNCTION GetVarchar2( self IN ANYDATA, c OUT NOCOPY VARCHAR2) RETURN PLS_INTEGER;
パラメータ
表282-4 GET*ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
ANYDATA。 |
|
取得する数値。 |
戻り値
DBMS_TYPES
.SUCCESS
またはDBMS_TYPES
.NO_DATA
PIECEWISE
がコレクションに対してすでにコールされている場合にのみ、戻り値が関連します。このような場合、全要素にアクセスしたときにDBMS_TYPES.NO_DATAはコレクションの終了を示します。
例外
DBMS_TYPES.TYPE_MISMATCH
: 予想されたタイプが渡されたタイプと異なる場合。
DBMS_TYPES.INVALID_PARAMETERS
: 無効なパラメータ(作成プロセスのこの時点での数値の追加が適切ではない場合)。
DBMS_TYPES.INCORRECT_USAGE
: 不適切な使用。
282.3.4 GETTYPEメンバー・ファンクション
このファンクションは、ANYDATA
のtypecodeを取得します。
構文
MEMBER FUNCTION GETTYPE( self IN ANYDATA, typ OUT NOCOPY AnyType) RETURN PLS_INTEGER;
パラメータ
表282-5 GETTYPEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
|
|
|
戻り値
ANYDATA
のタイプに対応するtypecode。
282.3.5 GETTYPENAMEメンバー・ファンクション
このファンクションは、ANYDATA
の完全修飾名を取得します。
ANYDATA
が組込みタイプに基づいている場合、このファンクションはNUMBERなどの関連情報を戻します。
ユーザー定義タイプに基づいている場合、このファンクションはschema_name.type_name(SCOTT.FOOなど)を戻します。
一時的な匿名タイプに基づいている場合、このファンクションはNULLを戻します。
構文
MEMBER FUNCTION GETTYPENAME( self IN ANYDATA) RETURN VARCHAR2;
パラメータ
表282-6 GETTYPENAMEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
|
戻り値
ANYDATA
のタイプ名。
282.3.6 PIECEWISEメンバー・プロシージャ
このプロシージャは、1回ごとに現行のデータ値が属性となるようにアクセス・モードを設定します(データ値がTYPECODE_OBJECT
の場合)。
データ値のアクセス・モードを一度にコレクション要素に設定します(データ値がコレクション・タイプの場合)。このコールが実行されると、後続のSET*
およびGET*
へのコールにより順番に個別の属性またはコレクション要素が取得されます。
構文
MEMBER PROCEDURE PIECEWISE( self IN OUT NOCOPY ANYDATA);
パラメータ
表282-7 PIECEWISEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
現在のデータ値。 |
例外
-
DBMS_TYPES.INVALID_PARAMETERS
-
DBMS_TYPES.INCORRECT_USAGE
: 不適切な使用。
使用上のノート
このコールの実行前は、現行のデータ値は、OBJECT
またはCOLLECTION
タイプである必要があります。
オブジェクトまたはコレクション・タイプのネストされた属性の個別の構成またはアクセスはサポートされていません。
282.3.7 SET*メンバー・プロシージャ
このプロシージャは、現行のデータ値を設定します。
現行のデータ値のタイプに応じてコールする必要のあるプロシージャのリストです。データ値のタイプは、個別の構成プロセス中の現在の位置での属性のタイプにする必要があります。
構文
MEMBER PROCEDURE SETBDOUBLE( self IN OUT NOCOPY ANYDATA, dbl IN BINARY_DOUBLE, last_elem IN boolean DEFAULT FALSE); MEMBER PROCEDURE SETBFILE( self IN OUT NOCOPY ANYDATA, b IN BFILE, last_elem IN boolean DEFAULT FALSE); MEMBER PROCEDURE SETBFLOAT( self IN OUT NOCOPY ANYDATA, fl IN BINARY_FLOAT, last_elem IN boolean DEFAULT FALSE); MEMBER PROCEDURE SETBLOB( self IN OUT NOCOPY ANYDATA, b IN BLOB, last_elem IN boolean DEFAULT FALSE); MEMBER PROCEDURE SETCHAR( self IN OUT NOCOPY ANYDATA, c IN CHAR, last_elem IN boolean DEFAULT FALSE); MEMBER PROCEDURE SETCLOB( self IN OUT NOCOPY ANYDATA, c IN CLOB, last_elem IN boolean DEFAULT FALSE); MEMBER PROCEDURE SETCOLLECTION( self IN OUT NOCOPY ANYDATA, col IN "<collectyion_type>", last_elem IN boolean DEFAULT FALSE); MEMBER PROCEDURE SETDATE( self IN OUT NOCOPY ANYDATA, dat IN DATE, last_elem IN boolean DEFAULT FALSE); MEMBER PROCEDURE SETINTERVALDS( self IN OUT NOCOPY ANYDATA, inv IN INTERVAL DAY TO SECOND, last_elem IN boolean DEFAULT FALSE); MEMBER PROCEDURE SETINTERVALYM( self IN OUT NOCOPY ANYDATA, inv IN INTERVAL YEAR TO MONTH, last_elem IN boolean DEFAULT FALSE); MEMBER PROCEDURE SETNCHAR( self IN OUT NOCOPY ANYDATA, nc IN NCHAR, last_elem IN boolean DEFAULT FALSE); MEMBER PROCEDURE SETNCLOB( self IN OUT NOCOPY ANYDATA, nc IN NClob, last_elem IN boolean DEFAULT FALSE); MEMBER PROCEDURE SETNUMBER( self IN OUT NOCOPY ANYDATA, num IN NUMBER, last_elem IN boolean DEFAULT FALSE); MEMBER PROCEDURE SETNVARCHAR2( self IN OUT NOCOPY ANYDATA, nc IN NVarchar2, last_elem IN boolean DEFAULT FALSE), MEMBER PROCEDURE SETOBJECT( self IN OUT NOCOPY ANYDATA, obj IN "<object_type>", last_elem IN boolean DEFAULT FALSE); MEMBER PROCEDURE SETRAW( self IN OUT NOCOPY ANYDATA, r IN RAW, last_elem IN boolean DEFAULT FALSE); MEMBER PROCEDURE SETREF( self IN OUT NOCOPY ANYDATA, rf IN REF "<object_type>", last_elem IN boolean DEFAULT FALSE); MEMBER PROCEDURE SETTIMESTAMP( self IN OUT NOCOPY ANYDATA, ts IN TIMESTAMP, last_elem IN BOOLEAN DEFAULT FALSE); MEMBER PROCEDURE SETTIMESTAMPTZ(self IN OUT NOCOPY ANYDATA, ts IN TIMESTAMP WITH TIME ZONE, last_elem IN BOOLEAN DEFAULT FALSE); MEMBER PROCEDURE SETTIMESTAMPLTZ( self IN OUT NOCOPY ANYDATA, ts IN TIMESTAMP WITH LOCAL TIME ZONE, last_elem IN boolean DEFAULT FALSE), MEMBER PROCEDURE SETVARCHAR( self IN OUT NOCOPY ANYDATA, c IN VARCHAR, last_elem IN boolean DEFAULT FALSE); MEMBER PROCEDURE SETVARCHAR2( self IN OUT NOCOPY ANYDATA, c IN VARCHAR2, last_elem IN boolean DEFAULT FALSE);
パラメータ
表282-8 SET* Procedureパラメータ
パラメータ | 説明 |
---|---|
|
|
|
設定する数値などの関連情報。 |
|
コレクションの最後の要素の場合は |
例外
-
DBMS_TYPES.INVALID_PARAMETERS
: 無効なパラメータ(作成プロセスのこの時点での数値の追加が適切ではない場合)。 -
DBMS_TYPES.INCORRECT_USAGE
: 不適切な使用。 -
DBMS_TYPES.TYPE_MISMATCH
: 予想されたタイプが渡されたタイプと異なる場合。
使用上のノート
BEGINCREATE
がコールされた場合は、個別モードですでに構成が開始されています。SET*
への後続のコールにより、次の属性値が設定されます。
ANYDATA
がスタンドアロンのコレクションである場合は、SET*
をコールすると次のコレクション要素が設定されます。