oracle 归并

DECLARE
   TYPE num_tt IS TABLE OF INT;
   num_t1 num_tt:=num_tt();
   num_t2 num_tt:=num_tt();
   num_t3 num_tt:=num_tt();
   i_1 INT := 1;
   j_1 INT := 1;
   d_1 INT := 1;
   PROCEDURE quick_sort(arr_t IN OUT num_tt, i IN INT, j IN INT)
   AS
      tmp_i INT := i;
      tmp_j INT := j;
      fir_num INT ;
   BEGIN
      IF(i < j) THEN
       fir_num := arr_t(tmp_i);
       WHILE(tmp_i < tmp_j) LOOP
          WHILE(tmp_i < tmp_j AND fir_num < arr_t(tmp_j)) LOOP
             tmp_j := tmp_j - 1;
          END LOOP;
          arr_t(tmp_i):=arr_t(tmp_j);
          WHILE(tmp_i < tmp_j AND fir_num > arr_t(tmp_i)) LOOP
              tmp_i := tmp_i + 1;
          END LOOP;
          arr_t(tmp_j):=arr_t(tmp_i);
       END LOOP;
       arr_t(tmp_i) := fir_num;
       quick_sort(arr_t, i,tmp_i-1);
       quick_sort(arr_t, tmp_i+1, j);
     END IF;
   END quick_sort;
BEGIN
   num_t1.extend(20);
   num_t2.extend(20);
   num_t3.extend(num_t1.count+num_t2.count);
   FOR i IN 1..20 LOOP
     num_t1(i) := trunc(dbms_random.value(200,100000));
   END LOOP;
   dbms_output.put_line(‘num_t1:‘);
   quick_sort(num_t1, 1, num_t1.count);
   FOR i IN 1..num_t1.count LOOP
     dbms_output.put_line(num_t1(i)||‘,‘);
   END LOOP;
   FOR i IN 1..20 LOOP
     num_t2(i) := trunc(dbms_random.value(200,100000));
   END LOOP;
   dbms_output.put_line(‘num_t2:‘);
   quick_sort(num_t2, 1, num_t2.count);
   FOR i IN 1..num_t2.count LOOP
     dbms_output.put_line(num_t2(i)||‘,‘);
   END LOOP;
   WHILE(i_1 <= num_t1.count AND j_1 <= num_t2.count) LOOP
     IF(num_t1(i_1) > num_t2(j_1)) THEN
        num_t3(d_1) := num_t2(j_1);
        j_1 := j_1 + 1;
     ELSE
        num_t3(d_1) := num_t1(i_1);
        i_1 := i_1 + 1;
     END IF;
     d_1 := d_1 + 1;
   END LOOP;
   IF(i_1<=num_t1.count) THEN
     FOR i IN i_1..num_t1.count LOOP
       num_t3(d_1) := num_t1(i);
       d_1 := d_1+1;
     END LOOP;
   ELSE
      FOR i IN j_1..num_t2.count LOOP
        num_t3(d_1) := num_t2(i);
        d_1 := d_1+1;
      END LOOP;
   END IF;
   dbms_output.put_line(‘num_t3:‘); 
    FOR i IN 1..num_t3.count LOOP
     dbms_output.put_line(num_t3(i)||‘,‘);
   END LOOP;   
END;

时间: 2024-08-10 15:57:25

oracle 归并的相关文章

Oracle Table连接方式分析

Oracle Table连接方式分析 表连接基本知识: 1.哪张表将驱动查询(即访问的第一张表)?按照指定的路径查询,何时将访问到没一张表?可选的驱动路径有哪些? 2.可能出现哪些Oracle连接?记住:在Oracle中,连接顺序.可选的索引.用于排序和建立散列表的可用内存的不同都会导致不同的结果. 3.哪些索引是可用的?哪些索引是可选的?索引的选择不仅仅将导致优化器使用或者限制一个索引,还将改变驱动查询的方式,并可能决定使用或者限制查询中其他的索引. 4.哪些提示提供了可选的路径?哪些提示限制

cmds系统归并缓慢的处理过程 2017-2-16

检查反应较慢的时间段,数据库整体运行情况,从awr报告总看看是否有异常 以上是两个节点的等待事件排行,其中发现cursor: pin S wait on X等待事件类型是并行,切较高,开始分析的时候先留意一下,接着向下看   在其他的sql方面,比如逻辑读,物理读等方面基本上算是正常的,平时也都可以看到类似的存储过程和sql,但是在CPU time栏位,明显有异常的SQL存在.具体的sql文本为: SELECT /* OPT_DYN_SAMP */ /*+ ALL_ROWS IGNORE_WHE

oracle表连接

oracle表连接又被问到了,感觉细节了解还是远远不够啊,从网上找资料学习之.转载的. 在查看sql执行计划时,我们会发现表的连接方式有多种,本文对表的连接方式进行介绍以便更好看懂执行计划和理解sql执行原理. 一.连接方式:         嵌套循环(Nested  Loops (NL))       (散列)哈希连接(Hash Join (HJ))     (归并)排序合并连接(Sort Merge Join (SMJ) ) 二.连接说明:     1.Oracle一次只能连接两个表.不管查

[Oracle] Merge语句

Merge的语法如下: MERGE [hint] INTO [schema .] table [t_alias] USING [schema .] { table | view | subquery } [t_alias] ON ( condition ) WHEN MATCHED THEN merge_update_clause WHEN NOT MATCHED THEN merge_insert_clause; MERGE是什么,如何使用呢?让我们先看一个简单的需求: 需求是,从T1表更新数

深入理解Oracle表(3):三大表连接方式详解之Nested loop join和 Sort merge join

深入理解Oracle表(3):三大表连接方式详解之Nested loop join和 Sort merge join 分类: Oracle 基础管理 Oracle SQL 开发2013-01-28 00:33 2536人阅读 评论(1) 收藏 举报 关系数据库技术的精髓就是通过关系表进行规范化的数据存储       并通过各种表连接技术和各种类型的索引技术来进行信息的检索和处理       这里Think愿意和大家一起来学习分享Oracle的三大表连接技术              在早期版本,

柯南君 :Oracle 分区技术 之 如何支撑大数据操作?

前段时间,看了罗女士( 资深技术顾问 - Oracle 中国 顾问咨询部)关于<大批量数据处理技术的演讲>视频,感觉受益良多,结合多年的知识积累,柯南君给大家分享一下: 交流内容: 一.Oracle的分区技术 (一)分区技术内容 1. 什么是分区? 分区就是将一个非常大的table或者index 按照某一列的值,分解为更小的,易于管理的逻辑片段---分区.将表或者索引分区不会影响SQL语句以及DML(见备注)语句,就和使用非分区表一样,每个分区拥有自己的segment(见备注),因为,DDL(

oracle多表连接方式Hash Join Nested Loop Join Merge Join

在查看sql执行计划时,我们会发现表的连接方式有多种,本文对表的连接方式进行介绍以便更好看懂执行计划和理解sql执行原理. 一.连接方式:        嵌套循环(Nested  Loops (NL))      (散列)哈希连接(Hash Join (HJ))    (归并)排序合并连接(Sort Merge Join (SMJ) ) 二.连接说明:    1.Oracle一次只能连接两个表.不管查询中有多少个表,Oracle 在连接中一次仅能操作两张表.    2.当执行多个表的连接时,优化

oracle安装故障:完美解决xhost +报错: unable to open display “”

oracle安装 先切换到root用户,执行xhost + 然后再切换到oracle用户,执行export DISPLAY=:0.0 出现乱码执行export LANG=US_en 在这里给大家介绍下两种情况的常见问题: 一种是本地运行的命令,另一种则是远程ssh命令安装. DISPLAY科普 DISPLAY变量是用来设置将图形显示到何处.比如CENTOS,你用图形界面登录进去,DISPLAY自动设置为DISPLAY=:0.0表示显式到本地监视器,那么通过终端工具(例如:xshell)进去,运行

Sqlserver通过链接服务器访问Oracle的解决办法

转自http://blog.sina.com.cn/s/blog_614b6f210100t80r.html 一.创建sqlserver链接服务(sqlserver链接oracle)  首先sqlserver 链接oracle可以通过两个访问接口: “MSDAORA” 和“OraOLEDB.Oracle” 1.“MSDAORA”访问接口是由Microsoft OLE DB Provider for Oracle提供的,这里建议不使用此接口进行链接.通过该访问接口建立的链接服务器在进行查询orac