MySQLで作成済みストアドプロシージャの実行結果を既存のテーブルにupsertするには
既に作成済みのストアドプロシージャであるranking_longは新たに作成したそれを呼び出すためだけのストアドプロシージャによって、その定義内にCALL ranking_long
()と記述することにより以下の様な実行結果を出します。
product_id plg_count rank
11 6962271 1
10 2705517 2
379 1955067 3
378 196865 4
...........
上記の様に出された結果を既に作成してある全く同じ構造を持つテーブルdtb_rankingにupsert(同じproduct_idがあればupdate、なければinsert)するストアドプロシージャを作成したいと考え、とりあえず以下の様な記述を試しておりますが、エラーが表示されます(「記述上複数の誤りがあります」といった内容)。
INSERT INTO dtb_ranking (`product_id`,`plg_count`,`rank`) VALUES (CALL `ranking_long`())ON DUPLICATE KEY UPDATE plg_count = NEW.plg_count, rank = NEW.rank;
上記の目的を達成させるためにはどのような記述にしなければならないかご教示頂けませんでしょうか。
dtb_rankingの構造
product_id plg_count rank
~~~~~~~~~~~~~~~~~~~~~
ご教示からの記述:
INSERT INTO dtb_ranking (`product_id`,`plg_count`,`rank`) VALUES (CALL `ranking_long`()) ON DUPLICATE KEY UPDATE plg_count = VALUES(plg_count), rank = VALUES(rank);
その実行によって出されたメッセージ:
One or more errors have occurred while processing your request:
クエリの実行に失敗しました:『CREATE DEFINER=xxxxxxx
@%
PROCEDURE call_ranking_long
() NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER INSERT INTO dtb_ranking (product_id
,plg_count
,rank
) VALUES (CALL ranking_long
()) ON DUPLICATE KEY UPDATE plg_count = VALUES(plg_count), rank = VALUES(rank);』
MySQL のメッセージ: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CALL ranking_long
()) ON DUPLICATE KEY UPDATE plg_count = VALUES(plg_count), ra' at line 1