2012-06-27 33 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