stored-procedures - MySQL中如何通过存储过程提交查询?

标签 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 变量的正确方法是什么?

先谢谢你。 阿曼。

最佳答案

我认为解决这个问题的方法是使用动态 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 中提到.

关于stored-procedures - MySQL中如何通过存储过程提交查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4256318/

相关文章:

Mysql存储过程if语法

stored-procedures - SQL Server 2012 存储过程被自动删除

mysql - 复制唯一字段时返回错误消息

mysql - Mysql中的存储过程: First try

php - 如何控制两个表之间的mysql查询执行时间

javascript - 悬停时弹出,从 Mysql 数据库填写

sql-server - 执行存储过程时出现错误 "Incorrect syntax near ' -' "

mysql - 在Mysql中动态创建国家REGEXP

mysql - 为什么找不到已经使用3306端口的服务器

Mysql 每月分区 - 错误代码 : 1503 A PRIMARY KEY must include all columns in the table's partitioning function