2016-02-11 96 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