table()可以算作一个用户自定义的PL/SQL函数,经常可以看到它与管道函数(pipeline function)搭配使用,具体何为管道函数,请自行查询相关文档。
它的作用就是将函数返回的集合类型(嵌套表nested table或者数组varray)转换成物理表,方便我们查询它。
举个例子O记的执行计划查询,也是使用这个函数,ex:select * from table(dbms_xplan.display())
本文在Oracle11g、Oracle12c及DM7环境下,多种集合类型中使用table()做对比测试,测试用例及结果如下。
-
object类型测试table():
Oracle11g,Oracle12c,DM7均通过测试。
-
record类型测试table(),使用关联数组:
DM7报"无效的数组查询对象",Oracle11g报"循环索引变量 ‘REC2’ 的使用无效",Oracle12c通过测试,正常运行出结果。
-
record类型测试table(),使用嵌套表类型:
DM7正常执行出结果,Oracle11g报"在SQL 语句中不允许使用本地收集类型",Oracle12c通过测试,正常运行出结果。
-
record类型测试table(),使用数组varray类型:
DM7正常执行出结果,Oracle11g报"在SQL 语句中不允许使用本地收集类型",Oracle12c通过测试,正常运行出结果。
DM7在各种情况对比Oracle11g、Oracle12c的处理结果让笔者还挺意外,相信后续达梦数据库会更加努力,跟上潮流,在功能性上面找到不足,尽快跟上。