sql - Oracle 中的匿名 TABLE 或 VARRAY 类型

标签 sql arrays oracle anonymous-types

在 Oracle 中,我有时想创建诸如此类的结构

SELECT * FROM TABLE(STRINGS('a', 'b', 'c'))
SELECT * FROM TABLE(NUMBERS(1, 2, 3))

显然,我可以为上述声明我自己的类型。我可以选择TABLEVARRAY .例如:
CREATE TYPE STRINGS AS TABLE OF VARCHAR2(100);
CREATE TYPE NUMBERS AS VARRAY(100) OF NUMBER(10);

在这种特殊情况下,另一种解决方案是编写类似
SELECT 'a' FROM DUAL UNION ALL
SELECT 'b' FROM DUAL UNION ALL
SELECT 'c' FROM DUAL

但我可能有更复杂的例子,我真的需要 TABLE/VARRAY类型。那么,如果我的 SQL 运行在一个未知系统上,因为我可能没有必要的授权而无法创建类型,该怎么办?

所以我的问题是: Oracle 知道“匿名”TABLE/VARRAY在任何 Oracle 实例上可用的类型?类似于 Postgres/H2/HSQLDB 的简单 ARRAY类型?

更新 :如果相关的话,我主要从 Java 运行这个 SQL。无需向我解释 PL/SQL,我实际上只是在寻找匿名 SQL 数组类型(即“匿名”独立存储类型)。如果它们根本不存在,答案是否定的

最佳答案

如果您不害怕明确引用 SYS 模式,那么有一些。以下是我经常使用的一些(好吧 odcivarchar2list 不多,因为它会占用大量内存:对于字符串,我更喜欢 dbms_debug_vc2coll )。

SQL> desc sys.odcinumberlist
 sys.odcinumberlist VARRAY(32767) OF NUMBER

SQL> desc sys.odcivarchar2list
 sys.odcivarchar2list VARRAY(32767) OF VARCHAR2(4000)

SQL> desc sys.ODCIDATELIST
 sys.ODCIDATELIST VARRAY(32767) OF DATE

SQL> desc sys.dbms_debug_vc2coll
 sys.dbms_debug_vc2coll TABLE OF VARCHAR2(1000)

SQL> 

但是,如果这些不足以满足您的需求,请运行此查询以查找更多信息:
select type_name
       , owner
from all_types
where typecode = 'COLLECTION'
and owner != user
/

当然,这个结果会因数据库而异。例如,我数据库上的很多集合都归 XDB 所有,并不是每个系统都会安装它。我在这个答案顶部列出的四个应该在自 9iR2 (可能是早期)以来的每个数据库中都可用,尽管它们并不总是在早期版本中记录。

"Note that ALL_COLL_TYPES seems to be an even better dictionary view to find appropriate types"



那是个很好的观点。我们还可以过滤 COLL_TYPE 以筛选出 VARRAY。该 View 被引入 10g,而 ALL_TYPES 在 9i 中可用。与 Oracle 的大多数东西一样,版本越晚,它的功能就越多。

关于sql - Oracle 中的匿名 TABLE 或 VARRAY 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8785459/

相关文章:

sql - 使用 LEFT JOIN 只选择一个连接行

sql - 使用CTE相互计算多列

arrays - VBA 数组导出到工作表

php - 使用 PHP MySQL 创建嵌套的 JSON

c# - ODAC 12c 第 2 版 (12.1.0.1.2) Xcopy 与 Oracle 11g R2 数据库的兼容性

sql - 如何在 Oracle 10g 中解析相邻列表?

java - 如何在 java 中使用 PreparedStatement 在 mySql 数据库中插入日期时间字段?

python - 用python解压二进制数据

.net - 如何修复类型 'Method ' 中的 'Oracle.EntityFrameworkCore does not have an implementation.' get_Info'

oracle - jboss 7 oracle数据源配置