首页 > 其他分享 >本地机Spool出某个表的字段名和数据到csv

本地机Spool出某个表的字段名和数据到csv

时间:2024-09-05 17:48:50浏览次数:11  
标签:curid dbms 81 20 -- Spool sql csv 字段名

之前是通过sqlcl提供的SET SQLFORMAT csv导出数据到csv文件,这次是想尝试仅仅是使用SQL plus 中的spool导出数据

数据准备

SQL> SELECT * FROM EMP ORDER BY EMPNO;

   EMPNO ENAME     JOB              MGR HIREDATE         SAL    COMM    DEPTNO
________ _________ ____________ _______ ____________ _______ _______ _________
    7369 SMITH     CLERK           7902 17-12月-80        800                20
    7499 ALLEN     SALESMAN        7698 20-2月 -81       1600     300        30
    7521 WARD      SALESMAN        7698 22-2月 -81       1250     500        30
    7566 JONES     MANAGER         7839 02-4月 -81       2975                20
    7654 MARTIN    SALESMAN        7698 28-9月 -81       1250    1400        30
    7698 BLAKE     MANAGER         7839 01-5月 -81       2850                30
    7782 CLARK     MANAGER         7839 09-6月 -81       2450                10
    7788 SCOTT     ANALYST         7566 19-4月 -87       3000                20
    7839 KING      PRESIDENT            17-11月-81       5000                10
    7844 TURNER    SALESMAN        7698 08-9月 -81       1500       0        30
    7876 ADAMS     CLERK           7788 23-5月 -87       1100                20
    7900 JAMES     CLERK           7698 03-12月-81        950                30
    7902 FORD      ANALYST         7566 03-12月-81       3000                20
    7934 MILLER    CLERK           7782 23-1月 -82       1300                10

使用Oracle中SCOTT用户自己提供的数据

脚本

脚本内容如下:

-- 导出CSV文件
-- set serveroutput on  
SET FEEDBACK off
set termout off
Spool D:\SpoolFile\TEST.csv
DECLARE
  l_curid   INTEGER;
  l_cnt     NUMBER;
  l_separator varchar2(1);
  l_desctab dbms_sql.desc_tab;
  l_sqltext VARCHAR2(2000);
  l_status integer;
  l_columnvalue varchar2(4000);
BEGIN
  l_sqltext := 'SELECT * FROM EMP'; -- 可以是任意有效的查询sql文本 
  l_curid   := dbms_sql.open_cursor();
  dbms_sql.parse(l_curid, l_sqltext, dbms_sql.native);
  dbms_sql.describe_columns(l_curid, l_cnt, l_desctab);

   -- dump table column name
    for i in 1 .. l_cnt loop
        dbms_output.put(l_separator || '' || l_desctab(i).col_name || ''); -- 输出表头部字段名
        dbms_sql.define_column(l_curid, i, l_columnvalue, 4000);
        l_separator := ',';
    end loop;
    dbms_output.new_line();

  l_status := dbms_sql.EXECUTE(l_curid); 

  -- dump table column value
  while (dbms_sql.fetch_rows(l_curid) > 0) loop
      l_separator := '';
      for i in 1 .. l_cnt loop
          dbms_sql.column_value(l_curid, i, l_columnvalue);
          dbms_output.put(l_separator || '' || l_columnvalue || ''); -- 输出表对应的表数据
          l_separator := ',';
      end loop;
      dbms_output.new_line(); -- 写入cvs行
  end loop;

  dbms_sql.close_cursor(l_curid);
END;
/
Spool off

把以上脚本放在一个sql文件里,然后直接执行脚本文件就好

@D:\SpoolFile\test.sql


本地机spool数据到csv文件0

结果如下


本地机spool数据到csv文件1


本地机spool数据到csv文件2

l_sqltext := 'SELECT * FROM EMP'; -- 可以是任意有效的查询sql文本 

该段sql还是比较简单的查询,如果是比较复杂的业务逻辑代码,可以先使用视图进行封装后,再放进这里。需要导出多个文件,可以使用数组遍历的方式导出csv文件。

参考资料

DBMS_SQL使用 - 雪山上的蒲公英 - 博客园 (cnblogs.com)

dbms_output.put_line的用法(Oracle)_dbmsoutputputline-CSDN博客

ORACLE中使用DBMS_SQL获取动态SQL执行结果中的列名和值 - 红无酒伤 - 博客园 (cnblogs.com)

Oracle批量导出表数据到CSV文件 - 天之痕羽翼 - 博客园 (cnblogs.com)

标签:curid,dbms,81,20,--,Spool,sql,csv,字段名
From: https://www.cnblogs.com/a-Yogurt/p/18398931

相关文章

  • 通过命令行在阿里云服务器向MySQL上传CSV格式的表
    前言:由于不知道为什么,IDEA中没法导出sql格式的表,只能导出csv格式的,研究半天,记录一下历程。注意,sql文件包含SQL语句,如创建表、插入数据等,它能定义数据库结构并填充数据。csv文件是纯文本文件,通常用于存储表格数据,每行代表一条记录,字段之间用逗号分隔。也就是说,要向服务器导入......
  • csv
    Functionado_read_csv(path1,goal_sht)'导入csv,注意编码方式,936--gb,65001-utf-8DimarrAsNewarrSetcnn=CreateObject("ADODB.Connection")Setrs=CreateObject("adodb.recordset")abc=Split(path1,"\&quo......
  • 本地机spool导出多个查询结果到多个CSV文件
    问题需要在PL/SQLdeveloper上多次手动重复查询导出大量数据。解决使用sqlcl中提供的SETSQLFORMATcsv和SQLplus提供的Spool导出数据到csv文件。代码setserveroutputonsettermoutoffspoolD:\SpoolFile\tmp_script.sqlDECLARETYPETYPE_ARRAYISVARRAY(10)O......
  • python 数据分析 损失数值 如何放到csv中呢 人工智能 深度神经网络,Pytorch ,tensorflo
    损失数值如何放到csv中呢 在Python中,使用`csv`模块将数据写入CSV文件是一种常见的操作。从你提供的代码片段来看,你想要将损失数值写入名为`middle_losse.csv`的文件中。但是,你提供的代码片段中存在一些需要修改的地方,以确保数据能够正确地写入CSV文件。首先,`csv.writer`对象的`wr......
  • Scrapy:使用自定义列设置保存为 CSV 的指南
    在Scrapy中,你可以使用自定义列设置将数据保存为CSV文件。以下是一个基本的指南:定义你的数据项(Item):在你的Scrapy项目中,创建一个类来定义你要提取的数据项。每个数据项对应于CSV文件中的一列。处理数据:在你的爬虫(Spider)中,提取数据并将其存储在定义的数据项中。设置CSV输出:......
  • 比较 php 中的 CSV 行
    在PHP中,你可以使用内置的函数来比较CSV行。以下是一个示例代码,演示如何比较CSV行:<?php//读取CSV文件$file=fopen('your_file.csv','r');//初始化变量$previous_row=null;$current_row=null;//逐行读取CSV文件while(($data=fgetcsv($file))!==fals......
  • lambdaQueryWrapper及动态获取字段名
    实体对象importcom.baomidou.mybatisplus.annotation.TableField;importlombok.Data;@Data@Table("")publicclassUser{privateLongid;@TableField("t_name")privateStringname;@TableField("t_age")priv......
  • 20240827_102249 python 认识csv格式
    目标认识csv格式制作一个csv文件示例......
  • QT在控件graphicsView中绘制箭头
    这里写自定义目录标题前言:基础夯实:成功效果展示:失败效果展示:核心代码:前言:对之前箭头没有成功绘制的补充,因为没有直接的箭头项,所以需要自己进行绘制基础夯实:可以直接看,建议看一下之前的绘制过程在控件graphicsView中实现绘图功能(一)在控件graphicsView中实现绘图功......
  • 信息熵计算程序[Python+CSV格式数据集]
    0前言为了便于学习决策树信息熵相关知识,笔者编写了一个专门用于计算变量信息熵、条件熵、信息增益、信息增益比的程序,方便提升学习效率。程序中包含了计算过程的数据和详细信息以及最终计算结果。编程语言为Python,搭配CSV数据格式使用。1数据集1.1游玩数据集根据天气状......