テーブルから次の一意の 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
適切に設定されていない理由はありますか?