0

我想从所有表中查找多个 UserId call searchUser(3,'UserId') 错误: 0 14:30:14 call searchUser(3,'UserId') 错误代码:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“NULL”附近使用正确的语法

DELIMITER $$

CREATE PROCEDURE `searchUser`( in_search int(11),in_column_name varchar(50) )
    READS SQL DATA
BEGIN
    DECLARE trunc_cmd VARCHAR(50);
    DECLARE searchUserId int (11);
    DECLARE db,tbl,clmn CHAR(50);

   DECLARE done INT DEFAULT 0;
    DECLARE COUNTER INT;


    DECLARE table_cur CURSOR FOR


    SELECT concat('SELECT COUNT(*) INTO @CNT_VALUE FROM `',table_name,'` WHERE `', in_column_name,'` = "',in_search,'"') ,table_name,column_name FROM information_schema.`COLUMNS` WHERE TABLE_SCHEMA = 'comments' and column_name=in_column_name ;

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;

    PREPARE trunc_cmd FROM "TRUNCATE TABLE temp_details;";
    EXECUTE trunc_cmd ; 
    OPEN table_cur;

table_loop:LOOP
        FETCH table_cur INTO db, tbl, clmn;


    SET @searchUserId = searchUserId;
    SELECT  searchUserId;
    PREPARE searchUserId FROM @searchUserId;
    EXECUTE searchUserId;

    SET COUNTER = @CNT_VALUE;
    SELECT COUNTER;

    IF COUNTER>0 THEN

        INSERT INTO temp_details VALUES(db,tbl,clmn);
    END IF;

        IF done=1 THEN
            LEAVE table_loop;
        END IF;

END LOOP;
CLOSE table_cur;
SELECT * FROM temp_details;
    END
4

2 回答 2

0

问题一定是由于:

DECLARE searchUserId int (11);  

和:

SET @searchUserId = searchUserId;
SELECT  searchUserId;
PREPARE searchUserId FROM @searchUserId;
EXECUTE searchUserId;

我假设您认为searchUserId有价值。但是在代码中没有任何地方给它赋值。默认情况下它是一个NULL. 因此该语句EXECUTE searchUserId被翻译为EXECUTE NULL. 这导致了您指定的错误。

searchUserId要解决它,您应该首先为声明的变量分配一个适当的值。

顺便说一句,你为什么searchUserId对局部变量、全局变量和语句别名使用相同的变量名?它会使程序的读者感到困惑,因此不建议练习。

于 2012-07-26T13:23:23.473 回答
0

我想问题在于这个语句创建语句:

SELECT concat('SELECT COUNT(*) INTO @CNT_VALUE FROM `',table_name,'` WHERE `', in_column_name,'` = "',in_search,'"') ,table_name,column_name FROM information_schema.`COLUMNS` WHERE TABLE_SCHEMA = 'comments' and column_name=in_column_name ;

请独立执行语句,看看你得到了什么。

于 2012-07-26T13:31:29.207 回答