如何使用mySql中的存储过程将存储过程的结果升级到表中

时间:2018-04-11 11:12:29

标签: mysql stored-procedures insert upsert

当我通过在存储过程中提及调用ranking_long()来运行存储过程ranking_long()时,结果如下。

product_id  plg_count   rank
11          6962271     1
10          2705517     2
379         1955067     3
378         196865      4
...........

现在我需要upsert(当存在相同的product_id时更新或者当没有相同的product_id时插入)将上面的结果放入名为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);


我收到如下错误消息。

处理您的请求时发生了一个或多个错误: 无法执行查询。:

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 - 您的SQL语法出错;校验   与您的MySQL服务器版本对应的手册   在'CALL ranking_long()'附近使用的语法在DUPLICATE KEY UPDATE上   plg_count = VALUES(plg_count),第1行的ra'

如果有人能告诉我应该用上面的脚本做什么(INSERT INTO dtb_ranking ......),我将不胜感激。

0 个答案:

没有答案