每个循环创建一个CSV文件| PLSQL Oracle SQL开发人员 [英] Creating a CSV file per Loop | PLSQL Oracle SQL Developer

查看:133
本文介绍了每个循环创建一个CSV文件| PLSQL Oracle SQL开发人员的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

已更新

伙计们!

TL; DR

需要工作代码遍历我所有表的现有列表,这些列表将创建CSV文件,从而选择每个表的前100行.设置了一些变量来捕获表名,这些变量将用于动态地调用表,进行选择并命名文件.必须通过PLSQL和SQLDeveloper完成.你知道吗?

这里是情况:

  • 必须收集所有表(非临时基表)和行数(行数> 0)
  • 创建循环以从表列表中选择(*)前100行
  • 获取查询结果并将其放在CSV文件中

问题:

  • 声明变量
  • 使用开始和结束
  • 使用动态名称生成唯一的CSV文件

这是我的代码:

CREATE GLOBAL TEMPORARY TABLE NameRow (nom VARCHAR2(100), rowc INTEGER)
  on commit delete ROWS;
  insert into NameRow(nom, rowc) select table_name, num_rows from user_tables where temporary = 'N' and num_rows > 0;
    --select * from namerow;
    --select count(nom) from namerow;
    --drop table namerow;
    --no need for the row count > 0 because that was already done above
 declare
  counter number := 0;
  totalrecords number := 0;
  nmbre varchar2(100);
 BEGIN

    Select count(nom) into totalrecords from namerow;
    WHILE counter <= totalrecords LOOP
      select nom into nmbre from NameRow where rownum =1;
    SET SPOOL ON
    SPOOL c:\Users\l.r.enchaustegui\Documents\reporepo\||nmbre||.csv
    select /*csv*/ * from HR.nmbre;
    SET SPOOL OFF 
        delete from namerow where rownum=1;
        counter := counter + 1;
    End loop;
 END;

代码解释:

  • 使用varchare和integer列创建一个临时表,以记录DB中具有RowCount的所有表
  • 插入到临时表中的表名必须是非临时的,并且行数必须大于0

下一段

  • 声明3个变量:2个整数和一个varchar
  • 2个整数:1是循环的计数器. 1将记录在Temp表中的总行用作循环中的最大迭代次数.
  • Varchar:Nmbre将在临时表中记录第一个表的名称.

下一段

  • 使用变量Nmbre动态命名CSV文件,进入以下路径
  • 使用变量Nmbre进行假脱机查询以动态选择表
  • 从临时表中删除第一行[用于轮换到下一个表名]
  • 假脱机
  • 循环
  • 结束循环;结束;

我在哪里错了?另外,我收到此错误:

Where am I wrong? Also, I am getting this error:

奖金回合:仅限于SQL Developer

Bonus Round: Constrained to SQL Developer

推荐答案

以下是使用SQLcl的选项. SQLcl是SQLDEV的胆量,但包装到cmd行中.同样是Java,核心Java的脚本编写功能也是可用的.这是使用JavaScript作为脚本引擎.

Here's an option using SQLcl. SQLcl is the guts of SQLDEV but wrappered into a cmd line. Also being java the scripting abilities of core java is available. This is using JavaScript as the scripting engine.

我们在github上有一些文档以及很多示例说明了这些方法: https://github.com/oracle/oracle-db-tools/tree/master/sqlcl

We have some doc and lots of example of how this all works out on github here: https://github.com/oracle/oracle-db-tools/tree/master/sqlcl

script
 var binds = {};

// get complete list of tables
 var tables = util.executeReturnList("select table_name from user_tables", binds);

 for (i = 0; i < tables.length; i++) {
   // get count of rows
    var rows = util.executeReturnOneCol('select count(1)  from ' +  tables[i].TABLE_NAME );
    ctx.write( tables[i].TABLE_NAME + ">>"  + rows + " \n" ) ;

    // if more than zero dump to a csv file
    if ( rows > 0 ){
        sqlcl.setStmt("set sqlformat csv ")
        sqlcl.run();
        sqlcl.setStmt("spool " + tables[i].TABLE_NAME + ".csv")
        sqlcl.run();

        sqlcl.setStmt("select * from  " + tables[i].TABLE_NAME )
        sqlcl.run();
        sqlcl.setStmt("spool off")
        sqlcl.run();

    }
 }
/

这篇关于每个循环创建一个CSV文件| PLSQL Oracle SQL开发人员的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆