【问题标题】:setting a c-shell variable to a SELECT statement将 c-shell 变量设置为 SELECT 语句
【发布时间】:2012-06-29 04:13:42
【问题描述】:

我编写了一个 c-shell 脚本来连接数据库。这已经很好了,我现在想调用一个 sql 脚本来读取和打印 cetrain 表中的所有值。到目前为止,这就是我的脚本的样子

#!/bin/csh 


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

其中 CLEDBUSER 设置为环境变量,如下所示 - CLEADBUSER=-uusername -ppassword -Ddatabasename

我能够运行脚本并连接到数据库。当我运行他的脚本时,它给了我等待下一个命令的 msql pront。所以我在脚本中添加了一个包含(SELECT)语句的变量来查询数据库。现在我的脚本看起来像这样

#!/bin/csh 


set MYSQL=${MYSQL_HOME}/mysql

set SELECTER="SELECT * FROM TB_EARTH_UI;"

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

问题是它没有返回所有行和列,但它返回了 mysql promt 和默认选项中可用命令的列表,以及 vairables 和布尔选项。为什么我的 SELECT 语句没有被读取?

【问题讨论】:

标签: mysql


【解决方案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 语句。我已经编辑了上述选项(谢谢 outis)。这是另一个变体:

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

另外,--skip-column-names 选项可以让您更轻松地解析输出。

【讨论】:

  • 使用 sql 语句的文本文件 是否需要声明一个包含 sql 字符串的变量?为什么我必须使用 .sql 文件来保存我的选择语句?还有 SELECT 1 代表什么?
  • 好的,我在一个单独的 sql 文件中定义了一个 SELECT*FROM 我的表,它工作正常,这工作正常
  • 这是否意味着我不能在我的 c-shell 脚本中使用分配给变量的直接 SQL 语句?
  • @rambokayambo 很抱歉,我完全误解了你的问题。由 outis 编辑的第三个选项是唯一可以满足您需求的选项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-12
  • 2020-06-19
  • 1970-01-01
  • 1970-01-01
  • 2020-11-28
  • 2011-03-24
  • 1970-01-01
相关资源
最近更新 更多