在shell脚本中通过调用sqlplus来执行SQL及一些数据库命令。下面来介绍一下常用的参数选项(现学现卖)
1)-S
sqlplus -S/nolog
该参数选项登录时没有提示信息输出
2)EOF
EOF通常与<<一起使用,表示把后面的输入作为子命令或是shell的输入,直到再次遇到EOF结束该输入。下面,我们来看一个简单的数据库的启动和关闭脚本:
[.....]cat startup.sh
#!/bin/bash
#“>”表示把当前输入的结果使用文件*.log存储起来
sqlplus -S/nolog>startlog.log<<EOF
connect sys/sys as sysdba
startup;
exit
EOF
exit;
[.....]cat shutdown.sh
#!?bin/bash
sqlplus -S/nolog>shutlog.log<<EOF
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 <<EOF
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
[[email protected] oracle_script]$ cattest3.sh
#!/bin/bash
source ~/.bash_profile
qlplus -S /nolog > result.log<<EOF
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时的目录,示例如下:
[[email protected] oradiag_oracle]$ ls
a.sql diag
[[email protected] oradiag_oracle]$ cat a.sql
select sysdate from dual;
[[email protected] oradiag_oracle]$ sqlplus bys/bys
[email protected]>@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
[email protected]>col aa format 99,999,999 设置abc列的列宽是8位,并用逗号隔开---数字列宽