ANYTYPE TYPE
An ANYTYPE TYPE can contain a type description of any persistent SQL type, named or unnamed, including object types and collection types. It can also be used to construct new transient type descriptions.
New persistent types can only be created using the CREATE TYPE statement. Only new transient types can be constructed using the ANYTYPE interfaces.
Starting with Oracle Database 19c, the GETANYTYPEFROMPERSISTENT function replaces the GETPERISTENT static function.
This chapter discusses the following:
Summary of ANYTYPE Subprograms
This table lists the ANYTYPE subprograms in alphabetical order and briefly describes them.
Table 1 ANYTYPE Subprograms
| Subprogram | Description |
|---|---|
| BEGINCREATE Static Procedure | Creates a new instance of ANYTYPE which can be used to create a transient type description. |
| SETINFO Member Procedure | Sets any additional information required for constructing a COLLECTION or builtin type. |
| ADDATTR Member Procedure | Adds an attribute to an ANYTYPE (of typecode DBMS_TYPES.TYPECODE_OBJECT). |
| ENDCREATE Member Procedure | Ends creation of a transient ANYTYPE. Other creation functions cannot be called after this call. |
| GETINFO Member Function | Gets the type information for the ANYTYPE. |
| GETATTRELEMINFO Member Function | Gets the type information for an attribute of the type (if it is of TYPECODE_OBJECT). Gets the type information for a collection’s element type if the self parameter is of a collection type. |
| GETANYTYPEFROMPERSISTENT Function | This standalone function replaces the old static function GETPERSISTENT. This returns an ANYTYPE corresponding to a persistent type created earlier using the CREATE TYPE SQL statement. |
BEGINCREATE Static Procedure
This procedure creates a new instance of ANYTYPE which can be used to create a transient type description.
Syntax
STATIC PROCEDURE BEGINCREATE(
typecode IN PLS_INTEGER,
atype OUT NOCOPY ANYTYPE);
Parameters
Table 2 BEGINCREATE Procedure Parameters
| Parameter | Description |
|---|---|
typecode |
Use a constant from Typecodes for user-defined type:
Typecodes for builtin types:
|
atype |
ANYTYPE for a transient type |
SETINFO Member Procedure
This procedure sets any additional information required for constructing a COLLECTION or builtin type.
Syntax
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);
Parameters
Table 3 SETINFO Procedure Parameters
| Parameter | Description |
|---|---|
self |
The transient ANYTYPE that is being constructed. |
prec |
Optional.Required if typecode represents a Give precision and scale. Ignored otherwise. |
scale |
Optional.Required if typecode represents a Give precision and scale. Ignored otherwise. |
len |
Optional. Required if typecode represents a RAW, CHAR, VARCHAR, or VARCHAR2 type. Gives length. |
csid |
Required if typecode represents types requiring character information such as CHAR, VARCHAR, or VARCHAR2. |
csfrm |
Required if typecode represents types requiring character information such as CHAR, VARCHAR, or VARCHAR2. |
atype |
Optional. Required if collection element typecode is a user-defined type such as TYPECODE_OBJECT, and similar others. It is also required for a built-in type that needs user-defined type information such as TYPECODE_REF. This parameter is not needed otherwise. |
The Following Parameters Are Required For Collection Types
Table 4 SETINFO Procedure Parameters - Collection Types
| Parameter | Description |
|---|---|
elem_tc |
Must be of the collection element’s typecode (from DBMS_TYPES package). |
elem_count |
Pass 0 for elem_count if the self represents a nested table (TYPECODE_TABLE). Otherwise pass the collection count if self represents a VARRAY. |
Exceptions
-
DBMS_TYPES.INVALID_PARAMETER: Invalid Parameters (typecode, typeinfo) -
DBMS_TYPES.INCORRECT_USAGE: Incorrect usage (cannot call after callingENDCREATE, and similar actions.)
Usage Notes
It is an error to call this function on an ANYTYPE that represents a persistent user defined type.
ADDATTR Member Procedure
This procedure adds an attribute to an ANYTYPE (of typecode DBMS_TYPES.TYPECODE_OBJECT).
Syntax
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);
Parameters
Table 5 ADDATTR Procedure Parameters
| Parameter | Description |
|---|---|
self |
The transient ANYTYPE that is being constructed. Must be of type DBMS_TYPES.TYPECODE_OBJECT. |
aname |
Optional. Attribute’s name. Could be NULL. |
typecode |
Attribute’s typecode. Can be built-in or user-defined typecode (from DBMS_TYPES package). |
prec |
Optional. Required if typecode represents a NUMBER. Give precision and scale. Ignored otherwise. |
scale |
Optional. Required if typecode represents a NUMBER. Give precision and scale. Ignored otherwise. |
len |
Optional. Required if typecode represents a RAW, CHAR, VARCHAR, or VARCHAR2 type. Give length. |
csid |
Optional. Required if typecode represents a type requiring character information, such as CHAR, VARCHAR, or VARCHAR2. |
csfrm |
Optional. Required if typecode represents a type requiring character information, such as CHAR, VARCHAR, or VARCHAR2. |
attr_type |
Optional. ANYTYPE corresponding to a user-defined type. This parameter is required if the attribute is a user defined type. |
Exceptions
-
DBMS_TYPES.INVALID_PARAMETERS: Invalid Parameters (typecode, typeinfo) -
DBMS_TYPES.INCORRECT_USAGE: Incorrect usage (cannot call after callingEndCreate, and similar actions.)
ENDCREATE Member Procedure
This procedure ends creation of a transient ANYTYPE. Other creation functions cannot be called after this call.
Syntax
MEMBER PROCEDURE ENDCREATE(
self IN OUT NOCOPY ANYTYPE);
Parameter
Table 6 ENDCREATE Procedure Parameter
| Parameter | Description |
|---|---|
self |
The transient ANYTYPE that is being constructed. |
GETINFO Member Function
This function gets the type information for the ANYTYPE.
Syntax
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;
Parameters
Table 7 GETINFO Function Parameters
| Parameter | Description |
|---|---|
self |
The ANYTYPE. |
prec |
If typecode represents a number. Gives precision and scale. Ignored otherwise. |
scale |
If typecode represents a number. Gives precision and scale. Ignored otherwise. |
len |
If typecode represents a RAW, CHAR, VARCHAR, or VARCHAR2 type. Gives length. |
csid |
If typecode represents a type requiring character information such as: CHAR, VARCHAR, or VARCHAR2. |
csid |
If typecode represents a type requiring character information such as: CHAR, VARCHAR, or VARCHAR2. |
schema_name |
Type’s schema (if persistent). |
type_name |
Type’s typename. |
version |
Type’s version. |
numelems |
If self is a TYPECODE_VARRAY, this gives the VARRAY count. If self is of TYPECODE_OBJECT, this gives the number of attributes. |
Return Values
The typecode of self.
Exceptions
DBMS_TYPES.INVALID_PARAMETERS: Invalid Parameters (position is beyond bounds or theANYTYPEis not properly Constructed).
GETATTRELEMINFO Member Function
This function gets the type information for an attribute of the type (if it is of TYPECODE_OBJECT). Gets the type information for a collection’s element type if the self parameter is of a collection type.
Syntax
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;
Parameters
Table 8 GETATTRELEMINFO Function Parameters
| Parameter | Description |
|---|---|
self |
The ANYTYPE. |
pos |
If self is of TYPECODE_OBJECT, this gives the attribute position (starting at 1). It is ignored otherwise. |
prec |
If attribute/collection element typecode represents a NUMBER. Gives precision and scale. Ignored otherwise. |
scale |
If attribute/collection element typecode represents a NUMBER. Gives precision and scale. Ignored otherwise. |
len |
If typecode represents a RAW, CHAR, VARCHAR, or VARCHAR2 type. Gives length. |
csid, csfrm |
If typecode represents a type requiring character information such as: CHAR, VARCHAR, or VARCHAR2. Gives character set ID, character set form. |
attr_elt_type |
If attribute/collection element typecode represents a user-defined type, this returns the ANYTYPE corresponding to it. User can subsequently describe the attr_elt_type. |
aname |
Attribute name (if it is an attribute of an object type, NULL otherwise). |
Return Values
The typecode of the attribute or collection element.
Exceptions
DBMS_TYPES.INVALID_PARAMETERS: Invalid Parameters (position is beyond bounds or the ANYTYPE is not properly constructed).
GETANYTYPEFROMPERSISTENT Function
This standalone function returns an ANYTYPE corresponding to a persistent type created earlier using the CREATE TYPE SQL statement. Starting with Oracle Database 19c, the GETANYTYPEFROMPERSISTENT function replaces the GETPERISTENT static function.
Syntax
GETANYTYPEFROMPERSISTENT(
schema_name IN VARCHAR2,
type_name IN VARCHAR2)
RETURN ANYTYPE;
Parameters
Table 9 GETANYTYPEFROMPERSISTENT Function
| Parameter | Description |
|---|---|
schema_name |
Schema name of the type. |
type_name |
Type name. |
Return Values
An ANYTYPE corresponding to a persistent type created earlier using the CREATE TYPE SQL statement.