mysqlリファレンスの問題

mysqlリファレンスの問題

次のコマンドを実行していますが、参照などに関するエラーが発生します。

#!/bin/bash
test='my_table'
date='2020-10-31 00:00:00.000000'

mysql --user=halloween --password='ghost_123' --database='ghost_database' <<END
use ghost_datebase;
CREATE EVENT myevent    ON SCHEDULE AT \"$date"\ ON COMPLETION NOT PRESERVE  ENABLE DO  SELECT * FROM "$test";
END

その後、次のエラーが発生します。

ERROR at line 2: Unknown command '\"'.

答え1

二重引用符は、ENDここで文書の先頭のタグを識別します。次に、ここで説明されているように正しいMySQL構文を使用してください。 MySQLで正常にエスケープされない限り、引用符をエスケープしないでください。

mysql --user='halloween' --password='ghost_123' --database='ghost_database' <<"END"
CREATE EVENT myevent ON SCHEDULE AT "$date" ON COMPLETION NOT PRESERVE ENABLE DO SELECT * FROM "$test";
END

私はあなたのSQL構文を変更したくありません。私は、テーブル名(または文字列)に二重引用符が正しいことを完全にはわかりません。

挿入する変数がない場合は、here-doc識別子を一重引用符で囲むことが正確です。 (参照は文字列への参照と同じです。)

答え2

引用符付き文字列はここに文書化されています。

<<END
CREATE EVENT $name ON SCHEDULE
  AT Str_to_date('$date', '%Y-%m-%d %T.%f')
  ON COMPLETION NOT PRESERVE ENABLE DO SELECT * FROM $test;
END

MariaDB データベースで次のコマンドを正常に実行しました。

export DATE='2020-10-28 14:00:00.000000'
export NAME=eventje
export TEST=test

mysql --password='xYzAbC'  --database=ghp <<END
DROP EVENT $NAME;
CREATE EVENT $NAME ON SCHEDULE
  AT Str_to_date('$DATE', '%Y-%m-%d %T.%f')
  ON COMPLETION NOT PRESERVE ENABLE DO SELECT * FROM $TEST;
END

答え3

次のスクリプトを使用してソリューションを見つけることができました。

$date変数の周囲には二重引用符が1つしかありません。


date='2020-10-31 00:00:00.000000'

#CREATE EVENT myevent ON SCHEDULE AT "$date" ON COMPLETION NOT PRESERVE ENABLE DO SELECT * FROM '$test';
mysql --user=halloween --password='ghost_123' --database='ghost_database' <<END
use ghost_database;
CREATE EVENT myevent ON SCHEDULE AT "$date" ON COMPLETION NOT PRESERVE ENABLE DO SELECT * FROM ghost_database;
END

``````````````````


This script can be run separately if needed using an input argument:
In this example below the input argument is 'ghost'.  It could technically lookup whatever variables or be passed the date variable in epoch and simply convert it.

`````````````````
while getopts i: option

do
case "${option}"
in
i) ghost=${OPTARG};;
esac


関連情報