ОШИБКА 1064 (42000) при запуске файла file.sql в putty - PullRequest
0 голосов
/ 05 сентября 2018

мой файл.sql имеет код ниже

use Database_name;
CREATE PROCEDURE sp_Create_Calendar_Date()
BEGIN

INSERT INTO CALENDAR_DATE
select date_format(selected_date,'%Y%m%d') CALENDAR_DATE,
    week(SELECTED_DATE) WEEK_NUMBER,
    substr(monthname(SELECTED_DATE),1,3) MONTH_NAME,
    month(SELECTED_DATE) MONTH_NUMBER,
    year(SELECTED_DATE) YEAR_NAME,
    dayname(SELECTED_DATE) DAY_NAME,
    concat( 'Q',quarter(SELECTED_DATE)) QUARTER_LABEL,
    extract(year_month from selected_date) MONTH_SPLIT_NAME,
    concat( year(SELECTED_DATE),concat('Q',timestampdiff(month, @FiscalYearStartDate, @today) div 3 + 1)) FISCAL_QUARTER_LABEL,
    dayofyear(selected_date) DAY_OF_YEAR,
     'N' ORGANAIZATION_HOLIDAY
from 
(select adddate('1970-01-01',t4*10000 + t3*1000 + t2*100 + t1*10 + t0) selected_date from
 (select 0 t0 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0,
 (select 0 t1 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1,
 (select 0 t2 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
 (select 0 t3 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3,
 (select 0 t4 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) v
where selected_date between MAKEDATE(year(DATE_ADD(date_format(sysdate(),'%Y%m%d'),interval -2 YEAR)),1) and 
        LAST_DAY(DATE_ADD(DATE_ADD(date_format(sysdate(),'%Y%m%d'),interval 5 YEAR), INTERVAL 12-MONTH(DATE_ADD(date_format(sysdate(),'%Y%m%d'),interval 5 YEAR)) MONTH));           
END

В моей замазке я называю этот код как

mysql -u root -p <Database Name> < file.sql

когда я выполняю это, я получаю ошибку, как показано ниже ОШИБКА 1064 (42000) в строке 2: у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса для использования рядом с '' в строке 24

Я новичок в этой кодировке типа замазки .., в чем здесь проблема ??

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Я решил это с помощью синтаксиса, подобного этому, в моем файле file.sql

DROP PROCEDURE IF EXISTS `sp_Create_Calendar_Date`;
DELIMITER //
USE `DATABASE_NAME`

CREATE PROCEDURE`sp_Create_Calendar_Date` ()
BEGIN

INSERT INTO CALENDAR_DATE
SELECT..... ; /* Query as it's like in my question */

END
//
DELIMITER ;

На моем сервере файл SQL находился в том же месте, где я выполняю, поэтому я назвал свой файл SQL следующим образом:

mysql -u root -p <DATABASE_NAME> < file.sql 

процедура хранения, созданная в моей базе данных. Я знаю, что это не проблема PuTTY

0 голосов
/ 05 сентября 2018

Это не проблема замазки, это ошибка MySQL. В вашем синтаксисе SQL есть что-то неверное. Ваш запрос довольно сложный, поэтому вы можете упростить его, индивидуально протестировать свои подзапросы и проверить его с помощью онлайн-валидатора https://www.google.com/search?q=mysql+validator&oq=mysql+validator.

Для устранения неполадок вы должны открыть интерактивный сеанс SQL в Putty и вводить 1 оператор SQL за раз, пока не найдете ошибочную строку. На этом этапе вам необходимо выяснить, какая именно часть неверного SQL.

Этапы будут выглядеть примерно так:

Используйте Putty для запуска ssh на вашем хосте mysql. Однажды в терминале хоста введите команды:

$ mysql -u root -p <Database Name>
$ mysql> use Database_name;
$ mysql> <enter more SQL>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...