首页 > 数据库 >【Oracle】在PL/SQL中使用sql实现插入排序

【Oracle】在PL/SQL中使用sql实现插入排序

时间:2023-07-15 15:13:15浏览次数:53  
标签:end -- 插入排序 SQL sql 排序 data loop

【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

得到结果

image

标签:end,--,插入排序,SQL,sql,排序,data,loop
From: https://www.cnblogs.com/jokingremarks/p/17556144.html

相关文章

  • MySQL的表关系
    表关系(外键)什么是外键? 外键就是通过一个字段可以查询到另一张表上的内容为什么要有外键? """ 1、表的数据不够清晰,分不清表的具体用处 2、字段需要重复的写太浪费资源 3、兼容性很差,牵一发而动全身 """使用外键如何解决? 把一张表拆成两张表,每个表上面是自己独有......
  • MySQL的了解知识
    SQL注入问题importpymysql#连接MySQL服务端conn=pymysql.connect(host='127.0.0.1',port=3306,user='root',password='123',database='db8_3',charset='utf8',autocommit=True#针对增......
  • MySQL8.0中utf8mb4的强大:释放多语言数据的全部潜能
     在现代网络应用中,支持多种语言和字符集变得越来越重要。随着全球化的兴起,存储和处理多语言数据的需求已变得至关重要。MySQL作为最流行的关系数据库管理系统之一,它意识到了这一需求,并在其8.0版本中引入了utf8mb4,从而改变了游戏规则。在本文中,我们将通过实际示例探讨utf8mb4及其......
  • JPA + MySQL 开发总结
    本文为博主原创,转载请注明出处:org.springframework.data.jpa是SpringDataJPA框架中的一个包,用于简化与JPA(JavaPersistenceAPI)相关的开发任务。SpringDataJPA提供了一套强大且易于使用的功能,使得与数据库进行持久化操作更加便捷和高效。1.引入JPA,进行常规开发步骤......
  • ES 实战复杂sql查询、修改字段类型
    转载请注明出处:1.查询索引得mapping与setting get直接查询索引名称时,会返回该索引得mapping和settings得配置,上述返回得结构如下:{"terra-syslog_2023-07-12":{"aliases":{},"mappings":{"properties":{"@ti......
  • mysql修改所有表的编码排序规则
    #查询数据库各表的排序规则SELECTTABLE_NAME,TABLE_COLLATIONFROMINFORMATION_SCHEMA.TABLESWHERETABLE_SCHEMA='database'; #查询要修改排序规则表的SQL语句SELECTconcat('ALTERTABLE',TABLE_NAME,'CONVERTTOCHARACTERSETutf8mb4COLLATEutf8mb4_unicod......
  • mysql使用记录
    mysql一些实际使用记录查看数据库showdatabases;选择某个数据库usexxxxx;创建数据库createdatabasetestdb;选择某个数据库后,查看该数据库下有那些表showtables;查看当前正在使用的数据库selectdatabase();表数据库当中最基本的单元是表:table;表中每一个字......
  • SQL语句执行顺序
    selectdistinct查询列表(要查的字段)from左边的表们s连接类型(left|inner)join右边的表们son连接条件where筛选条件groupby分组的列表(按什么字段分组)havinghaving_conditionorderby排序的字段limitlimitnumber;1f......
  • Mysql导入sql脚本报错,时间格式数据为空
    Mysql导入sql脚本报错,时间格式数据为空Mysql导入sql脚本时候导入的sql脚本中有时间格式为空的时候时间格字段会报错。解决方式也很简单:查看sql_mode:select@@session.sql_mode;查询结果:STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,N......
  • SpringBoot+Vue3+MySQL集群 开发健康体检双系统
    第1章课程介绍试看4节|38分钟观看项目演示,熟悉大健康体检项目主要功能。掌握学习本课程的最佳方法,以及如何利用在线手册学习和答疑。第2章大健康体检项目全栈环境搭建16节|218分钟利用虚拟机或者云主机安装Linux系统和Docker环境,部署MongoDB、Redis、Minio和RabbitMQ等中......