0

データベースに接続するためのcシェルスクリプトを作成しました。これはすでに問題なく機能しているので、SQLスクリプトを呼び出して、cetrainテーブルのすべての値を読み取って出力したいと思います。今のところ、これは私のスクリプトがどのように見えるかです

#!/bin/csh 


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

ここで、CLEDBUSERは次のような環境変数として設定されます--CLEADBUSER = -uusername -ppassword -Ddatabasename

スクリプトを実行してデータベースに接続できます。スクリプトを実行すると、次のコマンドを待機しているmsqlprontが表示されます。そこで、データベースをクエリするための(SELECT)ステートメントを含む変数をスクリプトに追加しました。これで私のスクリプトは次のようになります

#!/bin/csh 


set MYSQL=${MYSQL_HOME}/mysql

set SELECTER="SELECT * FROM TB_EARTH_UI;"

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

問題は、すべての行と列を返さないことですが、mysql promtとデフォルトオプション、およびvairablesとbooleanオプションで使用可能なコマンドのリストを返します。SELECTステートメントが読み取られないのはなぜですか?

4

1 に答える 1

1

MySQLクライアント(mysql)は、標準入力(たとえば、シェルから呼び出す場合のキーボード)で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オプションを使用すると、出力の解析が簡単になります。

于 2012-06-27T17:50:31.477 に答える