mysql准备好的语句无法执行。得到错误1064

时间:2015-01-04 07:16:02

标签: mysql

DELIMITER $$

DROP PROCEDURE IF EXISTS TOUR_TRANSFER $$

CREATE PROCEDURE TOUR_TRANSFER(in_search CHAR(80),tbl CHAR(80),clmn CHAR(80))
BEGIN
DECLARE selstmt,sel_cmd VARCHAR(100);
BEGIN -- for rubric table
        SET selstmt=concat('SELECT ',clmn,' INTO @tbl_data FROM ',tbl,' WHERE ',clmn, ' REGEXP "', in_search,'"');
        select selstmt;
        PREPARE sel_cmd FROM @selstmt;
        EXECUTE sel_cmd;
        select @tbl_data;
        DEALLOCATE PREPARE sel_cmd;
END;
END$$
DELIMITER ;

我在prepare语句中收到错误(1064),而我能够手动执行它。

3 个答案:

答案 0 :(得分:0)

交换前两行并将其更改为如下所示。您希望先删除该过程,然后为存储过程设置分隔符。

DROP PROCEDURE IF EXISTS TOUR_TRANSFER;

DELIMITER $$

您似乎还有一组额外的BEGINEND语句。你可以删除内部的。

这会使你的代码看起来像这样。

DROP PROCEDURE IF EXISTS TOUR_TRANSFER;

DELIMITER $$

CREATE PROCEDURE TOUR_TRANSFER(in_search CHAR(80),tbl CHAR(80),clmn CHAR(80))
BEGIN
DECLARE selstmt,sel_cmd VARCHAR(100);
        SET selstmt=concat('SELECT ',clmn,' INTO @tbl_data FROM ',tbl,' WHERE ',clmn, ' REGEXP "', in_search,'"');
        select selstmt;
        PREPARE sel_cmd FROM @selstmt;
        EXECUTE sel_cmd;
        select @tbl_data;
        DEALLOCATE PREPARE sel_cmd;
END

$$

DELIMITER ;

这是指向在存储过程中使用预准备语句的另一个问题的链接。请参阅答案以获取示例。

MySQL PREPARE statement in stored procedures

答案 1 :(得分:0)

这是因为您的代码中存在语法错误。 Befin语句应该结束,并且从你的代码中注释出end语句,参见下面的示例代码

DELIMITER $$;

DROP PROCEDURE IF EXISTS TOUR_TRANSFER $$;

CREATE PROCEDURE TOUR_TRANSFER(in_search CHAR(80),tbl CHAR(80),clmn CHAR(80)) BEGIN DECLARE selstmt,sel_cmd VARCHAR(100); 
BEGIN 
-- for rubric table SET selstmt=concat('SELECT ',clmn,' INTO @tbl_data FROM ',tbl,' WHERE ',clmn, ' REGEXP "', in_search,'"'); select selstmt; PREPARE sel_cmd FROM @selstmt; EXECUTE sel_cmd; select @tbl_data; DEALLOCATE PREPARE sel_cmd; 
END; END$$ DELIMITER 

在代码上添加一个新行,它应该可以正常工作。

答案 2 :(得分:0)

一些句法问题。现在试试这个

DELIMITER //
DROP PROCEDURE IF EXISTS TOUR_TRANSFER;
//
CREATE PROCEDURE TOUR_TRANSFER(in_search CHAR(80),tbl CHAR(80),clmn CHAR(80))
BEGIN
DECLARE selstmt, tbl_data, sel_cmd VARCHAR(100);
SET @selstmt=concat('SELECT ',clmn,' INTO @tbl_data FROM ',tbl,' WHERE ',clmn, '   REGEXP "', in_search,'"');
select @selstmt;
PREPARE sel_cmd FROM @selstmt;
EXECUTE sel_cmd;
select @tbl_data;
DEALLOCATE PREPARE sel_cmd;
END;
//
DELIMITER ;