2015-03-25 68 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;