标签为'Oracle'的日志

AIX下自动执行Oracle中的sql语句

在日常的工作中,我们经常要使用crontab计划自动执行shell程序。例如:数据备份、日志清理、机器重启等等。前些时候,有朋友问:为什么使用crontab自动执行oracle的sql语句不能实现。下面我就讲述一下如何自动执行oracle的sql语句。

首先,建立一个sql文件,并且在sqlplus中测试,手工运行这个sql文件看是否能够成功:
test.sql文件内容:
select count(*) from test;
然后进入sqlplus:
sqlplus  scott/tiger
运行test.sql文件:
SQL>start test.sql
如果显示了sql语句的结果,则表示此sql文件能够正常执行。
其次,我们建立一个shell文件,要注意的是这个shell文件中必须将oracle的初始环境设置加上去,才能让unix系统能够执行sqlplus程序,下面给出一个shell例子(文件名test.sh):

ORACLE_OWNER=oracle
ORACLE_TERM=vt100
DISPLAY=`hostname`:0.0
ORACLE_SID=test
ORACLE_USER=$HOME
ORACLE_BASE=/disk01/oracle
ORACLE_HOME=$ORACLE_BASE/product/8.1.7
ORACLE_DOC=$ORACLE_HOME/doc
NLS_LANG=AMERICAN_AMERICA.ZHS16CGB231280
ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/ccs/lib
PATH=$PATH:$ORACLE_HOME/bin:/bin:/usr/ccs/bin:/usr/local/bin
TEMP=/tmp
TMPDIR=/tmp
export ORACLE_OWNER ORACLE_TERM DISPLAY ORACLE_SID ORACLE_USER ORACLE_BASE ORACLE_HOME ORACLE_DOC NLS_LANG ORA_NLS33 LD_LIBRARY_PATH PATH TEMP TMPDIR

cd /usr/test/sql
/disk01/oracle/product/8.1.7/bin/sqlplus scott/tiger <<EOF
@ test.sql
exit
EOF

最后,我们建立一个crontab计划,让unix定期执行:
00 20 * * * /usr/test/sql/test.sh
就此,一个自动执行sql语句的crontab就建成了。大家可以通过mail检查crontab的执行情况。(via)(Crontab实例)(Crontab 笔记

标签: , , ,

Oracle中导入TXT并进行处理

Oracle数据库工作中常会遇到将TXT文件导入到Oracle中进行处理的问题,这样可以对TXT中数据进行分析处理。下面就将完整的导入及处理方法列出,当做参照吧。

大多来自其他部门的数据都是以.xls形式存在的,首先我们需要将其中的列数据进行处理,存入TXT中。

可以直接将这列数据复制到Notepad++之类的文本编辑器中,这样的目的是为了防止产生DOS下的换行符的存在,否则在导入Oracle数据库的时候不会成功。

复制进来的这列数据的最后一行总会是空行,需要将其删除。

生成一个TXT文件,我们生成的是1.txt。

现在将1.txt通过FTP上传到Linux你所使用的脚本目录下,以方便我们的导入。

在导入的时候我们需要使用两个程序,一个是导入脚本daoru.sh一个是导入控制文件daoru.ctl。上图为导入脚本文件的全部程序,我们导入的列只有一个,所以只需要建立一列TABLE PHONE_NO,就可满足我们的需求,若是列数更多,可以自行添加。

上图为控制文件daoru.ctl。我们需要做的是执行daoru.sh脚本,以生成临时表hh_tmp1,并插入一列PHONE_NO char(11)的字段,手机号码为11位,我们取char(11)即可。

执行之后,很快,我们的1.txt文件已经导入到了数据库的临时表hh_tmp1中,由于在daoru.sh脚本中,我们已经对导入的数据进行了剔除重复的操作,所以下面只要按照我们的需要来提取出来我们想要的数据即可。

我们使用的是PLSQL Developer,PLSQL Developer所登录的数据库用户必须与你在脚本中所使用的数据库用户一致,通过于原有数据库表进行连接,以实现获取我们所需要的数据。

提取出两列分别为PHONE_NO,BELONG_CODE,其中BELONG_CODE升序排列,以区分来自区域。

还有一句就是想把1.txt转换为excel格式,然后在windows打开。但是在linux环境下执行的语句。

cat exp_imp_report.list|sed 's/|/\t/g' >1.xls

标签: , ,

关于

广告 125×125

最新日志

本月最热日志

友情链接

广告 300×250