Mysql的行为很奇怪

时间:2013-08-21 10:08:18

标签: mysql

我在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。

所以,任何人都对这两个问题有所了解。

谢谢你, Ronak

0 个答案:

没有答案