最近有大量的导出数据库表为csv操作需求,网上搜索了一下,发现没有导出clob数据类型的。于是自己拿来网上的修改了下,站在别人的肩膀上写了一个可以导出csv包含clob类型的存储过程。其中所有的列值都是使用双引号引起来的。

存储过程内容如下:

create or replace procedure sql_to_csv_clob(p_query in varchar2, --sql query statementp_dir in varchar2, --the directory of filep_filename in varchar2, --the export filenamep_max_linesize in number default 32000 --max linesize,must less than 32787) authid current_user is -- 调用者权限
l_output utl_file.file_type;
l_theCursor integer default dbms_sql.open_cursor;
l_columnValue varchar2(4000);
l_status integer;
l_colCnt number := 0;
l_separator varchar2(1);
l_descTbl dbms_sql.desc_tab;
l_clob clob;
begin
--open filel_output := utl_file.fopen(p_dir, p_filename, 'w', p_max_linesize);--define date/timestamp formatexecute immediate 'alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''';execute immediate 'alter session set nls_timestamp_format=''yyyy-mm-dd hh24:mi:ss.ff9''';--open cursordbms_sql.parse(l_theCursor, p_query, dbms_sql.native);dbms_sql.describe_columns(l_theCursor, l_colCnt, l_descTbl);--dump table column namefor i in 1 .. l_colCnt loop--输出表头信息,如果不输出表头注释掉如下两行utl_file.put(l_output,l_separator || '"' || l_descTbl(i).col_name || '"');--判断是否是clob类型if l_descTbl(i).col_type = 112 thendbms_sql.define_column(l_theCursor, i, l_clob);elsedbms_sql.define_column(l_theCursor, i, l_columnValue, 4000);end if;l_separator := ',';end loop;utl_file.new_line(l_output); --不输出表头,慈航注释掉--execute the query statementl_status := dbms_sql.execute(l_theCursor);-- generate file--dump table column valuewhile (dbms_sql.fetch_rows(l_theCursor) > 0) loopl_separator := '';--表示文件里面数据行首分隔符for i in 1 .. l_colCnt loopif l_descTbl(i).col_type = 112 thendbms_sql.column_value(l_theCursor, i, l_clob);--将clob分成3800个字符,如果clob中存在中文,请注意调整长度utl_file.put(l_output,',"');for j in 1..ceil(dbms_lob.getlength(l_clob)/3800) looputl_file.put(l_output,replace(dbms_lob.substr(l_clob,(j-1)*3800+1,j*3800),'"','""'));end loop;utl_file.put(l_output,'"');elsedbms_sql.column_value(l_theCursor, i, l_columnValue);--因为我要导入数据到mysql,其中空值null我转换成\N了utl_file.put(l_output, l_separator ||'"'||nvl(trim(both ' ' from replace(l_columnValue,'"','""')),'\N')||'"');--utl_file.put( l_output, l_separator || '"' ||trim(both ' ' from replace(l_columnValue,'"','""')) || '"'); -- generate csv filel_separator := ','; --separator表示文件里面数据分隔符end if;end loop;utl_file.new_line(l_output);end loop;--close cursordbms_sql.close_cursor(l_theCursor);--close fileutl_file.fclose(l_output);
exceptionwhen others thenraise;
end sql_to_csv_clob;

命令行调用:exec sql_to_csv_clob(‘select * from test’,‘DB_DIR’,‘test.csv’);

其中,DB_DIR是数据库中的directory。

导出以后的csv,放入mysql数据,使用mysql的load命令。

load命令:
load data infile ‘/var/lib/mysql-files/test.csv’ into table db.table_name
fields
terminated by ‘,’
enclosed by ‘"’;

oracle数据库导出数据为csv包含clob数据相关推荐

  1. Pandas如何读取和导出 Excel、CSV、JSON 数据?

    转载自:Pandas如何读取和导出 Excel.CSV.JSON 数据? - 知乎 导入pandas等包 import pandas as pd import numpy as np import m ...

  2. 快速清除oracle多个表,Oracle数据库之批量清除一个表的数据,TB级别数据

    本文主要向大家介绍了Oracle数据库之批量清除一个表的数据,TB级别数据,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. 有个需求,要求清理8TB的数据,只保留一个月的数据,现 ...

  3. oracle数据库导出灰色_oracle数据库导出和oracle导入数据的二种方法(oracle导入导出数据)...

    方法一:利用PL/SQL Developer工具导出: 菜单栏---->Tools---->Export Tables,如下图,设置相关参数即可: 方法二:利用cmd的操作命令导出,详情如 ...

  4. oracle数据库导出和oracle导入数据的二种方法(oracle导入导出数据)

    这篇文章主要介绍了oracle导入导出数据的二种方法,利用PL/SQL Developer工具导出和利用cmd的操作命令导出的出方法,大家参考使用吧 方法一:利用PL/SQL Developer工具导 ...

  5. 使用 Athena (Presto) 分析本地 Oracle 数据库导出的数据

    在传统企业客户,无论是前台的交易数据库还是后台的数据仓库,都会选择使用 Oracle,它具备非常广泛的技术资料.社区资源和问题处理案例(各种踩坑的经验):同时它还有广泛的用户基础,很多企业的技术栈都是 ...

  6. oracle数据库导出数据6,Oracle数据库导入导出方法汇总

    Oracle数据库导入导出方法: 1.使用命令行: 数据导出: 1.将数据库TEST完全导出,用户名system密码manager导出到D:\daochu.dmp中 exp system/manage ...

  7. 【实操】Oracle数据库导出、导入命令详解

    oracle11g数据库导入导出: ①:传统方式--exp(导出)和(imp)导入: ②:数据泵方式--expdp导出和(impdp)导入; ③:第三方工具--PL/sql Develpoer; 一. ...

  8. oracle导入 表 卡住了,oracle数据库怎么导入dmp,只导入数据不导入表结构?

    使用方法: Exp parameter_name=value or Exp parameter_name=(value1,value2--) 只要输入参数help=y就可以看到所有帮助. EXP常用选 ...

  9. dataset中的数据批量导入oracle数据库,c#如何将dataset中的数据批量导入oracle数据库...

    c#如何将dataset中的数据批量导入oracle数据库以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! c#如何将da ...

  10. Linux下oracle全库导出,Oracle数据库导出导入

    需求为将Oracle数据库A中的数据导出为*.dmp文件,然后将*.dmp文件导入到数据库B. 1.导出数据库A 在cmd窗口输入以下命令: 导出全部数据库 exp 用户名/密码@数据库名 file= ...

最新文章

  1. java整理软件--- Java OCR 图像智能字符识别技术,可识别中文,但是验证码不可以识别...已测识别中文效果很好...
  2. 使用SQLmap对dvwa进行SQL注入测试
  3. (转)java.lang.RuntimeException: Missing type parameter
  4. k5b型计算机联锁知识,DS6-K5B计算机联锁系统日常维护注意事项
  5. c++ List(双向链表)
  6. python安卓开发实例_python服务器与android客户端socket通信实例
  7. 计算机考试时间2021安徽,安徽省2021年高考录取结果查询正式开通!查询方式权威公布...
  8. emmc linux 识别分区_EMMC芯片电视主板直写厂家引导程序
  9. php判断字段重复,删除完全重复和部分关键字段重复的记录
  10. python 3.6中使用open函数遇见的问题
  11. HAUT校赛--最大奇子段和
  12. 联想E460关闭触摸板
  13. 10.23 第六次作业 刘惠惠 this关键字
  14. W806开发板环境搭建
  15. 009 二维随机变量分布 min max 习题
  16. IOS 点击空白处隐藏键盘的几种方法
  17. Python第五周练习:随机密码生成
  18. Origin数据分析功能
  19. 青龙扩展--九章头条
  20. 终端运行npm install @tinymce/tinymce-vue -S报错的解决办法

热门文章

  1. 启动cesium官方示例
  2. 2022年的职场会是什么样子?
  3. 瑞芯微板子人脸识别demo展现
  4. 罗格斯的计算机科学,罗格斯大学计算机科学研究生申请截止日期
  5. 计算机新生导学课心得,新生导学课论文_新生导学课感想_大一新生导学课心得...
  6. 整合SSM中jsp页面图片加载不出来问题
  7. CSDN 图片加载不出来
  8. keil5库文件安装失败_iPad iPhone如何清理垃圾 iPad iPhone清理垃圾文件办法【详解】...
  9. 关于互联网+分布式光伏运维平台的应用介绍-李亚俊
  10. 电脑版微信提示音mp3_短的微信提示音什么好?40首好听的微信提示音试听下载...