打乱mysql数据顺序_打乱数据库表内的数据顺序
【问题】
What is a best way to shuffle a database column using pl/sql. how to shuffle a database column eg first name with around 70000 of rows . TIA
针对此问题,有人给了下面的方案:
DECLARE
SUBTYPE Name IS VARCHAR2(200);
TYPE Names_tab IS TABLE OF Name;
--
tabOrigin Names_tab;
tabShuffled Names_tab;
vSwap Name;
idx BINARY_INTEGER;
BEGIN
\-\- Do simple play WITH DUAL instead of real data
WITH rs AS (
SELECT DBMS_RANDOM.STRING( 'A', 1) name FROM dual
UNION ALL
SELECT DBMS_RANDOM.STRING( 'A', 1) name FROM dual
UNION ALL
SELECT DBMS_RANDOM.STRING( 'A', 1) name FROM dual
UNION ALL
SELECT DBMS_RANDOM.STRING( 'A', 1) name FROM dual
UNION ALL
SELECT DBMS_RANDOM.STRING( 'A', 1) name FROM dual
UNION ALL
SELECT DBMS_RANDOM.STRING( 'A', 1) name FROM dual
)
SELECT name origin, name shuffle
BULK COLLECT INTO tabOrigin, tabShuffled
FROM rs
;
--
\-\- As mentioned in 'Operational Notes' for package DBMS_RANDOM
\-\- invocation of DBMS_RANDOM.SEED is necessary only for obtaining
\-\- repeatable sequence of values, therefore omit this call
--
FOR i IN 1 .. tabOrigin.COUNT LOOP
idx := DBMS_RANDOM.VALUE( 1, tabOrigin.COUNT);
vSwap := tabShuffled(i);
tabShuffled(i) := tabShuffled(idx);
tabShuffled(idx) := vSwap;
END LOOP;
\-\- Lookup result after shuffling
FOR i IN 1 .. tabOrigin.COUNT LOOP
dbms\_output.put\_line(
'Origin: ' || tabOrigin(i) || ' Shuffled to: ' || tabShuffled(i)
);
END LOOP;
END;
/
Output for this script is:
Origin: D Shuffled to: N
Origin: U Shuffled to: n
Origin: j Shuffled to: K
Origin: N Shuffled to: D
Origin: K Shuffled to: j
Origin: n Shuffled to: U
【回答】
上面给出的方案中,SQL 可以生成打乱后的列,但如果想把数据写回 SHUFFLED_VALUE 字段,则还要经过进一步处理,整个过程很麻烦。 但是用 SPL 来实现这个功能就很容易了,而且代码简洁明了:
A
1
=connect("myDB1").query("select id,ORIGINAL_VALUE from REF_VALUES")
2
=A1.sort(rand())
3
=join@p(A1.(ID);A2.(ORIGINAL_VALUE))
4
=connect("myDB1").update@u(A3,REF_VALUES,ID:_1,SHUFFLED_VALUE:_2 ;ID)
A1:执行 SQL 取数
A2:对序列成员进行随机排序
A3:将 A1 中的 ID 列与 A2 中的 ORIGINAL_VALUE 列按位置连接起来,返回新序表
A4:根据键 ID,将 A3 中的列更新到数据库表 REF_VALUES 中
函数详细解释可参加文档《函数参考》
打乱mysql数据顺序_打乱数据库表内的数据顺序相关推荐
- MySql学习【一】mysql的安装,操作数据库/表/查询表中数据/mysql日期计算
1.安装和连接数据库的注意事项 1.在mac电脑上安装mysql,官网下载即可. 2.mysql返回的执行行数和时间,时间并不精确.其中时间是指挂钟时间 [返回进程启动到调用函数时所经过的CPU时钟计 ...
- mysql rds备份_云数据库RDS如何进行数据备份
前言:目前睿江云已经推出的RDS云数据库,用户无需进行额外的传统命令行配置,直接选购即可使用. 常见的RDS备份工具 目前睿江云也支持数据的备份,您可以选择数据备份的策略,进行备份. 那么常见的备份工 ...
- mysql 字段 下拉列表_用数据库表填充下拉列表框
用数据库表填充下拉列表框 1.引入名称空间 using system.data using System.Data; using System.Data.SqlClient; 2.连接数据库(有多种连 ...
- sql添加、修改、删除数据,修改删除数据库表。
在创建完数据库的表格后,接下来要做的显然就是对表格的数据进行编辑了,这篇文章整理了一些关于表格处理的基本方法: 一.添加数据: 在上篇文章中我已经建好了一个t_student的表格,然后往其中添加数据 ...
- mysql内核架构_热血江湖mysql内核技术之门派数据库表结构说明
小编之前已经多次和大家说过了一个概念,不管你打算架设的是什么游戏什么版本都必须熟悉它的数据库整体结构.今天小编要说的是热血江湖私服游戏中最难的MYSQL内核技术,对于玩家来说MYSQL技术无疑是最难的 ...
- mysql中下列关于创建_在 MySQL 中,下列关于创建数据库表的描述正确的是( )。_学小易找答案...
[单选题]在表中设置外键实现的是哪一类数据完整性( ) [单选题]以下为概念模型的是() [论述题]• 参照 < 中国图书馆分类法 > ,谈一下你对自己所学专业在整个科学知识领域中所在的位 ...
- python亿级mysql数据库导出_Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法...
本文实例讲述了python实现将MySQL数据库表中的数据导出生成csv格式文件的方法.分享给大家供大家参考,具体如下: #!/usr/bin/env python # -*- coding:utf- ...
- MySQL - 删除数据库表中的数据
删除数据库表中的数据 删除数据记录是数据操作中常见的操作,可以删除表中已经存在的数据记录.在MySQL中可以通过DELETE语句来删除数据记录,该SQL语句可以通过以下几种方式使用:删除特定数据记录. ...
- 增大mysql修改表空间_扩充数据库表空间
ALTER TABLESPACE ADD DATAFILE , [REUSE] NEXT MAXSIZE <>中是你要填的内容,有|是选其一. 如:增加文件是d:\dbfs\mydatab ...
最新文章
- python基础学习22----协程
- CSS将样式规则与HTML元素相关联
- Java使用内部类的意义
- IOS 通讯录 右侧的字母栏
- 数据结构实验之图论四:迷宫探索_迷宫搜索类的双向bfs问题(例题详解)
- ospf 环回口的路由条目_路由策略之重分发示例分析
- 基础向:关于异常(Exception)面试常会问到的问题
- 第三十一章 线程------GIL、线/近程池、异/同步、异步回调
- js文件上传不用点击上传按钮自动上传
- 基本数据结构解析之Stack Queue
- POJ 2406题解kmp算法的应用
- 淘宝APP购物车测试用例
- 今天开始开发竞争情报系统了,在这里做个记录
- 手机恢复出厂设置命令_OpenWRT 恢复出厂设置命令
- Python 爬虫框架Scrapy Spiders学习
- Beyond Compare4破解方法
- java操作k8s api报错:SSLHandshakeException: should not be presented in certificate_request
- JavaScript之caller和caller属性
- 媒体访谈| 知道创宇邓金城: DDoS攻势愈烈,抗D服务需不断优化
- matlab画双曲线的四种方法