【Oracle】在PL/SQL中使用sql实现插入排序
【Oracle】在PL/SQL中使用sql实现插入排序
一般来说,SQL要排序的话直接使用order by即可
不一般来说,就是瞎搞,正好也可以巩固自己的数据结构基础,主要也发现没有人用SQL去实现这些算法(小声bb)
使用SQL实现排序系列:
使用SQL实现冒泡排序
使用SQL实现选择排序
以下是正文:
规范:
create or replace package data_structure_pkg is
procedure charu_get_data(p_data varchar2);
end data_structure_pkg;
体:
create or replace package body data_structure_pkg is
--------------------以下为排序部分----------------------
--定义一个存储数据的临时表
type numtable2 is table of long index by binary_integer;
---------------------------------
--插入排序主方法
procedure charu_get_data(p_data varchar2) is
v_data numtable2;
n number := 1;
j number;
p_tmp varchar2(50);
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 2 .. v_data.count loop
--记录要插入的数据
p_tmp := v_data(i);
--从已排序头开始
j := i;
--从已经排序的序列的开始比较
--需要注意,在java或者c中,下标的开头是0
--但是在数据库表中,是1开头的,如果沿用java的数组从0开始则会导致not data found错误
while j > 1 and p_tmp < nvl(v_data(j - 1),v_data(1)) loop
v_data(j) := v_data(j - 1);
j := j - 1;
end loop;
--如果找到比其小的数,替换
if j != i then
v_data(j) := p_tmp;
end if;
end loop;
--打印出来排序以后的数据
for z in 1 .. v_data.count loop
dbms_output.put_line('排序后第' || z || '位:' || v_data(z) || '|');
end loop;
end charu_get_data;
end data_structure_pkg;
输入数据
2;3;1;4;6;5;8;7
得到结果

【Oracle】在PL/SQL中使用sql实现插入排序的更多相关文章
- 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抽取,经常将要查询的列名,或者插入用的列名,之后方便引用 ...
- mybatis动态SQL中的sql片段
在mybatis中通过使用SQL片段可以提高代码的重用性,如下情景: 1.创建动态SQL <sql id="sql_count">select count(*)< ...
- 在PL/SQL中调用Oracle存储过程
存储过程 1 什么是存储过程? 用于在数据库中完成特定的操作或者任务.是一个PLSQL程序块,可以永久的保存在数据库中以供其他程序调用. 2 存储过程的参数模式 存储过程的参数特性: IN类型的参数 ...
- 在PL/SQL中调用存储过程--oracle
在oracle10中写好了存储过程,代码如下: CREATE OR REPLACE Procedure Proc_Insert ( sName in varchar2, sAge in int, sE ...
- ORACLE PL/SQL 中序列(sequence)的简易使用方法介绍
如果我是C罗 原文 ORACLE PL/SQL 中序列(sequence)的简易使用方法介绍 sequence在ORACLE中应用十分广泛,就是序列号的意思,会自动增加指定变数,如逐次增加1或者2或者 ...
- 【Oracle】PL/SQL Developer使用技巧(持续更新中)
1.关键字自动大写 在sql命令窗口中输入SQL语句时,想要关键字自动大写,引人注目该怎么办呢? 一步设置就可以达成了.点击Tools->Preference->Editor,看到截图中这 ...
- Oracle之PL/SQL学习笔记
自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家 ...
随机推荐
- Linux 服务器Python后台运行服务(ssh断开不退出)
壹: 最近用python搭建一个物联网数据存储的微服务,部署到ubuntu上去,所以,python后台运行是一个必不可少的环节. 贰: 这个只需要是一个命令即可: 命令1(记录所有日志): nohup ...
- Python isinstance() 函数含义及用法解析
描述 isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type(). isinstance() 与 type() 区别: type() 不会认为子类是一种父类类型,不考虑继承关 ...
- mysql迁移到pqsql笔记
在将MySQL迁移到PostgreSQL的过程中,遇到了一些问题,下面是一些简单的解决方案. 使用命令,初始化数据库,并设置postgres的密码 bin\initdb -E UTF-8 -A md5 ...
- 记录--用js如何实现将手机号中间的几位数字变成****
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 今天,我们要实现一个很常见并且简单的功能:将手机号中间的几位数变成**** 这个功能其实很常见,比如我们微信的账号安全里面显示的手机号.掘 ...
- 记录:Openlayers6.5 实现轨迹回放
这篇分享我记录到的一个案例,废话不多说,上代码 import Feature from 'ol/Feature' import LineString from 'ol/geom/LineString' ...
- 替换Spring容器中已经存在的Bean
一.背景 我们在开发的过程中,经常会引入别人写的jar包实现某些功能.而别人的jar包一般都自动注入Spring容器中,假设别人都是通过@Bean或@Component注入的,并且没有加入@Condi ...
- ZYNQ7000系列学习
ZYNQ7000-系列知识学习 一.ZYNQ7000简介 ZYNQ7000是xilinx推出的具有ARM内核的FPGA芯片,可用于常见SOC开发.基于此,通过学习ZYNQ7000的各种设置和开发,可以 ...
- KingbaseES V8R6集群运维案例之---repmgrd进程启动无法访问共享内存
案例说明: KingbaseES V8R6集群在启动repmgrd进程时,出现'unable to write to shared memory'故障,导致repmgrd进程启动终止. 适用版本: K ...
- GraphPro
GraphPro: Graph Pre-training and Prompt Learning for Recommendation 北京B区 / 032机 北京B区 / 224机 数据集介绍 本文 ...
- 数据库锁起来了,把事务清掉sql
select concat('kill ',id,';') from information_schema.`PROCESSLIST` where state !='executing' 将上述代码执 ...