zoukankan      html  css  js  c++  java
  • sqlplus与shell互相传值的几种情况

    sqlplus与shell互相传值的几种情况

    情况一:在shell中最简单的调用sqlplus

    $cat test.sh

    #!/bin/sh

    sqlplus oracle/oracle@oracle>file.log <<EOF

    select * from test;

    exit

    EOF  #注意EOF要顶格写

    $sh test.sh

    $cat file.log

    --省略若干系统提示信息-------

    SQL>

    EMPNO   EMPNAME          SAL      DEPTNO

    -----   -------------    -----    ------

    10002   Frank Naude      500      20

    10001   Scott Tiger      1000     40

    --省略若干系统提示信息-------

    将执行过程重定向入文件file.log,可通过cat file.log查看

    情况二:直接将sqlplus的值赋值给shell变量

    $cat test.sh

    #!/bin/sh

    # 将sqlplus的结果输出给变量VALUE

    # set命令的使用可查询手册

    #注意shell中等号两边不能有空格

    VALUE=`sqlplus -S /nolog <<EOF

    set heading off feedback off pagesize 0 verify off echo off

    conn oracle/oracle@oracle

    select count(*) from test;

    exit

    EOF`

    #输出记录数

    echo "The number of rows is $VALUE."

    $sh test.sh

    The number of rows is    2.

    显示结果正确,表test共2条记录

    情况三:间接将sqlplus的值赋值给shell变量

    $cat test.sh

    #!/bin/sh

    #利用COL column NEW_VALUE variable定义变量

    #sqlplus执行完后最后返回值为v_coun

    #利用$?将最后返回值赋值给VALUE,也即为test的记录数

    sqlplus -S /nolog <<EOF

    set heading off feedback off pagesize 0 verify off echo off

    conn oracle/oracle@oracle

    col coun new_value v_coun

    select count(*) coun from test;

    exit v_coun

    EOF

    VALUE="$?"

    echo "The number of rows is $VALUE."

    $sh test.sh

             2

    The number of rows is 2.

    脚本执行结果中第一个2为sqlplus返回值,第二个2为VALUE的值

    情况四:将shell变量的值传给sqlplus使用

    $cat test.sh

    #!/bin/sh

    #sqlplus引用shell变量TABLENAME的值

    #注意赋值时,等号两边不能有空格

    TABLENAME="test"

    sqlplus -S oracle/oracle@oracle <<EOF

    select * from ${TABLENAME};

    exit

    $sh test.sh

    EMPNO EMPNAME                                                   SAL DEPTNO

    ----- -------------------------------------------------- ---------- ------

    10002 Frank Naude                                               500 20

    10001 Scott Tiger                                              1000 40

    脚本执行结果为:select * from test;的结果

    情况五:通过交互方式手工输入shell变量值

    $cat test.sh

    #!/bin/sh

    #将手工输入变量值读入变量TABLENAME

    echo  "Enter the tablename you want to select:"

    read TABLENAME

    sqlplus -S oracle/oracle@oracle <<EOF

    select * from ${TABLENAME};

    exit

    $sh test.sh

    #按提示输入表名test

    Enter the tablename you want to select:

    test

    EMPNO EMPNAME                                                   SAL DEPTNO

    ----- -------------------------------------------------- ---------- ------

    10002 Frank Naude                                               500 20

    10001 Scott Tiger                                              1000 40

    脚本执行结果为select * from test的执行结果

    情况六:通过重定向文件方式,并生成日志

    source ~/.bash_profile

    sqlplus test/test@orcl < /home/test/test.sql >>/home/log/test.log

    echo "end-------------------"

  • 相关阅读:
    Go语言学习之方法和接口
    Go语言学习之for循环
    Go语言学习之结构体
    Go语言学习之Map
    Go语言学习之值传递和引用传递解释And Go语言指针
    GO语言学习之切片(slice)
    GO语言学习之多维数组
    GO语言学习之数组
    GO语言学习之常用内置函数
    Oracle ORA28040报错解决
  • 原文地址:https://www.cnblogs.com/shengs/p/4814666.html
Copyright © 2011-2022 走看看