我对使用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文件中写数据库的历史记录,我的这个查询只写当天的情况。我想到了一个解决方案,文件的名称会随着日期的变化而变化,这样我就不会替换文件,但仍然不能。
感谢大家的关注和帮助
1条答案
按热度按时间piztneat1#
您可以将查询 Package 在一个过程中,并对其进行调度,但spool是一个客户机命令,因此需要使用
utl_file
改为写入服务器上的文件。相反,您可以将其另存为脚本,并编写一个批处理文件,通过sql*plus或sqlcl而不是sqldeveloper来运行它;然后使用windows调度运行批处理文件。
默认情况下,spool将覆盖现有文件,但您可以添加
append
如文件所述,改变行为:但是,在一个文件中包含数据可能会造成混淆,即使您在查询中将当前日期作为另一列包含。您可以每天更改文件名。
另一种选择是将计数写入数据库中的日志表,然后您可以轻松地查询和比较该表。插入-使用现有查询加上日期-可以很容易地 Package 在一个过程中,并且可以安排该过程。