gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 12:33:40 25 4
gpt4 key购买 nike

在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com