更新
抗辐射人们!
TL; DR
需要工作代码来遍历我所有表的现有列表,这些表将创建CSV文件,选择每个表的前100行。设置了变量以捕获将动态使用的表名,调用表以进行选择并命名文件。必须通过PLSQL和SQLDeveloper完成。你知道吗?
情况如下:
问题:
这是我的代码:
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;
代码说明:
下一部分
下一段
我哪里错了?另外,我收到此错误:
奖金回合:受限于SQL Developer
答案 0 :(得分:0)
这是使用SQLcl的选项。 SQLcl是SQLDEV的内容,但是包含在cmd行中。也是java的核心java的脚本功能可用。这是使用JavaScript作为脚本引擎。
我们在github上有一些doc和很多关于如何解决这个问题的例子: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();
}
}
/