[oracle@hb shell_test]$ cat echo_time #!/bin/sh
⼀.最简单的调⽤sqlplus
sqlplus -S \"sys/unimas as sysdba\" << !
select to_char(sysdate,'yyyy-mm-dd') today from dual;exit;!
[oracle@hb shell_test]$ ./echo_time TODAY----------2011-03-21
-S 是silent mode,不输出类似“SQL>”,连接数据库,关闭数据库之类的信息。
eof可以是任何字符串 ⽐如\"laldf\"那么当你输⼊单独⼀⾏laldf时\"shell认为输⼊结束,但是必须表⽰块开始必须使⽤<<;开始和结束要匹配这个符号“<<”后⾯的内容举例⼦:
[oracle@hb shell_test]$ sqlplus -s \"sys/unimas as sysdba\" << abc> select to_char(sysdate,'yyyy-mm-dd') today from dual;> exit;> abcTODAY----------2011-03-21
⼆.sqlplus的结果传递给shell的⽅法⼀
[oracle@hb shell_test]$ cat test2.sh #!/bin/bash
VALUE=`sqlplus -S \"test/unimas\" << !set heading offset feedback offset pagesize 0set verify offset echo off
select to_char(sysdate,'yyyy-mm-dd') today from dual;exit!`
echo $VALUE
if [ -n \"$VALUE\" ]; then
echo \"The rows is $VALUE\"exit 0else
echo \"There is no row\"fi
三.sqlplus的结果传递给shell的⽅法⼆[oracle@hb shell_test]$ cat test1.sh #!/bin/bash
sqlplus -S \"test/unimas\" << !set heading offset feedback offset pagesize 0set verify offset echo off
col coun new_value v_coun
select count(*) coun from lesson;exit v_coun!
VALUE=\"$?\"
echo \"show row:$VALUE\"
col coun new_value v_coun v_coun为number类型。因为exit 只能返回数值类型。四.把shell参数传递给sqlplus#!/bin/basht_id=\"$1\"
sqlplus -S \"test/unimas\" << !set heading offset feedback offset pagesize 0
set verify offset echo off
select teachername from teacher where id=$t_id;exit!
五.sqlplus的结果存储在⽂件中#!/bin/sh
sqlplus -S \"test/unimas\"< ####################################################################################################################################查看调度系统状态脚本:#!/bin/sh if [[ -z \"$1\" ]] || [[ \"$1\" -ne 0 && \"$1\" -ne 2 ]] #使⽤[[ ]] 进⾏逻辑短路操作then echo \"Please input your parameter: query status[0,2]!\" exitfi #for buname in cnlog enlog ItLog JrLog AuLog InnerLogfor buname in cnlog enlog do sqlplus -S 'etl/etl@dw_testdb' << abc #使⽤ << EOF⽅式输⼊信息 set line 155 set pages 9999 SELECT /*+ PARALLEL(a,4) */ * FROM $buname.hla_job_rec a where status = $1; exitabcdone 在linux下⽤shell执⾏oracle的存储过程 #### 函数 #### 说 明:执⾏oracle存储过程 #### 输⼊参数:{数据库tns}{数据库⽤户名}{数据库密码}{存储过程名}{批处理⽇期} #### 输出参数:存储过程执⾏结果 function exe_proc { oracle_sid=$1 user_name=$2 user_pwd=$3 proc_name=$4 etl_date=$5 error_code=` sqlplus -S -L /nolog< var ora_return_code number; call $proc_name($etl_date,:ora_return_code); select :ora_return_code from dual; quit EOF` echo $error_code } 问题:脚本内调⽤存储过程,脚本直接执⾏没问题,使⽤crontab 执⾏脚本存储过程未执⾏ 原因:缺少oracle环境变量 解决:在shell脚本⾥添加oracle的环境变量#!/bin/sh PATH=$PATH:$HOME/bin //环境变量 export ORACLE_BASE=/home/oracle export ORACLE_HOME=/home/oracle/product/11.2.0/clientexport PATH=$PATH:$ORACLE_HOME/binszCfgFile=P_BROADBAND_YUYUEINFO_SMS.sqlcat< Begin P_BROADBAND_YUYUEINFO_SMS();end;/exitEndCfg sqlplus -s uop_uec/D_5WI5KCCI0Z@nguecdb @$szCfgFilerm $szCfgFile 因篇幅问题不能全部显示,请点此查看更多更全内容