【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
得到结果:
您能读到这儿,我呢是发自真心的感谢您,若要转载,还望请您带上链接