Network Security Internet Technology Development Database Servers Mobile Phone Android Software Apple Software Computer Software News IT Information

In addition to Weibo, there is also WeChat

Please pay attention

WeChat public account

Shulou

The Linux/Unix shell parameter is passed to the SQL script

2025-01-21 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Servers >

Share

Shulou(Shulou.com)06/02 Report--

在数据库运维的过程中,Shell 脚本在很大程度上为运维提供了极大的便利性。而shell 脚本参数作为变量传递给SQL以及SQL脚本也是DBA经常碰到的情形之一。本文主要讨论了如何将shell脚本的参数传递到SQL脚本之中并执行SQL查询。

1、启动sqlplus时执行脚本并传递参数

robin@SZDB:~/dba_scripts/custom/awr> more tmp.sh

#!/bin/bash

# ----------------------------------------------

# Set environment here

# Author : Robinson Cheng

# ----------------------------------------------

if [ -f ~/.bash_profile ]; then

. ~/.bash_profile

fi

if [ -z "${1}" ] || [ -z "${2}" ] || [ -z "${3}" ] ;then

echo "Usage: "

echo " `basename $0` "

read -p "please input begin ORACLE_SID:" ORACLE_SID

read -p "please input begin date and time(e.g. yyyymmddhh34):" begin_date

read -p "please input end date and time(e.g. yyyymmddhh34):" end_date

else

ORACLE_SID=${1}

begin_date=${2}

end_date=${3}

fi

export ORACLE_SID begin_date end_date

#Method 1: pass the parameter to script directly after script name

sqlplus -S gx_adm/gx_adm @/users/robin/dba_scripts/custom/awr/tmp.sql $begin_date $end_date

exit

robin@SZDB:~/dba_scripts/custom/awr> more tmp.sql

SELECT snap_id, dbid, snap_level

FROM dba_hist_snapshot

WHERE TO_CHAR (begin_interval_time, 'yyyymmddhh34') = '&1'

AND TO_CHAR (end_interval_time, 'yyyymmddhh34') = '&2';

exit;

2、在SQL提示符下传递参数

robin@SZDB:~/dba_scripts/custom/awr> more tmp2.sh

#!/bin/bash

# ----------------------------------------------

# Set environment here

# Author : Robinson Cheng

# ----------------------------------------------

if [ -f ~/.bash_profile ]; then

. ~/.bash_profile

fi

if [ -z "${1}" ] || [ -z "${2}" ] || [ -z "${3}" ] ;then

echo "Usage: "

echo " `basename $0` "

read -p "please input begin ORACLE_SID:" ORACLE_SID

read -p "please input begin date and time(e.g. yyyymmddhh34):" begin_date

read -p "please input end date and time(e.g. yyyymmddhh34):" end_date

else

ORACLE_SID=${1}

begin_date=${2}

end_date=${3}

fi

export ORACLE_SID begin_date end_date

#Method 2: pass the parameter in SQL prompt. Using the same method with method 1

sqlplus -S " / as sysdba" ./tmp2.sh MMBOTST 2013030709 2013030710

SNAP_ID DBID SNAP_LEVEL

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

36262 3509254984 1

robin@SZDB:~/dba_scripts/custom/awr> ./tmp3.sh MMBOTST 2013030710 2013030711

"variable value for begin_date is: 2013030710"

"variable value for end_date id : 2013030711"

SNAP_ID DBID SNAP_LEVEL

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

36263 3509254984 1

5、小结

a、本文主要描述了将shell的参数传递给SQL脚本

b、方式1的用法是直接将shell变量跟在脚本之后, sqlplus userid/pwd @script_name $para1 $para2

c、方式2是启动sqlplus后在SQL提示符下来传递参数, SQL>@script_name $para1 $para2

d、方式3则是将shell变量的值先传递给define定义的变量,然后再传递给SQL脚本 SQL>@script_name var1 var2

e、注意方式3中SQL脚本的替代变量与define定义的变量名相同

oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html

Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.

Views: 0

*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.

Share To

Servers

Wechat

© 2024 shulou.com SLNews company. All rights reserved.

12
Report