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

hello world.

文章分类

全部博文(308)

分类: AIX

2016-09-05 16:29:24

    在工作中,通过shell脚本调用oracle存储过程,进行数据的处理。今日在工作中发现,在加载短信内容时,如果短信内容中含有'&'字符串时,在插入的数据中,和原始内容不同。
    经过定位oracle数据库,在外部调用时如果内容中含有'&'会被转义。经过尝试采用在调用存储过程时,不采用shell传到参数到oracle存储过程入参。变更为将短信内容内容,进行转义后。做成一个被oracle的sqlplus调用的文件去调用,即可修复此bug. shell脚本如下:

点击(此处)折叠或打开

  1. #!/bin/sh

  2. SMS_HOME=/ngbss/mddms/mysms; #程序主目录

  3. #加载短信内容(对于短信内容中,含有'&',进行特殊处理,用转义符替换,做成文件,再执行文件,避免产生bug)
  4. function execLoadSmsData2
  5. {
  6. dbconfig_file=$SMS_HOME/DB_INFO.txt; #配置文件相关信息文件路径
  7. exec_key="MDDMS"; #查询的键值
  8. exec_proc_name="P_SMS_LoadData_test"; #调用存储过程名称
  9. username=`awk -F "\t" '$1==CRM {print $3}' CRM=$exec_key $dbconfig_file`; #用户名
  10. password=`awk -F "\t" '$1==CRM {print $4}' CRM=$exec_key $dbconfig_file`; #密码
  11. tns=`awk -F "\t" '$1==CRM {print $5}' CRM=$exec_key $dbconfig_file`; #TNS名称
  12. v_sms_content="尊敬的客户您好,感谢您参与联通公司体验活动!我们在细致整理您的问卷时,特别希望您能在一周内完善部分内容,让我们更了解您的体验感受。您的问卷十分重要,我们和流量大奖等着您,问卷修改请登录,感谢您的理解与支持。【河南联通】";#要填充的短信内容

  13. str_target_file="/ngbss/mddms/mysms/sms_proce.sql"; #调用存储过程的路径
  14. build_SmsProc_SqlFile "$v_sms_content" "$str_target_file"; #构建文件

  15. . ~/.peng_profile; #加载操作系统的proifle
  16. cmd=`sqlplus -s $username/$password@$tns <
  17. @$str_target_file;
  18. EOF`;

  19. result=`echo "$cmd" | awk '{{printf"%s",$0}}'`; #去除回车换行空行
  20. echo "$result";
  21. }

  22. #构建执行短信加载数据,调用存储过程,所需的sql文件
  23. #参数1:短信内容
  24. #参数2:生产文件路径
  25. function build_SmsProc_SqlFile
  26. {
  27. var_sms_content="$1";
  28. var_save_path="$2";
  29. #因oracle数据库对'&'会进行特殊转义,因此使用chr(38)进行替换 程晓鹏 2016.09.05 update
  30. var_new_content=`echo "$var_sms_content" | sed  "s/'/''/g" | sed "s/&/'||chr(38)||'/g" | sed "s/^/'/g" | sed "s/$/'/g" `;
  31. echo "
  32. set heading off;
  33. set echo off;
  34. set feedback off;
  35. set linesize 5000;

  36. --执行存储过程,进行数据处理
  37. var on_returntext varchar2(2000);
  38. var on_return number;
  39. exec uop_itf1.P_SMS_LoadData_test(${var_new_content}, :on_returntext, :on_return);
  40. commit;
  41. select :on_returntext from dual;
  42. exit;
  43. " > $var_save_path;
  44. }

  45. execLoadSmsData2;


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