ERROR 1064 ER_PARSE_ERROR: Unhandled exception Type: ER_PARSE_ERROR (1064)

Issue

Using the SET statement inside a stored procedure returns an error. For example, consider a stored procedure that contains statements like

BEGIN
SET @@sql_mode = PIPES_AS_CONCAT;
...
<some_statement_that_uses_pipes_for_concatenation>

When you run this stored procedure for the first time, it returns a syntax error. However, if you run the same stored procedure again, in the same session, it runs successfully.

When a SingleStore query is run, its plan is generated and then compiled. However, the stored procedure definition is compiled right away (like other DDL queries), when the procedure is created. The queries inside the stored procedure are not compiled until the stored procedure is run for the first time. For SET queries, this delay in compiling means that the stored procedure will be generated as though the variable specified in the SET statement was not set.

On the first run, these queries are compiled, which causes the stored procedure to recompile. Once the stored procedure has been recompiled, the queries inside it have been compiled as well. Therefore, when the stored procedure is executed for a second time, it runs successfully.

Solution

Avoid using SET statements inside a stored procedure, especially for setting those variables that can potentially affect query execution. Set the variables globally instead.

Last modified: July 5, 2021

Was this article helpful?