使用sqldeveloper查询每个表中的行数并提取一个txt文件

nhjlsmyf  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(411)

我对使用oracle数据库和高级查询概念甚至pl/sql都是新手。
我正在尝试创建一个查询,在其中可以看到数据库中每个表中的行数,并将它们写入一个txt文件。我们的目标是建立一个数据库每天更新的历史记录。
在此之前,我继续使用下面的代码,它工作正常。

spool C:\Logs\LOGs.txt
select
   table_name,
   to_number(
   extractvalue(
      xmltype(
         dbms_xmlgen.getxml('select count(*) c from '||table_name))
    ,'/ROWSET/ROW/C')) count
from 
   user_tables
order by 
   table_name;

spool off;

现在我面临两个新的挑战:
1-我无法在sql developer中正确计划此查询,因为他们只接受过程而不接受查询,或者我找不到计划此查询运行的方法,例如,在windows上的任务计划程序中。
2-我想用一种方法在txt文件中写数据库的历史记录,我的这个查询只写当天的情况。我想到了一个解决方案,文件的名称会随着日期的变化而变化,这样我就不会替换文件,但仍然不能。
感谢大家的关注和帮助

piztneat

piztneat1#

您可以将查询 Package 在一个过程中,并对其进行调度,但spool是一个客户机命令,因此需要使用 utl_file 改为写入服务器上的文件。
相反,您可以将其另存为脚本,并编写一个批处理文件,通过sql*plus或sqlcl而不是sqldeveloper来运行它;然后使用windows调度运行批处理文件。
默认情况下,spool将覆盖现有文件,但您可以添加 append 如文件所述,改变行为:

spool C:\Logs\LOGs.txt append

但是,在一个文件中包含数据可能会造成混淆,即使您在查询中将当前日期作为另一列包含。您可以每天更改文件名。
另一种选择是将计数写入数据库中的日志表,然后您可以轻松地查询和比较该表。插入-使用现有查询加上日期-可以很容易地 Package 在一个过程中,并且可以安排该过程。

相关问题