まず、括弧が 1 つありません。この場合はまったく使用する必要はありません。
クエリ文字列を次のように変更します
Insert Into archived (select * from registrations WHERE id=$id)
^ ^
または単に
Insert Into archived select * from registrations WHERE id=$id
これがSQLFiddleのデモです
次にINSERT
、結果セットを返さないため、使用しないでくださいmysql_fetch_array()
。
第 3 に、データをコピーするだけでなく移動することが目的である場合は、後でコピーした行も削除する必要があります。
これで、すべてをストアド プロシージャに入れることができます
DELIMITER $$
CREATE PROCEDURE move_to_archive(IN _id INT)
BEGIN
START TRANSACTION;
INSERT INTO archived
SELECT *
FROM registrations
WHERE id = _id;
DELETE
FROM registrations
WHERE id = _id;
COMMIT;
END$$
DELIMITER ;
使用例:
CALL move_to_archive(2);
これがSQLFiddleのデモです