Ответ 1
Таблицы SQL и типы varray
Интересное решение было дано пользователем APC здесь. Для будущих читателей этого вопроса может быть интересно увидеть, что этот запрос обеспечивает то, что меня действительно интересует:
select coll_type, elem_type_name, type_name, length, upper_bound
from all_coll_types
where owner = 'SYS'
and elem_type_name IN ('VARCHAR2', 'NUMBER')
order by coll_type, elem_type_name, type_name;
Результат (в Oracle 11g):
+-------------+--------------+----------------------+------+-----------+
|COLL_TYPE |ELEM_TYPE_NAME|TYPE_NAME |LENGTH|UPPER_BOUND|
+-------------+--------------+----------------------+------+-----------+
|TABLE |NUMBER |KU$_OBJNUMSET |{null}| {null}|
|TABLE |NUMBER |KU$_XMLCOLSET_T |{null}| {null}|
|TABLE |NUMBER |ORA_MINING_NUMBER_NT |{null}| {null}|
|TABLE |VARCHAR2 |DBMS_AW$_COLUMNLIST_T | 100| {null}|
|TABLE |VARCHAR2 |DBMS_DEBUG_VC2COLL | 1000| {null}|
|TABLE |VARCHAR2 |HSBLKNAMLST | 30| {null}|
|TABLE |VARCHAR2 |KU$_VCNT | 4000| {null}|
|TABLE |VARCHAR2 |ORA_MINING_VARCHAR2_NT| 4000| {null}|
|VARYING ARRAY|NUMBER |AWRRPT_NUM_ARY |{null}| 30|
|VARYING ARRAY|NUMBER |JDM_NUM_VALS |{null}| 999|
|VARYING ARRAY|NUMBER |ODCIGRANULELIST |{null}| 65535|
|VARYING ARRAY|NUMBER |ODCINUMBERLIST |{null}| 32767|
|VARYING ARRAY|NUMBER |SQL_OBJECTS |{null}| 2000|
|VARYING ARRAY|NUMBER |TABLESPACE_LIST |{null}| 64000|
|VARYING ARRAY|VARCHAR2 |AQ$_JMS_NAMEARRAY | 200| 1024|
|VARYING ARRAY|VARCHAR2 |AQ$_MIDARRAY | 32| 1024|
|VARYING ARRAY|VARCHAR2 |AWRRPT_VCH_ARY | 80| 30|
|VARYING ARRAY|VARCHAR2 |DBMSOUTPUT_LINESARRAY | 32767| 2147483647|
|VARYING ARRAY|VARCHAR2 |DBMS_XS_ROLELIST | 1024| 4096|
|VARYING ARRAY|VARCHAR2 |FLASHBACKTBLIST | 30| 100|
|VARYING ARRAY|VARCHAR2 |HSBLKVALARY | 4000| 250|
|VARYING ARRAY|VARCHAR2 |JDM_ATTR_NAMES | 60| 999|
|VARYING ARRAY|VARCHAR2 |JDM_STR_VALS | 4000| 999|
|VARYING ARRAY|VARCHAR2 |KU$_DROPCOLLIST | 4000| 1000|
|VARYING ARRAY|VARCHAR2 |KUPC$_LOBPIECES | 4000| 4000|
|VARYING ARRAY|VARCHAR2 |ODCIRIDLIST | 5072| 32767|
|VARYING ARRAY|VARCHAR2 |ODCIVARCHAR2LIST | 4000| 32767|
|VARYING ARRAY|VARCHAR2 |RE$NAME_ARRAY | 30| 1024|
|VARYING ARRAY|VARCHAR2 |RE$RULE_LIST | 65| 1024|
|VARYING ARRAY|VARCHAR2 |SQLPROF_ATTR | 500| 2000|
|VARYING ARRAY|VARCHAR2 |TXNAME_ARRAY | 256| 100|
+-------------+--------------+----------------------+------+-----------+
Похоже, что ORA_MINING_NUMBER_NT
и ORA_MINING_VARCHAR2_NT
будут наилучшим образом соответствовать моим потребностям.
Типы индексированных типов PL/SQL
При использовании Oracle 12c и PL/SQL существует также возможность использовать любой из типов DBMS_SQL
, который может быть неактивен с помощью конструктора TABLE(..)
. Есть:
-
DBMS_SQL.CLOB_TABLE
-
DBMS_SQL.BINARY_FLOAT_TABLE
-
DBMS_SQL.BINARY_DOUBLE_TABLE
-
DBMS_SQL.BLOB_TABLE
-
DBMS_SQL.BFILE_TABLE
-
DBMS_SQL.DATE_TABLE
-
DBMS_SQL.NUMBER_TABLE
-
DBMS_SQL.UROWID_TABLE
-
DBMS_SQL.VARCHAR2_TABLE
-
DBMS_SQL.TIME_TABLE
-
DBMS_SQL.TIME_WITH_TIME_ZONE_TABLE
-
DBMS_SQL.TIMESTAMP_TABLE
-
DBMS_SQL.TIMESTAMP_WITH_LTZ_TABLE
-
DBMS_SQL.TIMESTAMP_WITH_TIME_ZONE_TABLE
-
DBMS_SQL.INTERVAL_DAY_TO_SECOND_TABLE
-
DBMS_SQL.INTERVAL_YEAR_TO_MONTH_TABLE