如何通过MySQL中的存储过程提交查询?

时间:2010-11-23 13:11:04

标签: stored-procedures mysql

您好我正在尝试自动化MySQL中的历史跟踪程序。 该过程应更新表并使用uid作为名称创建另一个表。

CREATE PROCEDURE `InsertQueryStore`( u VARCHAR(128), ID INT, q VARCHAR(1024) )
BEGIN   
  INSERT INTO querystore(`qID`, `qstring`, `user`) VALUES(ID, q, u); # this works 
# DROP TABLE IF EXIST ID ; //Can I do something like this?
# CREATE TABLE ID q; // The q is a query string which should return results into to table ID
END;

然后我想称之为:

Call InsertQueryStore("myname", 100, "select * from mydb.table limit 10")

在过程中使用varchar变量的正确方法是什么?

事先谢谢你。 阿尔曼。

1 个答案:

答案 0 :(得分:1)

我认为采用的方法是使用动态SQL。

MySQL不像某些DBMS那样支持动态SQL,但它确实有PREPARE / EXECUTE方法来创建查询并执行它。看看您是否可以在存储过程中使用它们。

类似的东西:

CREATE PROCEDURE `InsertQueryStore`( u VARCHAR(128), ID INT, q VARCHAR(1024) )
BEGIN   
  INSERT INTO querystore(`qID`, `qstring`, `user`) VALUES(ID, q, u);

  PREPARE stmt FROM "DROP TABLE IF EXIST ?";
  EXECUTE stmt USING ID;
  DEALLOCATE PREPARE stmt;

  /* etc */
END;

如果您发现无法将参数化版本与'?'一起使用在这种情况下,只需使用CONCAT()将其与字符串中的实际值组合,就像在该阶段已知的那样。

reasonable article about it here中提到previous SO post