【发布时间】:2012-01-09 08:12:02
【问题描述】:
在 Oracle 中,我有时想创建诸如此类的结构
SELECT * FROM TABLE(STRINGS('a', 'b', 'c'))
SELECT * FROM TABLE(NUMBERS(1, 2, 3))
显然,我可以为上述声明我自己的类型。我可以在TABLE 和VARRAY 之间进行选择。例如:
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 是否知道任何 Oracle 实例上都可用的“匿名”TABLE / VARRAY 类型?类似于 Postgres / H2 / HSQLDB 的简单ARRAY 类型?
更新:我主要从 Java 运行这个 SQL,如果这相关的话。无需向我解释 PL/SQL,我实际上只是在寻找匿名 SQL 数组类型(即“匿名”独立存储类型)。如果它们根本不存在,答案是 NO
【问题讨论】:
-
你考虑过使用PLSQL吗?
-
@Rene: "我的 SQL 运行在一个无法创建类型的未知系统上",所以我不能使用 PL/SQL,因为我可能无法创建必要的类型/函数...除非您指的是匿名 PL/SQL 块?那么,你一般会如何解决这个问题呢?
标签: sql arrays oracle anonymous-types