您的当前位置:首页正文

shell调用sqlplus查询oracle

2023-06-12 来源:钮旅网
shell调⽤sqlplus查询oracle

[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\"<SELECT * from teacher;spool offexit;EOF

####################################################################################################################################查看调度系统状态脚本:#!/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<connect $user_pwd/$user_pwd@$oracle_sid set termout off; set echo off; set feedback off; set heading off; set pagesize 0;

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<$szCfgFile

Begin

P_BROADBAND_YUYUEINFO_SMS();end;/exitEndCfg

sqlplus -s uop_uec/D_5WI5KCCI0Z@nguecdb @$szCfgFilerm $szCfgFile

因篇幅问题不能全部显示,请点此查看更多更全内容