2016-02-11 100 views
0

...表名是參數。我在這裏找到了解決方案:unable to store return value from execute statement in mysql 但它不適合我。這是我的測試:我在準備好的陳述中掙扎,其中

SET @v_sourceTableSize = 0; 
SET @parameter_sourceTable = category; 
SET @v_query = CONCAT("SELECT COUNT(*) INTO ",@v_sourceTableSize," FROM ",@parameter_sourceTable); 

類別是在我的分貝表。當我運行這個時,沒有任何反應。沒有錯誤,沒有。有沒有辦法讓它工作?自上午以來我一直在尋找解決方案!


編輯
我把報價和現在,它正在與「類別」,但是我原來的程序沒有。請看看:

DROP PROCEDURE IF EXISTS insert_categories; 
DELIMITER $$ 
CREATE PROCEDURE insert_categories(
    IN parameter_sourceTableIdColumnName INTEGER, 
    IN parameter_sourceTable VARCHAR(25), 
    IN parameter_sourceColumn VARCHAR(25), 
    IN parameter_destinationParentCategoryID INTEGER) 

    MODIFIES SQL DATA 

    BEGIN 
     DECLARE v_parameterSourceTable VARCHAR(25) DEFAULT ""; 
     DECLARE v_sourceTableSize INTEGER; 
     DECLARE v_counter INTEGER DEFAULT 0; 
     DECLARE v_query VARCHAR(100) DEFAULT ""; 
     DECLARE v_recordName VARCHAR(25) DEFAULT ""; 
     SET v_parameterSourceTable = parameter_sourceTable; 
     SET v_query = CONCAT("SELECT COUNT(*) INTO ",v_sourceTableSize," FROM ",v_parameterSourceTable); 
     PREPARE stmt FROM v_query; 
     EXECUTE stmt; 
     SELECT v_sourceTableSize; 
     #SET v_sourceTableSize := (SELECT COUNT(*) FROM parameter_sourceTable); 
     SET v_sourceTableSize = v_sourceTableSize + 1; 
     WHILE v_counter < v_sourceTableSize DO 
      SET v_counter = v_counter + 1; 
      SET v_recordName = (SELECT parameter_sourceColumn 
           FROM v_parameterSourceTable 
           WHERE parameter_sourceTableIdColumnName = v_counter); 
      CALL insertCategory(v_recordName, parameter_destinationParentCategoryID); 
     END WHILE; 
    END $$  
DELIMITER ; 

我得到這個錯誤:

1064 - 你在你的SQL語法錯誤;檢查與您的MariaDB服務器版本相對應的手冊,以找到在'v_query; EXECUTE stmt; SELECT v_sourceTableSize; SET v_sourceTa」在行17

回答

0

A prepared statement can access user-defined variables, but not local variables or procedure's parameters.

SET @v_query = CONCAT("SELECT COUNT(*) INTO ",v_sourceTableSize," FROM ",v_parameterSourceTable); 
    PREPARE stmt FROM @v_query; 
    EXECUTE stmt; 

Docs