2015-03-25 64 views
-1

为什么我的SQL抛出一个错误,如留下没有匹配的标签:tableList如何使用select语句在过程中的SQL

DELIMITER $$ 
DROP PROCEDURE IF EXISTS CountSignatures$$ 

CREATE PROCEDURE CountSignatures() 
    BEGIN 
    DECLARE done INT DEFAULT FALSE; 
    DECLARE signatureCount INT; 
    DECLARE tableName CHAR(100); 
    DECLARE tableList CURSOR FOR Select table_name from information_schema.tables where table_schema="LogData" and table_name like "%FAULT_20150320%"; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; 
    OPEN tableList; 
    tableListLoop: LOOP 
     SET done = FALSE ; 
     FETCH tableList INTO tableName; 
     IF done THEN 
     LEAVE tableListLoop; 
     END IF; 
     ***select signatureCount := signatureCount + count(distinct signature) from tableList;*** Line giving syntax error 
    END LOOP; 
    CLOSE tableList; 
    END$$ 
DELIMITER; 

回答

0

我不知道为什么会产生特定的错误,但此行不正确:

signatureCount = signatureCount + Select count (distinct signature) from tableList; 

如果你想更新变量,请尝试:

set signatureCount = (signatureCount + 
         (select count(distinct signature) 
         from tableList)); 

但是,你这样做不初始化变量,所以这只会产生NULL

+0

@eggyal。 。 。你1000%正确。我正在考虑更多关于缺乏使逻辑无用的初始化 - 即使它已经运行。 – 2015-03-25 00:42:23

1

leave拉布勒

此语句用于退出具有 定标签流量控制结构。如果标签用于最外面存储的程序块,则退出程序。

在你的代码tableList是一个光标,你应该阔叶的tableListLooptableList,所以尝试:

LEAVE tableListLoop;