8

I got this error when tried to execute this:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NULL' at line 1

Can't seems to find what is the problem. Appreciate if anyone can help

SET @sql = NULL;
SELECT
 GROUP_CONCAT(
 DISTINCT CONCAT (
 "SUM(IF(DATE(FROM_UNIXTIME(machine_stop)) = '",
 DATE(FROM_UNIXTIME(machine_stop)),"' ,
 (machine_start-machine_stop)/3600, 0)) AS ",
 DATE(FROM_UNIXTIME(machine_stop))
 )
 ) INTO @sql
FROM
 downtime_data
WHERE
 DATE(FROM_UNIXTIME(machine_stop)) >= DATE(NOW()) - INTERVAL 7 DAY;
SET @sql = CONCAT("SELECT
 failure_code, ", @sql, " 
 FROM
 downtime_data 
 WHERE
 p.machine='HH1' AND
 DATE(FROM_UNIXTIME(machine_stop)) >= DATE(NOW()) - INTERVAL 7 DAY 
 GROUP BY
 failure_code,
 DATE(FROM_UNIXTIME(machine_stop))"
 );
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
wchiquito
16.7k2 gold badges37 silver badges46 bronze badges
asked Jun 9, 2016 at 13:01
7
  • 1
    change null to is null Commented Jun 9, 2016 at 13:01
  • Same problem#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'is NULL' at line 1 Commented Jun 9, 2016 at 13:06
  • 1
    Print the @sql variable after the first select statement. There's a possibility if the @sql variable is still NULL after the first select statement then you will get an exception while executing stmt. Commented Jun 9, 2016 at 13:12
  • 1
    Or try to change in the main query like this: SET @sql = CONCAT("SELECT failure_code, ", IFNULL(@sql,''), ...." Commented Jun 9, 2016 at 13:13
  • 1
    Print SELECT @`sql`;. Commented Jun 9, 2016 at 13:36

3 Answers 3

8

If by any chance the @sql variable still holds NULL value after the first select statement then you are going to encounter an exception later on while executing the prepare statement.

Look at the following select statement using CONCAT

SET @sql := NULL; SELECT CONCAT('abc',@sql,'def');

The result is NULL. Although you might expect the result to be abcdef.

In order to get abcdef you need to do this

SET @sql := NULL; SELECT CONCAT('abc',IFNULL(@sql,''),'def');

You may try any of the following if it resolves the issue:

Either

1) SET @sql := '';

OR

2) If you want to keep this line SET @sql = NULL; then change the portion of the final query like this SET @sql = CONCAT("SELECT failure_code ", IF(@sql IS NULL, '',CONCAT(',',@sql)),

Here's the final query:

SET @sql = CONCAT("SELECT
 failure_code ", IF(@sql IS NULL, '',CONCAT(',',@sql)), " 
 FROM
 downtime_data 
 WHERE
 p.machine='HH1' AND
 DATE(FROM_UNIXTIME(machine_stop)) >= DATE(NOW()) - INTERVAL 7 DAY 
 GROUP BY
 failure_code,
 DATE(FROM_UNIXTIME(machine_stop))"
 );
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
answered Jun 9, 2016 at 13:19
Sign up to request clarification or add additional context in comments.

9 Comments

I think the error came from this PREPARE stmt FROM @sql; MySQL said: Documentation #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NULL' at line 1
Execute this lines and you will get the same. SET @sql := NULL; PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;. That's what I've pointed out in my answer. By the way, have you tried any of the change mentioned in my answer?
SET @`sql` := CONCAT('SELECT failure_code', IF(@`sql` IS NOT NULL, CONCAT(', ', @`sql`), ''))
That's why I told you to use IFNULL. Probably I failed to make you understand.
SELECT failure_code, FROM downtime_data != SELECT failure_code FROM downtime_data
|
0

I got it, there are no row from the query under this condition

DATE(FROM_UNIXTIME(machine_stop)) >= DATE(NOW()) - INTERVAL 7 DAY

So it returned NULL

Pang
10.2k146 gold badges87 silver badges126 bronze badges
answered Jun 9, 2016 at 13:35

Comments

0

I was facing this issue but let me share with you unique solution which I found out, I was working on 2 stored procedures simultaneously, on a new session if I run 1st sp I face this error but when I run 1st sp after running 2nd sp then the error is gone and I get my result.

It is something to do with mysql session variables which was getting set in 2nd sp and working for 1st one as well.

answered Aug 17, 2023 at 16:33

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.