Welcome 微信登录

首页 / 数据库 / MySQL / Oracle的pipelined函数实现高性能大数据处理

在plsql开发中,会涉及到一些大数据量表的数据处理,如将某记录数超亿的表的记录经过处理转换插入到另外一张或几张表。常规的操作方法固然可以实现,但时间、磁盘IO、redo日志等等都非常大。Oracle 提供了一种高级函数,可以将这种数据处理的性能提升到极限。这种函数称为管道函数。在实际项目中,管道函数会和表函数、数据流函数(即表函数和CURSOR结合)、数据集合、并行度一起使用,达到大数据处理的性能顶峰。下面是一个例子,将表t_ss_normal的记录插入到表t_target中,插入过程中有部分转换操作。我分成四个方法来实现这个数据处理操作。第一个方法,也是最常规的方法,代码如下:
  1. create table T_SS_NORMAL   
  2. (   
  3.   owner          VARCHAR2(30),   
  4.   object_name    VARCHAR2(128),   
  5.   subobject_name VARCHAR2(30),   
  6.   object_id      NUMBER,   
  7.   data_object_id NUMBER,   
  8.   object_type    VARCHAR2(19),   
  9.   created        DATE,   
  10.   last_ddl_time  DATE,   
  11.   timestamp      VARCHAR2(19),   
  12.   status         VARCHAR2(7),   
  13.   temporary      VARCHAR2(1),   
  14.   generated      VARCHAR2(1),   
  15.   secondary      VARCHAR2(1)   
  16. );   
  17. /   
  18.   
  19. create table T_TARGET   
  20. (   
  21.   owner       VARCHAR2(30),   
  22.   object_name VARCHAR2(128),   
  23.   comm        VARCHAR2(10)   
  24. );  
这是源表和目标表的表结构。现在源表有200W条,其数据来自dba_objects视图。
  1. create or replace package pkg_test is  
  2.   procedure load_target_normal;   
  3. end pkg_test;   
  4.   
  5. create or replace package body pkg_test is  
  6.   procedure load_target_normal is  
  7.   begin     
  8.     insert into t_target (owner, object_name, comm)   
  9.       select owner, object_name, "xxx" from t_ss_normal;     
  10.     commit;     
  11.   end;   
  12. begin  
  13.   null;   
  14. end pkg_test;
一个insert into select语句搞定这个数据处理,简单。
  • 1
  • 2
  • 3
  • 下一页
关于Oracle执行计划如何授权查询v$视图相关资讯      Oracle基础知识 
  • 查看Oracle 32位还是64位(x86 or   (10/05/2014 19:10:00)
  • Oracle中表的建立与修改-五种约束  (02/07/2013 09:49:18)
  • Oracle select 语句字段连接  (12/17/2012 14:51:53)
  • Oracle online redo log 基础知识  (02/09/2013 09:43:04)
  • 如何查看Oracle数据库的session阻  (01/01/2013 09:11:15)
  • Oracle Redo Log 及Logmnr配置使用  (12/14/2012 19:36:51)
本文评论 查看全部评论 (2)
表情: 姓名: 字数


评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款