Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2529094
  • 博文数量: 308
  • 博客积分: 5547
  • 博客等级: 大校
  • 技术积分: 3782
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-24 09:47
个人简介

hello world.

文章分类

全部博文(308)

分类: AIX

2014-12-31 10:57:26

    在工作中,经常进行需要使用shell调用oracle数据库的存储过程,并将存储过程的结果数据返回到shell。或者将shell的数据,通过入参传递给sqlplus。经过自己的摸索,找到了里面的诀窍,写到blog,供大家参考使用。
    比如利用shell调用oracle数据库的存储过程。shell代码如下:

点击(此处)折叠或打开

  1. #!/bin/sh

  2. #程序描述:分域分批,进行短信发送程序
  3. #作者:    程晓鹏
  4. #日期:    2014.9.17

  5. SMS_HOME=/your/path; #shell程序主目录
  6. SMS_DEAL_NUM=4000; #统计库一次处理的数据量

  7. #执行统计一库,存储过程,进行数据的处理,并将数据,根据地市编码
  8. #将数据存放在不同用户下的不同表中,方便进行下一步的处理
  9. function execProcedure
  10. {
  11.   dbconfig_file=$SMS_HOME/DB_INFO.txt; #配置文件相关信息文件路径
  12.   exec_key=MDDMS; #查询的键值
  13.   username=`awk -F "\t" '$1==CRM {print $3}' CRM=$exec_key $dbconfig_file`; #用户名
  14.   password=`awk -F "\t" '$1==CRM {print $4}' CRM=$exec_key $dbconfig_file`; #密码
  15.   tns=`awk -F "\t" '$1==CRM {print $5}' CRM=$exec_key $dbconfig_file`; #TNS名称

  16.   . ~/.peng_profile; #加载自定义的proifle(因系统中用户默认的.profile,在登陆时会自动加上[YOU HAVE NEW MAIL],因此加载自定义的profile,将其输出的[YOU HAVE NEW MAIL]去掉)
  17.   cmd=`sqlplus -s $username/$password@$tns <<EOF
  18.     set heading off;
  19.     set echo off;
  20.     set feedback off;
  21.     set linesize 5000;

  22.     --执行存储过程,进行数据处理
  23.     var on_returntext varchar2(2000);
  24.     var on_return number;
  25.     exec $username.P_SMS_INFO($SMS_DEAL_NUM, :on_returntext, :on_return);
  26.     commit;
  27.     select :on_return||:on_returntext from dual;
  28.     exit;
  29.   EOF`;

  30.   result=`echo "$cmd" | awk '{{printf"%s",$0}}'`; #去除回车换行空行
  31.   echo "$result";
  32. }
存储过程代码如下:

点击(此处)折叠或打开

  1. create or replace procedure P_SMS_INFO(deal_number in number,
  2.                                             on_returntext out varchar2,
  3.                                             on_return out number) is
  4. begin
  5. --存储过程代码
  6. end P_SMS_INFO;


阅读(4267) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~