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 변수 주위에는 큰따옴표가 하나만 있습니다.


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


관련 정보