2012-06-20 86 views
3

我想重寫一個用c-shell腳本編寫的腳本,它使用sql plus命令從oracle數據庫獲取信息,但我用mysql替換它,並且想替換它所有使用mysql語法的sqlplus語法。我要求所有的C-shell大師向我解釋一下這個命令意味着用mysql命令替換sqlplus命令

set SQLPLUS=${ORACLE_HOME}/bin/sqlplus 

set REPORT=${MYBD_HOME}/Scripts/report.sql 

沿着我使用follwing

${SQLPLUS} ${MYDBUSER} @ &{REPORT} 

我能夠說調用SQL Plus命令行這樣的地方我承諾什麼是右手值的意思({ORACLE_HOME}/bin/sqlplus)是我的sqplus命令所在的路徑,因此我需要它來調用該命令和{REPORT = $(MYBD_HOME)/Scripts.report。 sql)是通過調用sqplus命令來運行的sql腳本所在的路徑是否正確?

我不明白的是set命令正在初始化它。 SQLPLUS是一個變量,所以當我嘗試將它放入我的.csh腳本時,我不必鍵入路徑?

如果是的話,我需要做的運行mysql數據庫上運行此腳本被簡單地設置SQLPLUS(problably將其更改爲MYSQL)爲指向的路徑在我的mSQL的高管是正確

set MYSQL=${MYSQL_HOME}/bin/mysql 

然後只需調用mysql和運行SQL語句

${MYSQL}${MYDBUSER}@${REPORT} 

難道這就是我需要做的RO囤相同.tsch腳本從一個MySQL表中獲取數據?

回答

2

你需要這樣的事:

${MYSQL} -u $username -p$password -D $database < ${REPORT} 

(用戶名和密碼被傳遞在不同的MySQL的可執行比它們傳遞給sqlplus您將需要分析出用戶名和。密碼從$ {MYDBUSER}。可能包含一個字符串,例如「scott/tiger」。在mysql命令行客戶機上的等價物應該是「-u scott -ptiger -D scott」。

@(at sign)是一個SQLPlus事物;它告訴SQLPLus讀取指定文件名的輸入,mysql中的等效命令是source命令,例如,

${MYSQL} -u $username -p$password <_EOD! 
use $database 
source ${REPORT} 
_EOD! 

此外,您report.sql文件可能包含spool等SQLPLUS特定的命令。 mysql命令行客戶端並不是像SQLPlus那樣功能強大的報表工具。


附錄:

問:究竟是什麼卷軸怎麼辦?

SQLPlus spool命令將輸出指向文件。它經常用於從SQLPLus會話創建日誌文件,並且對創建報告文件也很有用。

set trimspool on 
spool /tmp/file.lis 
select 'foo' as foo from dual; 
spool off 

問:爲什麼我不能設置用戶名和passowrd一個變量,並且使用?

您可以設置一個變量,發送到操作系統的命令行的最終結果將是相同的。

set MYDBUSER="-u username -ppassword -D database" 
${MYSQL} ${MYDBUSER} <${REPORT} 

問:好像是mysql比sqlplus的更詳細。

mysql命令行客戶端需要unix樣式的選項。這些是等效的:

mysql -u myusername -pmypassword -D mydatabase 
mysql --user=myusername --password=mypassword --database=mydatabase 
+0

閥芯究竟做了什麼? – rambokayambo

+0

爲什麼不能將用戶名和密碼設置爲一個變量並使用它。看起來像myql比sqlplus更詳細 – rambokayambo

+0

好吧,我會盡力做到這一點。似乎我不如重寫整個腳本。 MYDBUSER是我假設的一個環境變量,它不存在,我將不得不將MYSQL_HOME和MYDBUSER都添加到我的env變量中。這樣我可以在腳本中執行mysql命令。我想我也將不得不用我登錄到mysql數據庫的用戶名和密碼來替換嗎?最後我的報告運行和sql語句並創建一個.log文件並將其放在某處?我這是什麼後臺命令正在做什麼?我如何在MySQL中做同樣的事情?謝謝 – rambokayambo