Oracle PLSQL数据导出csv的案例
之前项目运维人员碰到一个问题,需要写一个存储过程,把数据导出为csv文件,查了一些资料,帮他写成了一个PLSQL,今天拿出来分享一下,不足之处,欢迎指教。
数据背景: 用到两张表,一张存放单位组织名称org_name,它只有一个字段org_name;一张存放要导出的具体数据ryxx,其中ryxx这张表有一个字段是org_name中的org_name字段(需要like '%org_name%')。(表因为一些原因不能贴出来,见谅)
目标需求: 要求根据单位组织名称即org_name,分批导出ryxx数据为csv文件,并且导出的文件最大不能超过30000行,文件名为单位组织名称后跟序号
所用知识: PLSQL语法,包括游标、循环、条件等语句,CSV文件导出语法
具体实现:
--1、创建要导出文件的存放地址的变量
CREATE OR REPLACE DIRECTORY mydir AS 'D:\sjdc';
--2、PLSQL开始
DECLARE
-- 定义游标 org 用于获取组织名称
CURSOR org IS SELECT org_name FROM org_name;
-- 定义组织名 org_name, 接收组织名
org_name VARCHAR2(40);
-- 定义组织名相似匹配(用于 LIKE 查询)
org_name_like VARCHAR(40);
-- 定义总量,接收每次根据组织名称查询时 ryxx 表中匹配的数据总量
count_number NUMBER;
-- 定义每个组织名称关联的数据需要循环次数(因为每次导出只能导出30000条数据,需要多次导出)
loop_times NUMBER;
-- 定义当前循环到第几次(同上)
loop_i NUMBER;
-- 定义根据 org_name 匹配查询出的具体数据,为SYS_REFCURSOR类型,即动态游标
data_cur SYS_REFCURSOR;
-- 定义匹配查询出的具体数据的总量(同上)
count_cur SYS_REFCURSOR;
-- 定义文件输出
csv_output UTL_FILE.FILE_TYPE;
-- 定义 ryxx 的行类型
data_row ryxx%ROWTYPE;
-- 每个文件导出的最大行数
MAX_LINE NUMBER := 30000;
-- 输出位置
dir VARCHAR(20) := 'MYDIR';
-- 函数体开始
BEGIN
-- 1、打开 org 游标,获取组织名称,挨个取出名称进行操作
OPEN org;
LOOP
-- 2、循环取出组织名称,当无数据时推出循环
FETCH org INTO org_name;
EXIT WHEN org%NOTFOUND;
-- 3、拼接相似查询的 org_name_like,两边都有%
org_name_like := '%' || org_name || '%';
-- 4、打开游标 count_cur, 查询对应的单位名称下的 ryxx 总量
OPEN count_cur FOR 'SELECT COUNT(*) FROM ryxx WHERE st_code_name like :org_name_like' USING org_name_like;
FETCH count_cur INTO count_number;
CLOSE count_cur;
-- 5、 计算此单位的数据总共需要导出几次
loop_times := count_number/MAX_LINE;
-- 6、 开始循环导出数据
loop_i := 0;
LOOP
-- 退出循环条件:当前循环次数大于总共要循环的次数
EXIT WHEN loop_i > loop_times;
IF loop_i <= loop_times THEN
-- 7、打开查询数据的data_cur游标,导出数据(需要分页查询,所以外层不能直接用*,否则不能把数据放入data_row)
OPEN data_cur FOR 'SELECT id, name, age FROM
(SELECT t.*, rownum rn FROM ryxx WHERE ST_CODE_NAME LIKE :org_name_like)
WHERE rn <= ' || TO_CHAR((loop_i) * MAX_LINE) || ' AND rn > ' || TO_CHAR(loop_i * MAX_LINE) USING org_name_like;
csv_output := UTL_FILE.FOPEN('MYDIR', org_name || loop_i || '.csv', 'W', MAX_LINE);
LOOP
FETCH data_cur INTO data_row;
EXIT WHEN data_cur%NOTFOUND;
UTL_FILE.PUT_LINE(CSV_OUTPUT, data_row.id || ',' || data_row.name || ',' || data_row.age);
END LOOP;
loop_i := loop_i + i;
UTL_FILE.FCLOSE(csv_output);
CLOSE data_cur;
END IF;
END LOOP;
END LOOP;
CLOSE org;
END;
/
Oracle PLSQL数据导出csv的案例的更多相关文章
- C#将DataTable数据导出CSV文件
C#将DataTable数据导出CSV文件通用方法! //导出按钮调用导出方法 protected void btnCSV_Click(object sender, EventArgs e) ...
- PHP 将MySQL数据导出csv
1.查询数据 // 假设得到的数据格式如下 $result = array( array( "orderid" = "1110111", "shopi ...
- 很多人都没用过的轻量级Oracle数据库数据导出工具SQLLDR2——性能超赞
SQLLDR2 介绍 每周发表一篇数据库或大数据相关的帖子,敬请关注 1. 工具介绍 Sqluldr2(SQL * UnLoader 第二版)是灵活与强大的 Oracle 文本导出程序,已被大众使 用 ...
- 使用springboot和easypoi进行的数据导出的小案例
在这个案例中使用的有springboot和easypoi进行数据导出到excel中 yml文件是这样的: server: port: 8080 spring: datasource: url: jdb ...
- 彻底理解使用JavaScript 将Json数据导出CSV文件
前言 将数据报表导出,是web数据报告展示常用的附带功能.通常这种功能都是用后端开发人员编写的.今天我们主要讲的是直接通过前端js将数据导出Excel的CSV格式的文件. 原理 首先在本地用Excel ...
- oracle数据库数据导出和导入
oracle的客户端里面的bin下面有两个可执行文件,名称分别为exp.exe和imp.exe. 他俩的用途就是导出和导入数据用的. 全库 导出:exp 用户名/密码@数据库名 full=y file ...
- 数据库数据导出CSV文件,浏览器下载
直接上代码: def download(request): # 从数据库查询数据 data_list = Info.objects.all() # 定义返回对象 response = HttpResp ...
- DataTable数据导出CSV文件
public static void SaveAsExcel(DataTable dt1) { //System.Windows.Forms.SaveFileDialog sfd = new Syst ...
- 将远程mysql服务器数据导出 csv 并发送到我的本机
1.在SQL上执行查询并导出操作 '; 2.发送到本机 SQL>system sz idIsNull2.csv;
随机推荐
- nrm安装和使用--管理你的npm源
为什么要使用nrm 我们知道可以使用npm来管理node包,方便我们来操作管理包的版本和信息. 可是由于国内网络原因,直接使用npm官网镜像下载安装node包,比较耗时间,有时还不成功,所以一般会将镜 ...
- linux下使用clamav排查病毒
clamav wget http://www.clamav.net/downloads/production/clamav-0.102.0.tar.gz ### Installyum -y insta ...
- Redis 键的过期删除策略及缓存淘汰策略
前言 Redis缓存淘汰策略与Redis键的过期删除策略并不完全相同,前者是在Redis内存使用超过一定值的时候(一般这个值可以配置)使用的淘汰策略:而后者是通过定期删除+惰性删除两者结合的方式进行内 ...
- flutter、rn、uni-app比较
前言 每当我们评估新技术时要问的第一个问题就是“它会给我们的业务和客户带来哪些价值?”,工程师们很容易对闪闪发光的新事物着迷,却经常会忽略这些新事物其实可能对我们的客户没有任何好处,反而只会让现有的工 ...
- HandlerMethodArgumentResolver SpringMVC 参数解析 继承关系以及各解析器解析类型
HandlerMethodArgumentResolver SpringMVC 参数解析 继承关系以及各解析器解析类型 I HandlerMethodArgumentResolver (org.spr ...
- 《原创视频》牛腩学docker简记
牛腩学docker简记 http://blog.niunan.net/blog/show/1258https://www.cnblogs.com/niunan/p/10917506.htmlhttps ...
- cent os 部署blade
一:安装docker 二:安装docker-compose 三:安装Harbor 四:配置Harbor使用https和2376端口 在/etc/docker 目录下面创建文件:create_tls_c ...
- IntelliJ IDEA破解教程汇总
IDEA是一款很好用的工具,若资金允许,请点击https://www.jetbrains.com/idea/buy/购买正版,谢谢合作. 目前破解的方式主要有三种,注册机.破解补丁.注册码,下面分别介 ...
- SQL Server常用方法
目录 CharIndex:确定某个字符的位置 Substring:截取 stuff: 根据位置替换字符串 replace:替换字符串 CharIndex:确定某个字符的位置 两个参数,前面是关键字,后 ...
- 【NPDP笔记】第四章 文化组织与团队
此为临时链接,仅用于预览,将在短期内失效.关闭 [NPDP笔记]第四章 文化组织与团队 小康 小康哥的产品之路 9月6日 4.1 文化和氛围对创新的重要性 文化:信念,价值观,假设,与期望 氛围:直接 ...