0

MySQL データベースで 2 つの非常に奇妙な問題を発見しました。

私の 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;

上記のストア プロシージャ スクリプトを、1 つのデータベース ("test2") を除くすべての mysql データベースでコンパイルできます。データベース「test2」でのみ、上記のストア プロシージャ スクリプトをコンパイルできません。ストア プロシージャを削除してスクリプトを実行しようとしても、データベース "test2" でスクリプトをコンパイルできませんでした。

Toad 6 と mysql ワークベンチ 6.0 を使用しています。

したがって、誰でもこれら 2 つの問題について何らかの考えを持っています。

ありがとう、ロナック

4

0 に答える 0