【Oracle】使用PL/SQL实现冒泡排序

发布时间 2023-06-29 11:02:25作者: DbWong_0918

【Oracle】使用PL/SQL实现冒泡排序

一般来说,SQL要排序的话直接使用order by即可

不一般来说,就是瞎搞,正好也可以巩固自己的数据结构基础

存储包内容如下

规范:

create or replace package data_structure_pkg is

  PROCEDURE get_data(p_data varchar2);

end data_structure_pkg;

体:

create or replace package body data_structure_pkg is
  --------------------以下为冒泡排序部分----------------------
  --定义一个存储数据的临时表
  TYPE numtable IS TABLE OF LONG INDEX BY BINARY_INTEGER;
  --主方法
  PROCEDURE get_data(p_data varchar2) IS
    v_data numtable;
    n      number := 1;
    p_num  number;
  begin
    --以;作为分隔符,将数字进行分离
    FOR sub_data IN (select tt.data as sdata
                       from (select regexp_substr(p_data, '[^;]+', 1, level) data
                               from cpcbomd bd
                             connect by level <=
                                        regexp_count(p_data, ';') + 1) tt
                      where rownum <= regexp_count(p_data, ';') + 1) LOOP
      --放入临时表                
      v_data(n) := sub_data.sdata;
      --打印出来原顺序的数据
      dbms_output.put_line('排序前第' || n || '位:' || v_data(n) || '|');
      --递增
      n := n + 1;
    end loop;
    dbms_output.put_line('-------------------------------------');
    --排序
    for i in reverse 1 .. v_data.count loop
      --依次提取i次下标位数字
      for j in reverse (i + 1) .. v_data.count loop
        --比较
        if v_data(i) > v_data(j) then
          p_num := to_number(v_data(i));
          v_data(i) := v_data(j);
          v_data(j) := p_num;
        end if;
      end loop;
    end loop;
    --打印出来排序以后的数据
    for i in 1 .. v_data.count loop
      dbms_output.put_line('排序后第' || i || '位:' || v_data(i) || '|');
    end loop;
  
  end get_data;

end data_structure_pkg;

输入字符串
2;1;3;4;6;5;7;8;9

得到结果:
image