【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多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家 ...
随机推荐
- xp 下对 pdfjs-dist 库的支持 49的chrome xp壳
公司下壳的版本非常低,不支持es6 chromium Version = 49.0.2623.87 早先是 require('pdfjs-dist'),但是这里面都是es6的代码,xp下直接就崩溃了, ...
- 摆脱鼠标系列 - vscode 单词自动翻译 快捷键 Alt + Z
为什么 摆脱鼠标系列 - vscode 单词自动翻译 快捷键 Alt + Z 单词函数 省得每次都查字典了 插件名称 translate speaker 翻译朗读者API 截图
- gcc makefile 模板
一 基本概况 在做基本的c代码测试的时候,经常会遇到gcc做编译,作为一个工程师,不存点模板,每次都是自己写的话,那不是非常的浪费体力,程序员本来就累了.在这上面浪费不少时间,吃力不讨好啊. 保存一些 ...
- 在后台运行 django的基本方法
在后台运行 django: nohup python manage.py runserver 0.0.0.0:9000 &ps:&可以不写,这样启动测试服务器后,就可以常驻后台运行了. ...
- Windows 2012 R2 修复CredSSP 远程执行代码漏洞 CVE-2018-0886
本文基于window 2012 R2版本,各位参考下载自己版本对应的补丁包即可 说明 公司的安全性检查,需要修复服务器上的漏洞,其中有个漏洞是CVE-2018-0886,结果网上的资料和一番折腾,终于 ...
- java线程池知识整理
参考,欢迎点击原文:https://www.jianshu.com/p/246021d04310(java多线程那点事) https://blog.csdn.net/fanrenxiang/artic ...
- 反编译和逆向出现:java.lang.VerifyError(新问题样本)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- Django 使用 Nginx + uWSGI 启动
一.前言 购买了腾讯云服务器练习 Django 项目时, # 最开始用的启动 Django 项目命令 python3 manage.py runserver 0.0.0.0:80 后面发现我一旦把 x ...
- drf(JWT认证)
一. jwt实现过程 1. 构建jwt过程 第一: 用户提交用户名和密码给服务端,如果登录成功,使用jwt创建一个token,并给用户返回 eyJ0eXAiOiJqd3QiLCJhbGciOiJIUz ...
- CSS(选择器、字体属性、文本属性、三种引入方式)
css简介 CSS 是层叠样式表 ( Cascading Style Sheets ) 的简称. 有时我们也会称之为 CSS 样式表或级联样式表. CSS 是也是一种标记语言 CSS 主要用于设置 H ...