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

【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 tablet 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

posted @ 2023-06-29 10:57  DbWong_0918  阅读(86)  评论(0编辑  收藏  举报