Shell指令碼中獲取SELECT結果值的方法

Jet_Zhang發表於2015-05-25
有時候我們可能會需要在Shell指令碼中執行SELECT語句,並將結果賦值給一個變數,對於這樣的情形,我們可以用以下的方法來達到目的。

點選(此處)摺疊或開啟

  1. #!/bin/ksh
  2. #
  3. # Created : 2015.05.25
  4. # Updated : 2015.05.25
  5. # Author : Jet Chenxi Zhang
  6. # Description : Get SELECT result in Shell
  7. # Variable Definitions #
  8. ORACLE_SID=audtest
  9. ORACLE_HOME=/app/oracle/product/database/11.2.0/db_1
  10. PATH=$PATH:$ORACLE_HOME/bin
  11. DBNAME=
  12. # Get Database name by quering v$database #
  13. DBNMAE=`
  14. sqlplus -s /nolog <
  15. set echo off feedback off heading off underline off;
  16. conn / as sysdba;
  17. select name from v\\$database;
  18. exit;
  19. EOF`
  20. echo "Database name: "$DBNMAE
如上程式碼,可以將獲取Database Name,執行結果如下:

  1. [oracle@hxddcx02 ~]$ ./query_dbname.sh
  2. Database name: AUDTEST
可以看到SELECT的結果已被正確賦值給Shell的變數。如果SELECT中有多個列的值,也可以用此方法,只是需要將結果進行分拆,如用awk:

點選(此處)摺疊或開啟

  1. #!/bin/ksh
  2. #
  3. # Created : 2015.05.25
  4. # Updated : 2015.05.25
  5. # Author : Jet Chenxi Zhang
  6. # Description : Get SELECT results in Shell
  7. # Variable Definitions #
  8. ORACLE_SID=audtest
  9. ORACLE_HOME=/app/oracle/product/database/11.2.0/db_1
  10. PATH=$PATH:$ORACLE_HOME/bin
  11. QUERYRES=
  12. DBID=
  13. DBNAME=
  14. # Get Database name by quering v$database #
  15. QUERYRES=`
  16. sqlplus -s /nolog <
  17. set echo off feedback off heading off underline off;
  18. conn / as sysdba;
  19. select dbid, name from v\\$database;
  20. exit;
  21. EOF`
  22. DBID=`echo $QUERYRES | awk -F' ' '{print $1}'`
  23. DBNAME=`echo $QUERYRES | awk -F' ' '{print $2}'`
  24. echo "Database ID: "$DBID
  25. echo "Database name: "$DBNAME
執行結果如下:

  1. [oracle@hxddcx02 ~]$ ./query_dbname2.sh
  2. Database ID: 811711272
  3. Database name: AUDTEST


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13885898/viewspace-1670297/,如需轉載,請註明出處,否則將追究法律責任。

相關文章