分类 PL/SQL 中的文章

12c返回指定行数

如果对返回结果进行行数的过滤时,通常都是通过order by + rownum <的方式,对于返回中间行数的情况就需要通过嵌套分页的写法,而在其他类型的数据库比如Mysql中可以比较方便的直接通过limit的方式 SELECT * FROM t1 ORDER BY 1 LIMIT 0, 10; row limiting概念 从12c开始,oracle对这方面的功能大大的增强,引入了Row_limiting_clause语句格式,允许查询sql……

阅读全文

通过DBMS_REDEFINITION更新大表

更新大表的时候通常伴随着大量的redo和undo产生,消耗了不少的资源。同时如果这个字段较长的话,也会产生许多行迁移,因为肯定会有某些块无法容纳下更新后的行的大小。 通常考虑通过DDL的方式来替代对这些大表的更新DML操作,第一时间想到的可能就是CTAS,最后rename回去的方式。但是这会带来一些其他的问题,比如表的其他属性并不会复制到新表当中,其他的约束和……

阅读全文

通过DBMS_PARALLEL_EXECUTE更新大表

DBMS_PARALLEL_EXECUTE包可以将一个任务拆分成很多小块,然后通过并发的方式共同完成任务,从而提高效率。 当你在执行超大表的更新操作时,这个技术都能起到作用: 它在同一时间内只会锁住一小部分的数据集,而不是锁住全表 在整个任务完成之前如果碰见部分更新失败,则其他已完成的任务不受影响 减少了回滚段的消耗 提高了效率 注意DBMS_PARALLEL_EXEC……

阅读全文

Pipelined Table Functions

TABLE函数 table function是一个用户自定义的PL/SQL函数,它能返回一个结果集(关联数组、嵌套表),你能像查询普通表一样查询它,通过SELECT语句里的TABLE表达式 SELECT * FROM TABLE(table_function_name(parameter_list)) table函数能将行的集合作为入参,也就是说它的入参可以是嵌套表、数组或者游标等,因此table函数tf1的结果集可以作为tf2的入参,同理函数tf2的结果集也可以作为tf3的……

阅读全文