SQL开发知识:Oracle中匿名TABLE/VARRAY类型详解
前言
本文主要介绍的是关于sql Oracle匿名TABLE/VARRAY类型的相关内容,在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数组类型(即“匿名”独立存储类型).如果根本不存在,答案是否定的
最佳答案
提供你不要害怕明确引用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.该视图被引入10g,而ALL_TYPES在9i上可用.和大部分的Oracle一样,版本越晚,它的功能就越多.
前言
本文主要介绍的是关于sql Oracle匿名TABLE/VARRAY类型的相关内容,在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数组类型(即“匿名”独立存储类型).如果根本不存在,答案是否定的
最佳答案
提供你不要害怕明确引用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.该视图被引入10g,而ALL_TYPES在9i上可用.和大部分的Oracle一样,版本越晚,它的功能就越多.
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 SQL开发知识:Oracle中匿名TABLE/VARRAY类型详解
相关文章
- 分析掌控Oracle多维数据洞察力:分析应用的全新突破!(oracle多维数据)
- 及其应用Oracle触发器:类型分析及应用实现(oracle触发器类型)
- 精通Oracle触发器:不同类型的应用(oracle触发器类型)
- ORACLE高手分享:拼SQL技巧大揭秘(oracle拼sql)
- 深入解析Oracle语句:精准掌握SQL开发技能(oracle语句详解)
- Oracle加日期造就新的可能(oracle加日期)
- 优化Oracle数据库共享模式设置的技巧(oracle共享模式设置)
- nodejs连接Oracle数据库,开发更便捷(node连oracle)
- 探索64位Oracle数据库的新特性(64位oracle数据库)
- Oracle数据库如何添加新字段到表中(oracle为表加字段)
- Oracle数据库性能优化框架简介(oracle优化框架)
- 借助Oracle技术提升企业开发水平(oracle企业开发)
- 器Oracle中SQL运行机制取得成功(oracle中sql运行)
- Oracle中SQL参数优化实践经验(oracle中sql参数)
- 利用Oracle SQL实现双表全关联查询(oracle两表全关联)
- 查询快速精准查询Oracle SQL语句(oracle sql快捷)
- 了解Oracle G1427,助力开发提升效率(oracle g1427)