有一段SQL需要每天定时执行,并且将结果输出到文件中。
要求输出条数达到499条数据的时候,创建一个新的文件并且继续将结果输出到新的文件中。
最好使用批处理来实现。
bat判断条数估计够呛,退一步,可以判断文件大小进行操作
如果不用批处理的话,还有没有什么别的方法可以实现?
大体思路就是:
1.创建一个到处txt文件的sql脚本。
set ARRAYSIZE 50
set linesize 100
SET PAGESIZE 0
set timing off
set heading off
set feedback off
SET TRIMOUT ON
set trimspool on
set termout off
define r_filename=&1
spool &r_filename;
select empno||','||ename from emp;
spool off;
2.创建一个shell脚本调用写好的sql脚本。
#! /bin/bash
START_TIME=date +%Y%m%d%H%M%S
TIMESTAMP=date +%Y%m%d%H%M%S
DB_USER="apps/apps@orcl.net"
FILE_PATH=$HOME/temp
FILE_NAME=tt$TIMESTAMP.txt
SQL_FILE=$HOME/sql/tt.sql
echo 'Start time is: '$TIMESTAMP
echo 'SQL file is: '$SQL_FILE
echo 'OUT file is: '$FILE_NAME
echo 'File full path is: '$FILE_PATH/$FILE_NAME
sqlplus -S $DB_USER @$SQL_FILE $FILE_PATH/$FILE_NAME
if [ -r $FILE_PATH/$FILE_NAME ]; then
echo "$FILE_NAME create success"
else
echo "$FILE_NAME create fail"
exit 1
fi
END_TIME=date +%Y%m%d%H%M%S
echo 'End time is: '$END_TIME
3.可以创建一个linux的定时任务,定时调用如上shell脚本。
1)先创建一个定时任务列表的文件,oraclecron
#分 时 日 月 星期 命令完全路径
#这条命令表示每个15分钟调用一次/home/oracle/myShell/ttt
15,30,45,0 * * * * /home/oracle/myShell/ttt
2)把这个定时任务添加到系统crontab列表
crontab oraclecron
3)可以用如下命令查看系统crontab任务,如果看到你在oraclecron文件中添加的任务就OK了。
crontab -l
4.从定时任务添加成功后,每逢整刻钟系统就会掉用 2 中创建的shell脚本,2 的shell脚本调用 1 的sql脚本。
最终生成一个文件在oracle服务器上。
sqlserver代理中可以创建作业,定时调用
复杂的操作用批处理比较难搞,可以写一个程序来执行操作,弄成服务或者定时任务调用。
用hive写好点
可以写个简单的python脚本 来执行SQL语句
判断条数比较好判断
windows上可以用定时计划
linux上可以用crontab 定时
我这儿就有一个脚本在定时运行,每天爬几个网站,截图+输出EXCEL并发邮件
或者用各种RPA软件也可以 比如阿里的云拓或者微软的PowerAutomate