达梦数据库,Oracle 11g、12c集合类型下使用table()操作符对比测试

table()可以算作一个用户自定义的PL/SQL函数,经常可以看到它与管道函数(pipeline function)搭配使用,具体何为管道函数,请自行查询相关文档。

它的作用就是将函数返回的集合类型(嵌套表nested table或者数组varray)转换成物理表,方便我们查询它。

举个例子O记的执行计划查询,也是使用这个函数,ex:select * from table(dbms_xplan.display())
本文在Oracle11g、Oracle12c及DM7环境下,多种集合类型中使用table()做对比测试,测试用例及结果如下。

  1. object类型测试table():
    Oracle11g,Oracle12c,DM7均通过测试。
    达梦数据库,Oracle 11g、12c集合类型下使用table()操作符对比测试

  2. record类型测试table(),使用关联数组:
    DM7报"无效的数组查询对象",Oracle11g报"循环索引变量 ‘REC2’ 的使用无效",Oracle12c通过测试,正常运行出结果。
    达梦数据库,Oracle 11g、12c集合类型下使用table()操作符对比测试

  3. record类型测试table(),使用嵌套表类型:
    DM7正常执行出结果,Oracle11g报"在SQL 语句中不允许使用本地收集类型",Oracle12c通过测试,正常运行出结果。
    达梦数据库,Oracle 11g、12c集合类型下使用table()操作符对比测试

  4. record类型测试table(),使用数组varray类型:
    DM7正常执行出结果,Oracle11g报"在SQL 语句中不允许使用本地收集类型",Oracle12c通过测试,正常运行出结果。
    达梦数据库,Oracle 11g、12c集合类型下使用table()操作符对比测试

DM7在各种情况对比Oracle11g、Oracle12c的处理结果让笔者还挺意外,相信后续达梦数据库会更加努力,跟上潮流,在功能性上面找到不足,尽快跟上。