首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL错误1064 :存储过程

MySQL错误1064 :存储过程
EN

Stack Overflow用户
提问于 2012-06-08 11:12:32
回答 2查看 3.5K关注 0票数 0

谢谢,这是工作

就在这两条线上:

代码语言:javascript
运行
复制
SET valueName = CONCAT(valueName, ' ,', _valueSplit);
SET valueValue = CONCAT(valueValue,' ,', json(_entryData, _valueSplit));

我已经声明了这个变量,但是在NULL时,所以CONCAT返回NULL,而查询继续NULL到

感谢德瓦特帮助我

职位:

当我尝试使用我的存储过程时,我有以下错误

代码语言:javascript
运行
复制
call _extract() Error Code: 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

但是我在这个过程中什么也没看到,这是我的程序,但上面没有空指令。

代码语言:javascript
运行
复制
CREATE PROCEDURE _extract()
BEGIN
    DECLARE _entryType VARCHAR(45);
    DECLARE _entryData VARCHAR(1024);
    DECLARE _entryTime BIGINT(20);

    DECLARE no_more_rows BOOLEAN;
    DECLARE num_rows INT DEFAULT 0;

    DECLARE entryCursor CURSOR FOR SELECT entryValue, entryTime FROM TrackingEntry;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;

    OPEN entryCursor;
    select FOUND_ROWS() into num_rows;

    mainLoop: LOOP

        FETCH entryCursor INTO _entryData, _entryTime;

        IF no_more_rows THEN
            CLOSE entryCursor;
            LEAVE mainLoop;
        END IF;

        SET _entryType = json(_entryData, "type");
        CALL split_string(json(_entryData, "data"), ",");
        CALL _extractJson(_entryType, _entryData);

    END LOOP mainLoop;
END$$

_extractJson过程:数据提取的下一部分

代码语言:javascript
运行
复制
CREATE PROCEDURE _extractJson(`_entryType` VARCHAR(255))
BEGIN

    DECLARE _valueSplit VARCHAR(255);

    DECLARE valueName VARCHAR(255);
    DECLARE valueValue VARCHAR(255);

    DECLARE split_no_more_rows BOOLEAN;
    DECLARE split_num_rows INT DEFAULT 0;

    DECLARE splitCursor CURSOR FOR SELECT SQL_CALC_FOUND_ROWS _value FROM SplitValues;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET split_no_more_rows = TRUE;

    OPEN splitCursor;
    select FOUND_ROWS() into split_num_rows;
    dataLoop: LOOP
        FETCH splitCursor INTO _valueSplit;
        IF split_no_more_rows THEN
            CLOSE splitCursor;
            LEAVE dataLoop;
        END IF;

        SET valueName = CONCAT(valueName, ' ,', _valueSplit);
        SET valueValue = CONCAT(valueValue,' ,', json(_entryData, _valueSplit));

    END LOOP dataLoop;
    SET @query = CONCAT('INSERT INTO ',_entryType, ' (',valueName,') VALUES (',valueValue,')' );
    PREPARE stmt FROM @query;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    --end stuffs here
END$$

来解释我想做什么

有些数据存储在trackingEntry中,每一行都包含关于用户做什么(在社交游戏中)以及用户来自何处(动作、引用和其他一些值)的信息。

这些数据以Json格式存储:{ "type“:"tableName"," data”:"row1,row2,row3","row1“:"value","row2”:"value","row3“:"value”}

数据的类型(操作(连接,在墙上发布)--它是我们的仪表板应用程序之一的表名

“数据”是可用数据的列表。

在我们拿到数据之后

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-08 12:55:50

问题可能是准备好的INSERT语句,似乎其中一个变量为NULL。试着对准备好的语句进行注释并选择@query,您将看到问题-

代码语言:javascript
运行
复制
SET @query = CONCAT('INSERT INTO ',_entryType, ' (',valueName,') VALUES (',valueValue,')' );
SELECT @query;
-- PREPARE stmt FROM @query;
-- EXECUTE stmt;
-- DEALLOCATE PREPARE stmt;
票数 1
EN

Stack Overflow用户

发布于 2012-06-08 11:24:24

您必须在select语句中添加SQL_CALC_FOUND_ROWS,这样FOUND_ROWS()函数才能工作。

所以改变这一行

代码语言:javascript
运行
复制
DECLARE entryCursor CURSOR FOR SELECT entryValue, entryTime FROM TrackingEntry;

像这样

代码语言:javascript
运行
复制
DECLARE entryCursor CURSOR FOR SELECT SQL_CALC_FOUND_ROWS entryValue, entryTime FROM TrackingEntry;

您可以阅读更多关于它的这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10947741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档