在shell脚本中通过调用sqlplus来执行SQL及一些数据库命令。下面来介绍一下常用的参数选项(现学现卖j_0063.gif

  1)-S

  sqlplus -S/nolog

  该参数选项登录时没有提示信息输出


  2)EOF

  EOF通常与<<一起使用,表示把后面的输入作为子命令或是shell的输入,直到再次遇到EOF结束该输入。下面,我们来看一个简单的数据库的启动和关闭脚本:

  [.....]cat startup.sh

  #!/bin/bash

  #“>”表示把当前输入的结果使用文件*.log存储起来

  sqlplus -S/nolog>startlog.log<

  connect sys/sys as sysdba

  startup;

  exit

  EOF

  exit;

  [.....]cat shutdown.sh

  #!?bin/bash

  sqlplus -S/nolog>shutlog.log<

  conn sys/sys as sysdba

  shutdown immediate;

  quit

  EOF

  exit;

  当我们不使用文件来记录日志时,它会直接输出到屏幕上。


  3)下面,我们来看一个sqlplus与shell交互的例子:

  [.....]$ cat test02.sh

  #!/bin/ksh

  read -p "Please input emplyees id>" emp_id

  name=`sqlplus -S /nolog <

  set heading off

  set feedback off

  conn hr/hr

  select first_name || ' ' || last_name emp_name

  from employees where employee_id = '$emp_id';

  exit

  EOF`

  if [ "$name" == "" ]; then

        echo "No data found";

  else

        echo "$name"

  fi

  exit;

  [.....]$ sh test02.sh

  Please input emplyees id>100

  Steven King

  [.....]$ sh test02.sh

  Please input emplyees id>1

  No data found

  [.....]$

  该程序的思想是,用户输入一个employee_id并显示该ID对应的员工姓名。注意上述的一个符号,该符号不是引号,是数字键1旁边的那个符号。


  4)Sqlplus返回值给Shell

  [oracle@localhost oracle_script]$ cattest3.sh

  #!/bin/bash

  source ~/.bash_profile

  qlplus -S /nolog > result.log<

  set heading off

  feedback off

  pagesize 0

  verify off 

  echo off

  numwidth 4

  conn scott/tiger

  col coun new_value v_coun

  select count(*) coun from emp;

  select * from emp where empno=7369;

  exit v_coun

  EOF

  VALUE="$?"

  echo "The number of rows is$VALUE."

  该sqlplus使用 col  列名 new_value 变量名 定义了变量并带参数exit, 将变量v_coun返回赋给了shell的$?

备注:NEW_VALUE通常的使用方法为:

  column column_name new_value var_name

       new_value是将所获得的列值赋予到变量名,然后该变量名可以参与后续处理


 5)sqlplus文件操作命令

  1.spool将屏幕显示及查询结果输入到指定文本文件中

     spool d:\1.txt

  select * from emp;

  spool off

  2.执行和编辑指定位置的SQL脚本

    start d:\test.sql

    @ d:\test.sql

    执行当前目录下的SQL脚本,即:登陆SQLPLUS时的目录,示例如下:

    [oracle@bys001 oradiag_oracle]$ ls
    a.sql  diag
    [oracle@bys001 oradiag_oracle]$ cat a.sql 
    select sysdate from dual;
    [oracle@bys001 oradiag_oracle]$ sqlplus bys/bys
    BYS@bys1>@a.sql
    SYSDATE
     --------
    05-SEP-13


   编辑指定的SQL脚本

   edit d:\test.sql

    3.&替代变量  如:

      select * from emp where empno=&;  

      会提示输入EMPNO的值。交互式

 4.将当前SQL缓冲构内SQL语句保存到指定文件

      save d:\test2.sql

      将文件中SQL语句调入SQLPLUS缓冲区

      get d:\test2.sql

      显示缓冲区内语句

      list

      注意:单引号和双引号内大小写敏感。

       关键字不能缩写,也不能跨行书写,单引号内也不跨行写。

      每个子句是一行。

      字符串用单引,列别名用双引。

      标点符号要用英文标点,中文出错。


  6)SQLPLUS中显示设置-列长、分页

  1.更改分页、行宽设置

       show linesize

       show pagesize

       set linesize 100       ——默认80字符

       set pagesize 20      ——默认14行

       SQL> set numwidth     38好像设置数字型的默认显示宽度 set num 4 ,所以显示会有变 ## 

       2.设置指定显示的列名的宽度--列是字符及数字

         col username format a20     设置 username列的列宽是20个字符-----字符列宽 

         col username for a4 

         BYS@bys1>col aa format 99,999,999      设置abc列的列宽是8位,并用逗号隔开---数字列宽