3

テーブルから次の一意の ID を取得し、他の 2 つのテーブルの ID として使用するストアド プロシージャを MySQL に持っています (それを行う最良の方法ではありませんが、他の人のコードを変更しています)。ここ)。手順は次のとおりです。

DELIMITER $$
CREATE DEFINER=`root`@`%` PROCEDURE `GetNextID`( OUT id bigint )
BEGIN
  DECLARE uid VARCHAR(255);
  SET uid = uuid();
  INSERT INTO `ident_column_generator` (u) VALUES (uid);
  SELECT ID INTO id FROM `ident_column_generator` WHERE u = uid;
  DELETE FROM `ident_column_generator` WHERE u = uid;
END$$

MySQL Workbench からプロシージャを呼び出すと、次のようになります。

CALL GetNextID( @id );
SELECT @id;

@id はNULL. 何が問題なのか理解できませんか?プロシージャを呼び出す前に実行SET @id = 0;しても、後で NULL になります。プロシージャ内の関数を MySQL Workbench から手動で呼び出すと、正常に@id出力されます。

SET @uid = uuid();
INSERT INTO `ident_column_generator` (u) VALUES (@uid);
SELECT ID INTO @id FROM `ident_column_generator` WHERE u = @uid;
DELETE FROM `ident_column_generator` WHERE u = @uid;
SELECT @id;

これは @id を有効な数値として出力します。

id適切に設定されていない理由はありますか?

4

2 に答える 2

3

通常、これには 3 時間かかり、質問を投稿した直後に問題が見つかりました。したがって、今後の参考のために: MySQL は、変数に関する大文字と小文字を区別しないようです。ID列名とid変数が明らかに完全に混乱していました。

プロシージャの入力パラメータ名を に変更するretIdと、完全に機能しました。

于 2013-07-16T10:29:36.657 に答える