Linux/Unix shell 參數傳遞到SQL指令碼

來源:互聯網
上載者:User

在資料庫營運的過程中,Shell 指令碼在很大程度上為營運提供了極大的便利性。而shell 指令碼參數作為變數傳遞給SQL以及SQL指令碼也是DBA經常碰到的情形之一。本文主要討論了如何將shell指令碼的參數傳遞到SQL指令碼之中並執行SQL查詢。

有關shell與SQL之間的變數傳遞,請參考:  Linux/Unix shell sql 之間傳遞變數

1、啟動sqlplus時執行指令碼並傳遞參數

robin@SZDB:~/dba_scripts/custom/awr> more tmp.sh
#!/bin/bash

# ----------------------------------------------
#  Set environment here
#  Author : Robinson Cheng
#  Blog  : http://blog.csdn.net/robinson-0612
# ----------------------------------------------

if [ -f ~/.bash_profile ]; then
    . ~/.bash_profile
fi

if [ -z "${1}" ] || [ -z "${2}" ] || [ -z "${3}" ] ;then
    echo "Usage: "
    echo "      `basename $0` <Oracle_SID> <begin_dat> <end_date>"
    read -p "please input begin ORACLE_SID:" ORACLE_SID
    read -p "please input begin date and time(e.g. yyyymmddhh24):" begin_date
    read -p "please input end date and time(e.g. yyyymmddhh24):" 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, 'yyyymmddhh24') = '&1'
      AND TO_CHAR (end_interval_time, 'yyyymmddhh24') = '&2';
exit;

  • 1
  • 2
  • 3
  • 4
  • 下一頁

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.