当前位置: 代码迷 >> Oracle开发 >> 请教存储过程中可以执行shell脚本吗
  详细解决方案

请教存储过程中可以执行shell脚本吗

热度:68   发布时间:2016-04-24 06:39:20.0
请问存储过程中可以执行shell脚本吗?
有一个需求是,每天定时要把oracle某张表里的数据按要求导出成txt文件,放在aix主机指定目录下。目录需要定时创建和删除的。这个目录是按日期来命名的,text文件也按日期来命名。请问怎么搞啊?能都写到存储过程里用job定时执行吗?我什么都不懂,请大家多多赐教,谢谢!
------解决方案--------------------
oracle可以在directory中实现这个功能
但是你的做法反过来会更好,即,用shell来执行存储过程,而不是用存储过程调用shell
操作系统中可以设置定时任务,比oracle的job更加稳定
------解决方案--------------------
给你一个大概思路吧 。 你自己需要去改造


创建一个back.sql 

vi /mnt/back.sql
=============文件内容开始===========================

spool mnt/xx.txt(这里存在问题,如何放在对应日期的文件中)
select t.bdz_id,t.bianma,t.mingzi from ms_biandianzhanaaa t;
spool off
exit
=============文件内容结束===========================

创建一个back.sh
vi /mnt/back.sh

=============文件内容开始===========================
#!/bin/sh
export ORACLE_SID=orcl
export ORACLE_HOME=/oracle/product/11.2.0/db_1
FILEDATE=`date +%Y%m%d`
FILEDATE2=`date +%Y%m%d -d '1 days ago'`

mkdir -p /mnt/$FILEDATE
rm -rf  /mnt/$FILEDATE2
sqlplus user/pwd@orcl  @/mnt/back.sql

rem shopping创建完毕
exit

=============文件内容结束===========================

chmod +x /mnt/back.sh

crontab -e 

0 12 * * * /mnt/back.sh
------解决方案--------------------
引用:
Quote: 引用:

ORACLE 10g 以上可以执行,但是建议使用 crontab

用什么呢?为何用crontab更好?


#7 的例子,就很具有代表性。

至于说,为什么 crontab 比 job(scheduler)好,这个更多的时候是个人的习惯:
1.  9i 以前的版本,只能使用 job ,它不能调用 OS 命令,10g 开始就可以调用 OS 命令,其实还是 shell ;
2. 要单独的使用 utl_file 的话,你得配置 directory ,无形中又多一个步骤;
3. job 这个东西,会不定的变成 breaken,你翻一下论坛,这样的例子不算少,问题比较难查找,当然了,你是高手的话,可以忽略这条);

  相关解决方案