Linux/Unix shell sql 之间传递变量

时间:2023-12-22 17:40:02

灵活结合Linux/Unix Shell 与SQL 之间的变量传输,极大程度的提高了DBA的工作效率,本文针对Linux/Unix shell sql 之间传递变量给出几个简单的示例以供参考。

Linux/Unix 下调用SQL,RAMN 请参考:Linux/Unix shell 脚本中调用SQL,RMAN脚本

一、示例

  1. 1、shell变量接受sql返回值之方式一
  2. oracle@SZDB:~> more ./retval.sh
  3. #!/bin/bash
  4. RETVAL=`sqlplus -silent scott/tiger <<EOF
  5. SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
  6. SELECT * FROM emp WHERE ename='SCOTT';
  7. EXIT;
  8. EOF`
  9. if [ -z "$RETVAL" ]; then
  10. echo "No rows returned from database"
  11. exit 0
  12. else
  13. echo $RETVAL
  14. fi
  15. oracle@SZDB:~> chmod u+x retval.sh
  16. oracle@SZDB:~> ./retval.sh
  17. 7788 SCOTT ANALYST 7566 19-APR-87 34171.88 20
  18. 2、shell变量接受sql返回值之方式二
  19. oracle@SZDB:~> more ./retval_2.sh
  20. #!/bin/bash
  21. # Author : Robinson Cheng
  22. # Blog   : http://blog.csdn.net/robinson_0612
  23. sqlplus -S "scott/tiger" <<EOF
  24. SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
  25. col cnt new_value v_cnt
  26. SELECT count(*) cnt FROM emp WHERE deptno=10;
  27. exit v_cnt
  28. EOF
  29. VALUE="$?"
  30. echo "show rows for deptno 10:$VALUE"
  31. 3、将shell变量作为参数传递给sql脚本
  32. oracle@SZDB:~> more ./retval_3.sh
  33. #!/bin/bash
  34. v_empno="$1"
  35. sqlplus -S "scott/tiger" <<EOF
  36. SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
  37. SELECT ename FROM emp WHERE empno=$v_empno;
  38. exit
  39. EOF
  40. exit
  41. oracle@SZDB:~> ./retval_3.sh 7788
  42. SCOTT
  43. 转:http://blog.csdn.net/leshami/article/details/7978179