有时候我们可能会需要在Shell脚本中执行SELECT语句,并将结果赋值给一个变量,对于这样的情形,我们可以用以下的方法来达到目的。
	#!/bin/ksh
	#
	# Created : 2015.05.25
	# Updated : 2015.05.25
	# Author : Jet Chenxi Zhang
	# Description : Get SELECT result in Shell
	# Variable Definitions #
	Oracle_SID=audtest
	ORACLE_HOME=/app/oracle/product/database/11.2.0/db_1
	PATH=$PATH:$ORACLE_HOME/bin
	DBNAME=
	 
	# Get Database name by quering v$database #
	DBNMAE=`
	sqlplus -s /nolog <<EOF
	set echo off feedback off heading off underline off;
	conn / as sysdba;
	select name from v\\$database;
	exit;
	EOF`
	 
	echo "Database name: "$DBNMAE
	
	如上代码,可以将获取Database Name,执行结果如下:
	[oracle@hxddcx02 ~]$ ./query_dbname.sh
	Database name: AUDTEST
	
	可以看到SELECT的结果已被正确赋值给Shell的变量。如果SELECT中有多个列的值,也可以用此方法,只是需要将结果进行分拆,如用awk:
	#!/bin/ksh
	#
	# Created : 2015.05.25
	# Updated : 2015.05.25
	# Author : Jet Chenxi Zhang
	# Description : Get SELECT results in Shell
	# Variable Definitions #
	ORACLE_SID=audtest
	ORACLE_HOME=/app/oracle/product/database/11.2.0/db_1
	PATH=$PATH:$ORACLE_HOME/bin
	QUERYRES=
	DBID=
	DBNAME=
	 
	# Get Database name by quering v$database #
	QUERYRES=`
	sqlplus -s /nolog <<EOF
	set echo off feedback off heading off underline off;
	conn / as sysdba;
	select dbid, name from v\\$database;
	exit;
	EOF`
	 
	DBID=`echo $QUERYRES | awk -F' ' '{print $1}'`
	DBNAME=`echo $QUERYRES | awk -F' ' '{print $2}'`
	echo "Database ID: "$DBID
	echo "Database name: "$DBNAME
	
	运行结果如下:
	[oracle@hxddcx02 ~]$ ./query_dbname2.sh
	Database ID: 811711272
	Database name: AUDTEST
	
	Linux效率优于select的epoll模型:http://www.linuxdiyf.com/linux/9685.html
Linux下select()中的timeout的设置与不设置问题:http://www.linuxdiyf.com/linux/7550.html
Linux的I/O多路转接模型和select():http://www.linuxdiyf.com/linux/5992.html
百度短网址转换Shell脚本:http://www.linuxdiyf.com/linux/11163.html
Shell脚本基础知识:http://www.linuxdiyf.com/linux/11918.html

