2012-06-27 36 views
0

我寫了一個c-shell腳本來連接到數據庫。這已經工作得很好,我現在想要調用一個sql腳本來讀取和打印一個cetrain表中的所有值。截至目前,這是我的劇本的樣子將c-shell變量設置爲SELECT語句

#!/bin/csh 


set MYSQL=${MYSQL_HOME}/mysql 
${MYSQL} ${CLEDBUSER} 

其中CLEDBUSER設爲像這樣一個環境變量 - CLEADBUSER = -Uusername -Ppassword -Ddatabasename

我能夠運行腳本,並連接到數據庫。當我runt他腳本它給我的msql pront等待下一個命令。所以我給腳本添加了一個包含(SELECT)語句來查詢數據庫的變量。現在,我的劇本是這樣的

#!/bin/csh 


set MYSQL=${MYSQL_HOME}/mysql 

set SELECTER="SELECT * FROM TB_EARTH_UI;" 

${MYSQL} ${CLEDBUSER} ${SELECTER} 

問題是它沒有返回我所有的行和columsn但它返回我在mysql中PROMT和默認選項繳費命令的列表,並且還vairables和布爾選項。爲什麼我的SELECT語句沒有被讀取?

+0

換言之,當您已經通過c-shell腳本連接到數據庫時,您是否也可以通過相同的c-shell腳本同時讀取和執行sql命令? – rambokayambo

+0

可能重複的[我們可以通過命令提示符在Windows中運行mysql查詢?](http://stackoverflow.com/questions/7444359/can-we-run-a-mysql-query-through-command-prompt-in -windows) – outis

回答

1

MySQL客戶端(mysql)希望在其標準輸入(例如,從鍵盤調用shell時的鍵盤)上執行SQL指令。

你可以這樣做:[編輯:請忽略,這個是題外話]

${MYSQL} ${CLEDBUSER} < text_file_of_sql_statements.sql 

${MYSQL} ${CLEDBUSER} << EOF 
    ${SELECTER} 
    # you can add other litteral SQL statements here, or more variables containing SQL statements 
EOF 

${MYSQL} ${CLEDBUSER} --execute="${SELECTER}" 

[編輯]

我完全誤解了OP的問題灰。我沒有理解他正試圖從變量中執行SQL語句。我編輯了上述選項(謝謝你)。這是另一種變化:

echo ${SELECTER} | ${MYSQL} ${CLEDBUSER} 

此外,--skip-column-names選項可以讓你更容易解析輸出。

+0

使用sql語句的文本文件是否需要聲明一個包含sql字符串的變量?爲什麼我必須使用.sql文件來保存我的select語句?還有SELECT 1代表什麼? – rambokayambo

+0

好吧我定義了一個SELECT * FROM我的表在一個單獨的SQL文件中,它工作正常,這工作正常 – rambokayambo

+0

所以這意味着我不能使用直接的SQL語句分配給我的C shell腳本可放大? – rambokayambo