边儿上的小人您要嫌碍事儿,可将鼠标放在上头,边上底下有个叉,点一下就收起来了

【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 @   DbWong_0918  阅读(153)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示