日本語PDF

284 ANYTYPEタイプ

ANYTYPEタイプには、名前が付いているかどうかにかかわらず、オブジェクト・タイプやコレクション・タイプなどの永続的なSQLタイプの説明を含めることができます。一時的なタイプの説明を新しく構成する場合にも使用できます。

CREATE TYPE文を使用して作成できるのは、新規の永続タイプのみです。ANYTYPEインタフェースを使用して作成できるのは、新規の一時タイプのみです。

Oracle Database 19c以降では、GETANYTYPEFROMPERSISTENTファンクションがGETPERISTENT静的ファンクションに置き換わりました。

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

284.1 ANYTYPEサブプログラムの要約

この表は、ANYTYPEのサブプログラムをアルファベット順に示し、簡単に説明しています。

表284-1 ANYTYPEのサブプログラム

サブプログラム 説明

BEGINCREATE静的プロシージャ

一時的なタイプの説明の作成に使用できる新規のANYTYPEのインスタンスを作成します。

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

COLLECTIONまたは組込みタイプの構成に必要な追加情報を設定します。

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

DBMS_TYPES.TYPECODE_OBJECTのtypecodeであるANYTYPEに属性を追加します。

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

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

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

ANYTYPEのタイプ情報を取得します。

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

タイプの属性のタイプ情報を取得します(TYPECODE_OBJECTである場合)。selfパラメータがコレクション・タイプのパラメータである場合、コレクションの要素タイプのタイプ情報を取得します。

GETANYTYPEFROMPERSISTENTファンクション

このスタンドアロン・ファンクションは、古い静的ファンクションGETPERSISTENTに置き換わるものです。これは、CREATE TYPE SQL文を使用して以前に作成された永続的なタイプに対応するANYTYPEを戻します。

284.1.1 BEGINCREATE静的プロシージャ

このプロシージャは、一時的なタイプの説明の作成に使用できる新規のANYTYPEのインスタンスを作成します。

構文

STATIC PROCEDURE BEGINCREATE(
   typecode       IN          PLS_INTEGER,
   atype          OUT NOCOPY  ANYTYPE);

パラメータ

表284-2 BEGINCREATEプロシージャのパラメータ

パラメータ 説明

typecode

DBMS_TYPESパッケージの定数を使用します。

ユーザー定義タイプのtypecode:

  • DBMS_TYPES.TYPECODE_OBJECT

  • DBMS_TYPES.TYPECODE_VARRAYまたは

  • DBMS_TYPES.TYPECODE_TABLE

組込みタイプのtypecode:

  • DBMS_TYPES.TYPECODE_NUMBERおよび同様のタイプ

atype

一時的なタイプのANYTYPE

284.1.2 SETINFOメンバー・プロシージャ

このプロシージャは、COLLECTIONまたは組込みタイプの構成に必要な追加情報を設定します。

構文

MEMBER PROCEDURE SETINFO(
   self          IN OUT NOCOPY ANYTYPE,
   prec          IN PLS_INTEGER,
   scale         IN PLS_INTEGER,
   len           IN PLS_INTEGER,
   csid          IN PLS_INTEGER,
   csfrm         IN PLS_INTEGER,
   atype         IN ANYTYPE DEFAULT NULL,
   elem_tc       IN PLS_INTEGER DEFAULT NULL,
   elem_count    IN PLS_INTEGER DEFAULT 0);

パラメータ

表284-3 SETINFOプロシージャのパラメータ

パラメータ 説明

self

構成中の一時的なANYTYPE

prec

オプション。typecodeがNUMBERを表す場合に必要です。

精度およびスケールを指定します。指定しない場合は無視されます。

scale

オプション。typecodeがNUMBERを表す場合に必要です。

精度およびスケールを指定します。指定しない場合は無視されます。

len

オプション。typecodeがRAWCHARVARCHARまたはVARCHAR2タイプを表す場合に必要です。長さを指定します。

csid

typecodeがCHARVARCHARまたはVARCHAR2などの文字情報を必要とするタイプを表す場合に必要です。

csfrm

typecodeがCHARVARCHARまたはVARCHAR2などの文字情報を必要とするタイプを表す場合に必要です。

atype

オプション。コレクション要素のtypecodeが、TYPECODE_OBJECTなどのユーザー定義タイプである場合に必要です。また、TYPECODE_REFなどのユーザー定義タイプ情報を必要とする組込みタイプにも必要です。それ以外の場合は、このパラメータは必要ありません。

コレクション・タイプに必要なパラメータは次のとおりです。

表284-4 SETINFOプロシージャのパラメータ - コレクション・タイプ

パラメータ 説明

elem_tc

DBMS_TYPESパッケージのコレクション要素のtypecodeである必要があります。

elem_count

selfがネストした表(TYPECODE_TABLE)を表す場合はelem_countに0(ゼロ)を渡します。selfVARRAYを表す場合は、コレクションの件数を渡します。

例外

  • DBMS_TYPES.INVALID_PARAMETER: 無効なパラメータ(typecode、typeinfo)。

  • DBMS_TYPES.INCORRECT_USAGE: 不適切な使用(ENDCREATEおよび同様のアクションをコールした後はコールできません)。

使用上のノート

永続的なユーザー定義タイプを表すANYTYPEにこのファンクションをコールするとエラーが発生します。

284.1.3 ADDATTRメンバー・プロシージャ

このプロシージャは、DBMS_TYPES.TYPECODE_OBJECTのtypecodeであるANYTYPEに属性を追加します。

構文

MEMBER PROCEDURE ADDATTR(
   self          IN OUT NOCOPY ANYTYPE,
   aname         IN VARCHAR2,
   typecode      IN PLS_INTEGER,
   prec          IN PLS_INTEGER,
   scale         IN PLS_INTEGER,
   len           IN PLS_INTEGER,
   csid          IN PLS_INTEGER,
   csfrm         IN PLS_INTEGER,
   attr_type     IN ANYTYPE DEFAULT NULL);

パラメータ

表284-5 ADDATTRプロシージャのパラメータ

パラメータ 説明

self

構成中の一時的なANYTYPEDBMS_TYPES.TYPECODE_OBJECTタイプである必要があります。

aname

オプション。属性名。NULLを指定できます。

typecode

属性のtypecode。組込みまたはユーザー定義のtypecode(DBMS_TYPESパッケージ)。

prec

オプション。typecodeがNUMBERを表す場合に必要です。精度およびスケールを指定します。指定しない場合は無視されます。

scale

オプション。typecodeがNUMBERを表す場合に必要です。精度およびスケールを指定します。指定しない場合は無視されます。

len

オプション。typecodeがRAWCHARVARCHARまたはVARCHAR2タイプを表す場合に必要です。長さを指定します。

csid

オプション。typecodeがCHARVARCHARまたはVARCHAR2などの文字情報を必要とするタイプを表す場合に必要です。

csfrm

オプション。typecodeがCHARVARCHARまたはVARCHAR2などの文字情報を必要とするタイプを表す場合に必要です。

attr_type

オプション。ユーザー定義タイプに対応するANYTYPE。このパラメータは、属性がユーザー定義タイプの場合に必要です。

例外

  • DBMS_TYPES.INVALID_PARAMETERS: 無効なパラメータ(typecode、typeinfo)。

  • DBMS_TYPES.INCORRECT_USAGE: 不適切な使用(EndCreateおよび同様のアクションをコールした後はコールできません)。

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

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

構文

MEMBER PROCEDURE ENDCREATE(
   self           IN OUT NOCOPY ANYTYPE);

パラメータ

表284-6 ENDCREATEプロシージャのパラメータ

パラメータ 説明

self

構成中の一時的なANYTYPE

284.1.5 GETINFOメンバー・ファンクション

このファンクションは、ANYTYPEのタイプ情報を取得します。

構文

MEMBER FUNCTION GETINFO (
   self        IN ANYTYPE,
   prec        OUT PLS_INTEGER, 
   scale       OUT PLS_INTEGER,
   len         OUT PLS_INTEGER, 
   csid        OUT PLS_INTEGER,
   csfrm       OUT PLS_INTEGER,
   schema_name OUT VARCHAR2, 
   type_name   OUT VARCHAR2, 
   version     OUT varchar2,
   numelems    OUT PLS_INTEGER)
   RETURN      PLS_INTEGER;

パラメータ

表284-7 GETINFOファンクションのパラメータ

パラメータ 説明

self

AnyType

prec

typecodeがNUMBERを表す場合。精度およびスケールを指定します。指定しない場合は無視されます。

scale

typecodeがNUMBERを表す場合。精度およびスケールを指定します。指定しない場合は無視されます。

len

typecodeがRAWCHARVARCHARまたはVARCHAR2タイプを表す場合。長さを指定します。

csid

typecodeがCHARVARCHARまたはVARCHAR2などの文字情報を必要とするタイプを表す場合。

csid

typecodeがCHARVARCHARまたはVARCHAR2などの文字情報を必要とするタイプを表す場合。

schema_name

タイプのスキーマ(永続的な場合)。

type_name

タイプのタイプ名。

version

タイプのバージョン。

numelems

selfTYPECODE_VARRAYである場合は、VARRAY件数が指定されます。selfがTYPECODE_OBJECTである場合は、属性の数が指定されます。

戻り値

selfのtypecode。

例外

  • DBMS_TYPES.INVALID_PARAMETERS: 無効なパラメータ(位置が境界を越えているか、ANYTYPEが適切に構成されていない)。

284.1.6 GETATTRELEMINFOメンバー・ファンクション

このファンクションは、タイプの属性のタイプ情報を取得します(TYPECODE_OBJECTである場合)。selfパラメータがコレクション・タイプのパラメータである場合、コレクションの要素タイプのタイプ情報を取得します。

構文

MEMBER FUNCTION GETATTRELEMINFO (
   self           IN ANYTYPE, 
   pos            IN PLS_INTEGER,
   prec           OUT PLS_INTEGER, 
   scale          OUT PLS_INTEGER,
   len            OUT PLS_INTEGER, 
   csid           OUT PLS_INTEGER, 
   csfrm          OUT PLS_INTEGER,
   attr_elt_type  OUT ANYTYPE
   aname          OUT VARRCHAR2)
   RETURN         PLS_INTEGER;

パラメータ

表284-8 GETATTRELEMINFOファンクションのパラメータ

パラメータ 説明

self

AnyType

pos

selfがTYPECODE_OBJECTである場合は、属性の位置が1から指定されます。そうでない場合は、無視されます。

prec

属性またはコレクション要素のtypecodeがNUMBERを表す場合。精度およびスケールを指定します。指定しない場合は無視されます。

scale

属性またはコレクション要素のtypecodeがNUMBERを表す場合。精度およびスケールを指定します。指定しない場合は無視されます。

len

typecodeがRAWCHARVARCHARまたはVARCHAR2タイプを表す場合。長さを指定します。

csid、csfrm

typecodeがCHARVARCHARまたはVARCHAR2などの文字情報を必要とするタイプを表す場合。文字セットID、文字セット・フォームを指定します。

attr_elt_type

属性またはコレクション要素のtypecodeがユーザー定義タイプを表す場合、それに対応するANYTYPEを戻します。その後、attr_elt_typeを記述できます。

aname

属性名(オブジェクト・タイプの属性の場合。そうでない場合はNULL)。

戻り値

属性またはコレクション要素のtypecode。

例外

DBMS_TYPES.INVALID_PARAMETERS: 無効なパラメータ(位置が境界を越えているか、ANYTYPEが適切に構成されていない)。

284.1.7 GETANYTYPEFROMPERSISTENTファンクション

このスタンドアロン・ファンクションは、CREATE TYPE SQL文を使用して以前に作成された永続的なタイプに対応するANYTYPEを戻します。Oracle Database 19c以降では、GETANYTYPEFROMPERSISTENTファンクションがGETPERISTENT静的ファンクションに置き換わりました。

構文

GETANYTYPEFROMPERSISTENT(
   schema_name      IN VARCHAR2,
   type_name        IN VARCHAR2)
RETURN           ANYTYPE;

パラメータ

表284-9 GETANYTYPEFROMPERSISTENTファンクションのパラメータ

パラメータ 説明

schema_name

タイプのスキーマ名

type_name

タイプ名。

戻り値

CREATE TYPE SQL文を使用して以前に作成された永続的なタイプに対応するANYTYPE