查询以计算每个 table 中的行数并使用 SQL developer 提取一个 txt 文件

Query to count the number of rows in each table and extract a txt file using SQL developer

我不熟悉使用 oracle 数据库和高级查询概念甚至 PL/SQL。

我正在尝试创建一个查询,我可以在其中查看数据库中每个 table 的行数,并将它们写入 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文件中写入数据库的进步历史的方法,我的这个查询只写了当天。我想到了一个解决方案,文件名会根据日期更改,这样我就不会替换文件,但我仍然不能。

感谢大家的关注和参与

您可以将查询包装在一个过程中并安排它,但是假脱机是一个客户端命令,因此您需要使用 utl_file 来写入服务器上的文件。

相反,您可以将其另存为脚本并编写批处理文件 运行 通过 SQL*Plus 或 SQLcl 而不是 SQL开发商;然后使用 Windows 调度到 运行 该批处理文件。

默认情况下假脱机将覆盖现有文件,但您可以添加 append 来更改行为,如 in the documentation:

所述
spool C:\Logs\LOGs.txt append

将数据放在一个文件中可能会造成混淆,即使您将当前日期作为另一列包含在查询中也是如此。您可以改为每天更改文件名。

另一种选择是将计数写入数据库中的日志记录 table,然后您可以轻松查询和比较。插入 - 使用您现有的查询加上日期 - 然后可以轻松地包装在一个过程中,并且可以安排该过程。