使用批處理指令碼或SHELL配合SQL指令碼
有時候我們在寫一些資料庫指令碼的時候,通過SQLPLUS設定變數可能很麻煩.此時可以利用作業系統的指令碼.
比如當系統為*NIX時可以使用SHELL指令碼,當系統為Windows時可以通過批處理指令碼配合使用.
下面是兩種平臺的兩個示例:
(1)UNIX或Linux平臺
下面這個指令碼,是通過在系統中取得當前時間的年月,然後傳遞給SQLPLUS拼成表的分割槽,可以用來優化SQL
TESTDB /oravl01/oracle/charsi> cat xx_test.sh
CUR_MONTH=`date +%Y%m`
sqlplus charsi/charsi@testdb <
select count(1)
from test_parti_table partition (month_${CUR_MONTH}) t
where t.object_id in (10, 20, 30)
and t.create_time > (sysdate - 1 / 96);
EOF
TESTDB /oravl01/oracle/charsi>
TESTDB /oravl01/oracle/charsi>
上面這個是一個監控指令碼,實時取15分鐘之內的資料,本例僅僅是用來演示從系統向sqlplus中傳遞變數的.
(2)Windows平臺
下面是一個windows批處理指令碼示例,模擬的是通過系統向sqlplus中傳遞變數,然後執行sql
非常感謝itpub上xqmei的答覆
檔案xxxx.bat的內容為:
@echo off
@set aa=test_charsi
set ORACLE_SID=ORCLXX
if "%1"=="__get_sql" goto :get_sql
%0 __get_sql | sqlplus "/ as sysdba"
goto :end
:get_sql
echo set timing on
echo select * from dual;
echo select '%aa%' from dual;
echo exit;
:end
執行該指令碼
C:9_TMP>xxxx.bat
SQL*Plus: Release 9.2.0.1.0 - Production on 星期六 11月 20 18:36:02 2010
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
連線到:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
SQL> SQL>
DU
--
X
已用時間: 00: 00: 00.00
SQL>
'TEST_CHARSI'
----------------------
test_charsi
已用時間: 00: 00: 00.00
SQL> 從Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production中斷開
C:9_TMP>
該指令碼含義一個簡單介紹:
@echo off ----echo off前面加@,就是在介面上不顯示"echo off"
@set aa=test_charsi ----設定aa變數
set ORACLE_SID=ORCLXX ---設定ORACLE_SID
if "%1"=="__get_sql" goto :get_sql -----如果該指令碼的第一個引數為__get_sql,則跳轉到:get_sql
%0 __get_sql | sqlplus "/ as sysdba" -----執行:指令碼名 __get_sql |sqlplus "/ as sysdba"。%0的意思是當前執行的指令碼,相當於在指令碼中執行了該指令碼
goto :end
:get_sql ----設定get_sql中的內容
echo set timing on
echo select * from dual;
echo select '%aa%' from dual;
echo exit;
:end
當然在Windows下完全可以先把檔案生成出來再通過sqlplus "/ as sysdba" @sql_script.sql來執行,這樣也比較簡潔直觀,本例僅僅是作為演示.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23850820/viewspace-1041798/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- bat批處理常用指令碼BAT指令碼
- BAT 批處理指令碼 教程BAT指令碼
- Linux 使用 shell 指令碼處理字串Linux指令碼字串
- 將DOS批處理檔案轉換為Shell指令碼指令碼
- 部分Windows批處理指令碼整理Windows指令碼
- windowns下如何實現批處理實現呼叫sql指令碼SQL指令碼
- windows 批處理備份目錄指令碼Windows指令碼
- 使用shell指令碼生成只讀許可權的sql指令碼指令碼SQL
- 【Shell】使用Shell指令碼快速完成SQL指令碼中重複枯燥的任務指令碼SQL
- Shell指令碼逐行處理文字檔案技巧指令碼
- 【轉】shell指令碼處理字串的常用方法指令碼字串
- Linux/Unix shell 指令碼中呼叫SQL,RMAN指令碼Linux指令碼SQL
- shell指令碼文字處理工具指令碼
- shell指令碼指令碼
- 巧用shell指令碼生成快捷指令碼指令碼
- 利用shell指令碼生成動態sql指令碼SQL
- 使用sql生成sql指令碼SQL指令碼
- shell動態指令碼和pl/sql動態指令碼的比較指令碼SQL
- shell指令碼(二)指令碼
- shell指令碼心得指令碼
- shell指令碼案例指令碼
- 常用shell指令碼指令碼
- Shell指令碼介紹與使用指令碼
- hive streaming 使用shell指令碼Hive指令碼
- 使用shell定製awr指令碼指令碼
- Shell指令碼中cd命令使用指令碼
- 編寫簡單的windows bat批處理指令碼檔案WindowsBAT指令碼
- iOS逆向 Shell指令碼+指令碼重簽名iOS指令碼
- Shell指令碼匯入外部指令碼內容指令碼
- [Shell] Shell 生成 HTML指令碼HTML指令碼
- 批處理實現的ip地址切換的複雜指令碼指令碼
- 指令碼+批處理打造IIS監控器『羅斌原創』薦指令碼
- 如何使用zx編寫shell指令碼指令碼
- 使用shell 指令碼備份資料指令碼
- Centos下使用php呼叫shell指令碼CentOSPHP指令碼
- shell指令碼批量操作使用者指令碼
- 使用shell定製addm指令碼指令碼
- shell oracle 建立使用者指令碼Oracle指令碼