0

我在 MySQL 数据库中发现了两个非常奇怪的问题。

我的 MySQL 数据库版本是5.6

问题1:

我有更新列值的简单存储过程:

存储过程如下:

drop PROCEDURE if exists mysql_TestProc;

CREATE PROCEDURE mysql_TestProc(Finaltable VARCHAR(1024),ColTOProcess VARCHAR(1024)
,strFind TEXT,strReplace TEXT)

Label1:BEGIN   


 DECLARE code VARCHAR(1024) DEFAULT '00000' ;

 -- Exception Handler

 DECLARE CONTINUE HANDLER FOR SQLEXCEPTION   
    BEGIN            

 GET DIAGNOSTICS CONDITION 1 
        code = RETURNED_SQLSTATE;

    END;             

      -- generate dynamic Query 
      SET @s:=CONCAT('UPDATE ',FinalTable,' SET 
',ColTOProcess,'=REPLACE(',ColTOProcess,',\'',strFind,'\',\'',strReplace ,'\');');             
      PREPARE stmt from @s;     
      EXECUTE stmt;

      -- If any exeption during query execution then Exception Handler will 
      -- assign error code to "code" variable 
      -- else "code" variable will have default value.

      IF code != '00000' THEN       
      -- Error found..
      select code ;      
      LEAVE Label1;  
      END IF;  
END;


call mysql_TestProc("AnyTableName","ColumnName","Find Value","Replace Value").

如果您使用适当的参数调用上述存储过程,它将成功更新值。

但在我的数据库中,它成功更新了错误代码“ 42S22 ”的值。

我换了机器,然后一切正常。

所以这种奇怪的行为只适用于我的机器和我的数据库(“_temp”)。

问题2:

我有如下简单的程序:

DROP PROCEDURE IF EXISTS mysql_PrepareLogTable;

CREATE PROCEDURE mysql_PrepareLogTable(LogTable VARCHAR(1024),code TEXT,comment TEXT,category VARCHAR(1024),timestamp DATETIME,duration VARCHAR(100),rows INT,msg TEXT)
BEGIN   
SET code=CONCAT(comment,' \n ',code);  
 SET @tempprepare=CONCAT('INSERT INTO ',LogTable,' VALUES ("',code,'","',category,'","',timestamp,'","',duration,'",',rows,',','"',msg,'")');   
 PREPARE stmt from @tempprepare;     
EXECUTE stmt;  
END;

我可以编译上面的存储过程脚本,除了一个数据库(“test2”)之外的所有mysql数据库。只有在数据库“test2”中,我无法编译上面的存储过程脚本。即使我删除了存储过程,然后尝试执行脚本,但仍然无法在数据库“test2”中编译脚本。

我正在使用 Toad 6 和 mysql workbench 6.0。

因此,任何人都对这两个问题有任何想法。

谢谢你,罗纳克

4

0 回答 0