oracle调用shell脚本
A. 求一份shell脚本,需求是:从Oracle数据库中提取一个表中的数据输出到文件,并且每条记录一行;
应用spool命令,大量数据汇出很方便,脚本内容大致如下:
--============================================
#!/bin/sh
#第一步
sqlplus -s 用户名/密码@服务名<<EOF
spool customers.sql --输出文件路径及名称
set trimspool on
set linesize 8000
set pagesize 50000
set newpage 1
set heading off
set term off
set feedback off
set sqlblankline off
SELECT A || '|+|' || --字段A
B || '|+|' || --字段B
C || '|+|' || --字段C
D || '|+|' || --字段D
E || '|+|' || --字段E
F || '|+|' || --字段F
G || '|+|' || --字段G
TO_CHAR(H,'YYYYMMDD HH:MM:SS') || '|+|' --字段H,可以使用函数
FROM CUSTOMERS;--表名
spool off
exit
EOF
--=======================
其中'|+|'为分隔符,也可以换成你说的逗号,即','。调用该脚本后,在根目录下生成customers.sql文件。
B. 写个shell脚本连接oracle数据库查询某表数据导出为txt文件,再发送到第三
1、简单的单列
#!/bin/sh
sqlplus 'user001/12345678'<< EOF
set define off
set hea off
spool vip1.txt
select username from ACCOUNT where LEVEL=7;
spool off
quit;
EOF
sed -i 's/[ ]*//g' ~/vip1.txt
sed -i '/^$/d' ~/vip1.txt
sed -i '1d' ~/vip1.txt
sed -i '$d' ~/vip1.txt
scp -P22 ~/vip1.txt [email protected]:/root
2、复杂的多列
#!/bin/sh
cid=$1;
today=`date +%Y-%m-%d-%H.%M`
ym=`date +%Y%m`
ymd=`date -d -1days +%Y%m%d`
last_ym=`date -d last-month +%Y%m`
next_ym=`date -d next-month +%Y%m`
file=chat_recorder_${cid}_20140707-11.xls
if [[ $1 == '' ]];then
echo "Usage: $0 company_id "
exit 0;
fi
sqlplus 'user002/12345678' << EOF
set linesize 200
set term off verify off feedback off pagesize 999
set markup html on entmap ON spool on preformat off
alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS';
spool ${file}
select a.*,b.* from recorder_${ym} a,t_${ym} b where a.company_id='$cid' and a.create_time between TO_DATE('2014-07-07 00:00:00', 'YYYY-MM-DD HH24:MI:SS') and TO_DATE('2014-07-12 00:00:00', 'YYYY-MM-DD HH24:MI:SS') and a.chat_id=b.chat_id order by b.chat_id ;
spool off
quit;
EOF
sed -i '/select/d' $file
zip -r ${file}.zip $file
scp -P22 ${file}.zip [email protected]:/opt
C. 求Oracle EBS 中,用Linux监控frmweb进程,杀掉CPU占用超过40%,占用时间超过30分钟的进程的shell脚本
psaux|grepfrmweb|awk-va="0:30"'{if($10>a&&$4>40){print$2}}'
psaux|awk-va="0:30"'$0~/frmweb/{if($10>a&&$4>40){print$2}}'
这个意思?目的是获取它的PID,如果是这个意思,你再判断获取的PID是否为空,再kill就行了
D. oracle存储过程中调用一个shell脚本,用于进行一些操作,已经赋权限,但是执行不了
shell的环境变量问题,你在shell内部的变量是获取不到外部执行结果的。
E. oracle存储过程调用unix上shell脚本不成功
echo "`date`运行存储过程 " >>$LOGFILE 2>&1
sqlplus -s [email=$USERNAME/$PASSWD@$HOSTNAME]$USERNAME/$PASSWD@$HOSTNAME[/email] <<EOF >>$LOGFILE 2>&1
exec ibss.p_gen_crm_to_ocs('${day_s}000000','${DATE}000000');
EOF
F. 请教如何在oracle的存储过程中执行一个shell脚本
你可以把执行过程和执行shell脚本写在一个shell里
例如
你的shell逻辑
执行存储过程
继续你的shell逻辑,执行脚本。