既に作成済みのストアドプロシージャである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