【Oracle】在PL/SQL中使用sql实现选择排序
【Oracle】在PL/SQL中使用sql实现选择排序
一般来说,SQL要排序的话直接使用order by即可
不一般来说,就是瞎搞,正好也可以巩固自己的数据结构基础
使用SQL实现排序系列:
使用SQL实现冒泡排序
以下是正文:
规范:
create or replace package data_structure_pkg is
procedure xuanze_get_data(p_data varchar2);
end data_structure_pkg;
体:
create or replace package body data_structure_pkg is
--------------------以下为排序部分----------------------
--定义一个存储数据的临时表
type numtable1 is table of long index by binary_integer;
---------------------------------
--选择排序主方法
procedure xuanze_get_data(p_data varchar2) is
v_data numtable1;
n number := 1;
p_num number;
p_min number;
begin
--以;作为分隔符,将数字进行分离
for sub_data in (select tt.data as sdata
from (select regexp_substr(p_data, '[^;]+', 1, level) data
from dual 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 1 .. v_data.count loop
p_min := i;
--依次提取i次下标位数字
for j in (i + 1) .. v_data.count loop
if to_number(v_data(j)) < to_number(v_data(p_min)) then
--记录目前能找到的最小值元素的下标
p_min := j;
end if;
end loop;
--将找到的最小值和i位置所在的值进行交换
if i != p_min then
p_num := to_number(v_data(i));
v_data(i) := v_data(p_min);
v_data(p_min) := p_num;
end if;
end loop;
--打印出来排序以后的数据
for z in 1 .. v_data.count loop
dbms_output.put_line('排序后第' || z || '位:' || v_data(z) || '|');
end loop;
end xuanze_get_data;
end data_structure_pkg;
输入数据
2;34;1;5;9;8;6;13;25;24;56
得到结果

【Oracle】在PL/SQL中使用sql实现选择排序的更多相关文章
- sql 中实现打乱数据的排序
sql 中实现打乱数据的排序 order by NEWID()就实现了数据的打乱
- SQL中迁移sql用户及密码脚本
SQL中迁移sql用户及密码脚本 编写人:CC阿爸 2014-6-20 在日常SQL数据库的操作中,常常需要迁移数据库或重装服务器,这时候,一些之前建立的login账户,必须重新建立,以下可以通过 ...
- ORACLE PL/SQL 实例精解之第三章 PL/SQL中的SQL
3.1 在PL/SQL中使用DML 在PL/SQL语块中,两种变量赋值a. := 初始化.b. select into语法,PL/SQL语块的声明部分被声明的变量,后期可以使用选择语句进行赋值. 3. ...
- oracle PL/SQL(procedure language/SQL)程序设计(在PL/SQL中使用SQL)
在PL/SQL程序中,允许使用的SQL语句只有DML和事务控制语句,使用DDL语句是非法的.使用SELECT语句从数据库中选取数据时,只能返回一行数据.使用COMMIT, ROLLBACK, 和SA ...
- mybatis动态sql中的sql标签——抽取可重用的sql片段
1.用<sql>标签抽取可重用的sql片段 <!-- 抽取可重用的SQL片段,方便后面引用 1.sql抽取,经常将要查询的列名,或者插入用的列名,之后方便引用 ...
- C语言链表中数组实现数据选择排序,升序、降序功能主要难点
链表排序讲解: head指针指向链表的头结点,是找到整个链表的唯一依据,如果head指针丢失,整个链表就找不到了. head存储的是第一个节点的地址,head->next存储的是第二个节点的地址 ...
- mybatis动态SQL中的sql片段
在mybatis中通过使用SQL片段可以提高代码的重用性,如下情景: 1.创建动态SQL <sql id="sql_count">select count(*)< ...
- SQL中几个常用的排序函数
最近使用窗口函数的频率越来越高,这里打算简单介绍一下几个排序的函数,做一个引子希望以后这方面的问题能够更深入的理解,这里先简单介绍一下几个简单的排序函数及其相关子句,这里先从什么是排序开始吧 ...
- php中的冒泡排序和选择排序d
//冒泡算法 //定义一个数组 $arr=arr{2,5,1155,3,8}; $len=count($arr); for($i=0;$i<$len-1;$i++) //定义以下需要宣传的次数 ...
- Java中的冒泡排序和选择排序
//冒泡排序 public class Test5 { public static void main(String[] args) { int[] arr = {12,2,25,89,5}; bub ...
随机推荐
- [VueJsDev] 日志 - 更新日志
[VueJsDev] 目录列表 https://www.cnblogs.com/pengchenggang/p/17037320.html 更新日志 ::: details 目录 目录 更新日志 Lo ...
- mockjs 前端写完 给后台调 mock.js | 改到2.0版本
需求:最近活太忙了,实在是联调没有时间了,无奈又拾起来mockjs 1 安装mockjs npm install mockjs // 这是个只在开发的时候用,打包后就没有了,业务更安全 npm ins ...
- Android使用poi遇到的问题
原文:Android使用poi遇到的问题 关于Poi使用可以看这一篇[开源库推荐]#4 Poi-办公文档处理库 本篇主要讲些在Android上使用出现的问题 问题 原本是需要一个导出xlsx表格文件的 ...
- Java/Kotlin Double保留小数点后几位
下面以保留2位小数,且按照四舍五入规则的例子 方法 1.BigDecimal.setScale() 此方法得到的还是个double数值 double one = 5.864; BigDecimal t ...
- Feign调用远程服务时传递Cookie信息
@Configuration public class TtpfFeignConfig { @Bean public RequestInterceptor requestInterceptor(){/ ...
- 2024-03-16:用go语言,给你一个正整数数组 nums, 每一次操作中,你可以从 nums 中选择 任意 一个数并将它减小到 恰好 一半。 (注意,在后续操作中你可以对减半过的数继续执行操作)
2024-03-16:用go语言,给你一个正整数数组 nums, 每一次操作中,你可以从 nums 中选择 任意 一个数并将它减小到 恰好 一半. (注意,在后续操作中你可以对减半过的数继续执行操作) ...
- Linux输入输出
1.重定向概述 1.什么是重定向 将原本要输出到屏幕的数据信息,重新定向到某个指定的文件中.比如:每天凌晨定时备份数据,希望将备份数据的结果保存到某个文件中. 这样第二天通过查看文件的内容就知道昨天备 ...
- 记录--前端无感知刷新token & 超时自动退出
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前端无感知刷新token&超时自动退出 一.token的作用 因为http请求是无状态的,是一次性的,请求之间没有任何关系,服务端 ...
- 记录-VUE中常用的4种高级方法
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1. provide/inject provide/inject 是 Vue.js 中用于跨组件传递数据的一种高级技术,它可以将数据注入到 ...
- 记录--5个知识点,让 Vue3 开发更加丝滑
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 最近鼓捣了一下 Vue3 + Vite2,遇到了不少问题,整理了5个可以提高开发效率的小知识,让你在 Vue3 的项目开发中更加丝滑 ...