首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Oracle频道
中国IT教育
Google
首页 入门基础 安装配置 体系架构 PLSQL 备份恢复 性能调优 开发技术 资讯动态 考试认证 下载 专题 讨论
您现在的位置: 中国IT实验室 >> Oracle >> PLSQL >> 正文

PL/SQL collection— table() 函数

  Oracle 提供了三种集合:联合数组、嵌套表和 VARRAY 数组,但有的工具或语言并不支持 Oracle 的这种集合处理,所以有时你不得不将集合中的数据插入到真正的表中,然后再使用 SQL 查询出这些数据。对于这样的功能,你可以使用 table() 函数来实现。
 
  table() 函数使你可以将集合封装成一个伪表,然后在 SQL 的 from 后面像一个表似的来查询,就像 from 后面可以跟一个子查询一样。下面用嵌套表举几个例子:
 
1. 创建测试
 
SQL> create table test_yct( id number(2), names tnt_names )
  2  nested table names store as test_yct_names;
 
表已创建。
 
SQL> insert into test_yct values(1, tnt_names('yuechaotian1', 'yuexingtian1', 'jinglitian1'));
 
已创建 1 行。
 
SQL> insert into test_yct values(2, tnt_names('yuechaotian2', 'yuexingtian2', 'jinglitian2'));
 
已创建 1 行。
 
SQL> commit;
 
提交完成。
 
SQL> col names format a60
SQL> select * from test_yct;
 
        ID NAMES
---------- ---------------------------------------------------------
         1 TNT_NAMES('yuechaotian1', 'yuexingtian1', 'jinglitian1')
         2 TNT_NAMES('yuechaotian2', 'yuexingtian2', 'jinglitian2')
 
2. 测试
 
(1)为了将列 test_yct.names 中的数据返回给应用程序,你可以使用 table() 函数:
 
SQL> select y.id, c.* from test_yct y, table(y.names) c;
 
        ID COLUMN_VALUE
---------- --------------------
         1 yuechaotian1
         1 yuexingtian1
         1 jinglitian1
         2 yuechaotian2
         2 yuexingtian2
         2 jinglitian2
 
已选择6行。
 
SQL> select y.id, c.* from test_yct y, table(y.names) c where y.id = 2;
 
        ID COLUMN_VALUE
---------- --------------------
         2 yuechaotian2
         2 yuexingtian2
         2 jinglitian2
 
这个结果集看起来就像是表 test_yct 与集合 table(y.names) 的左外连接一样,而事实确实如此:
 
SQL> insert into test_yct(id) values(3);
 
已创建 1 行。
 
SQL> commit;
 
提交完成。
 
SQL> select y.id, c.* from test_yct y, table(y.names) c;
 
        ID COLUMN_VALUE
---------- --------------------
         1 yuechaotian1
         1 yuexingtian1
         1 jinglitian1
         2 yuechaotian2
         2 yuexingtian2
         2 jinglitian2
 
已选择6行。
 
SQL> select y.id, c.* from test_yct y, table(y.names)(+) c;
 
        ID COLUMN_VALUE
---------- --------------------
         1 yuechaotian1
         1 yuexingtian1
         1 jinglitian1
         2 yuechaotian2
         2 yuexingtian2
         2 jinglitian2
           3
 
已选择7行。
 
 

[1] [2] [3] [4] 下一页

【责编:michael】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 社区讨论
 博客论点