Oracle shell调用SQL操作DB

操作Oracle数据库可以使用sqlplus连接数据库之后,再交互式的使用数据库。另一种非交互的方式就是通过shell直接执行sql命令,可以直接在shell CLI端口执行命令,或者是通过shell脚本的方式。从sql命令的输入方式上,这种非交互的方式又可以分为两种,一种是命令行直接输入,另一种是sql文件输入。

1. 命令行直接输入方式


这种方式就是把要执行的命令直接传给sqlplus,-S是指silent模式。注意此处的反斜杠转义。

  1. sqlplus -S '/ as sysdba' << EOF
  2. set pagesize 0 feedback off verify off heading off echo off
  3. SELECT value FROM v\$parameter WHERE name = 'background_dump_dest';
  4. exit
  5. EOF

使用脚本的话,如下所示,注意反斜杠。

  1. if test $# -lt 1
  2. then
  3. echo You must pass a SID
  4. exit
  5. fi
  6. ORACLE_SID=$1; export ORACLE_SID
  7. DUMP_DIR=`sqlplus -S '/ as sysdba' << EOF
  8. set pagesize 0 feedback off verify off heading off echo off
  9. SELECT value FROM v\\$parameter WHERE name = 'background_dump_dest';
  10. exit
  11. EOF`
  12. echo ${DUMP_DIR}

 

2. 通过文件输入方式


这种方式是先把sql语句存储在一个文件中,这时就不需要反斜杠了,而且输入文件必须要以.sql为后缀。

  1. [oracle@node ~]$ cat /tmp/sqllines.sql
  2. set pagesize 0 feedback off verify off heading off echo off
  3. SELECT value FROM v$parameter WHERE name = 'background_dump_dest';
  4. exit
  5. [oracle@node ~]$ sqlplus -s "/ as sysdba" @/tmp/sqllines
  6. /u01/app/oracle/diag/rdbms/live/live/trace

这种方式同样可以写成一个shell脚本。

  1. [oracle@node ~]$ cat /tmp/sql
  2. if test $# -lt 1
  3. then
  4. echo You must pass a SID
  5. exit
  6. fi
  7. ORACLE_SID=$1; export ORACLE_SID
  8. echo "
  9. set pagesize 0 feedback off verify off heading off echo off
  10. SELECT value FROM v\$parameter WHERE name = 'background_dump_dest';
  11. exit
  12. ">/tmp/plsql_scr.sql
  13. # --------------------------------
  14. # Execute plsql script
  15. # --------------------------------
  16. if [ -s /tmp/plsql_scr.sql ]; then
  17. echo -e "Running SQL script to find out bdump directory... \n"
  18. $ORACLE_HOME/bin/sqlplus -s "/ as sysdba" @/tmp/plsql_scr.sql >/tmp/plsql_scr_result.log
  19. fi
  20. echo " Check the reslut "
  21. echo "------------------------"
  22. cat /tmp/plsql_scr_result.log
  23. exit

 

相关推荐