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 つの問題について何らかの考えを持っています。
ありがとう、ロナック