views:

48

answers:

1

When creating the following procedure I receive this error message:

ERROR 1064 (42000): 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
'd_query;
 set d_result = execute stmt;
 deallocate prepare stmt; ' at line 15

But after checking I can't see the error. Line 15 relates to 'if d_query is not null then'.

Is this the true error? Or is it not happy to accept an execute as an assignment to d_result?

Any help would be greatly appreciated.

delimiter |
create procedure runtests()
begin
  declare d_test_id char(20);
  declare d_query text;
  declare d_result text;

  declare cur cursor for select test_id, query, result from datavalidator order by test_id;

  open cur;

  repeat
    fetch cur into d_test_id, d_query, d_result;

    if d_query is not null then
      prepare stmt from d_query;
      set d_result = execute stmt;
      deallocate prepare stmt;

      update datavalidator set result = d_result;
    end if;
  until done end repeat;

  close cur;
end;
|
delimiter ; |
+1  A: 

"Note that a literal string expression or a user variable are the only ways you can specify the statement to be prepared.", from this documentation.

Try writing the value into a user variable before trying to prepare, perhaps something like:

set @q_sql = d_query;

...or write directly into the user variable in the fetch line.

Jeremy Smyth
Thanks Jeremy, cleared up the issue my end.
Simon