首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用存储过程中的参数获取动态表名

使用存储过程中的参数获取动态表名
EN

Stack Overflow用户
提问于 2018-12-17 01:14:13
回答 1查看 631关注 0票数 0

我已经编写了一个相当复杂的存储过程,但现在我想使用变量在过程中引入一些动态性。当涉及到sql编程时,我仍然认为自己是一个新手,所以我可能完全走错了我想要实现的道路。我在windows上运行最新的MySQL服务器8.0.13 (仅供本地开发人员使用)。

我目前对存储过程的看法

..。使用输入变量

..。声明游标(使用var)

..。创建临时表(使用var)

..。遍历临时表

..。将数据写入新表

我想我理解一些基本的工具,但是我在处理变量时失败了一次又一次。下面的代码显示了我已经失败的项目的顶部部分。

代码语言:javascript
复制
 PROCEDURE sprProcedure (
  IN vInputParameter varchar(64)
 )
 BEGIN
  DECLARE vFinished INTEGER DEFAULT 0;

  -- declare cursor
  DECLARE cCursor CURSOR FOR SELECT * FROM tbltmp_(vInputParameter);
  DECLARE CONTINUE HANDLER 
    FOR NOT FOUND SET vFinished = 1;

  -- drop / create temp table
  DROP TABLE IF EXISTS (vInputParameter);
  CREATE TEMPORARY TABLE tbltmp_(vInputParameter)
   SELECT * FROM `tbl_DataSource`; 

..。我没有粘贴任何进一步的代码,因为我无法处理以下问题。

我试过了

..。在DECLARE CURSOR语句中未解析直接使用变量>变量

..。不允许在local-variables之前定义user-defined变量

对字符串执行CONCAT操作以构建语句,并对其执行EXECUTE操作,但在存储过程的DECLARE部分不起作用.

在这一点上,我完全对如何处理这一点的每一个提示或全新的想法持开放态度。

谢谢你的建议!

更新

我的方法有一些缺陷,我不理解临时表的基本概念,例如,对于会话是唯一的。多亏了“D的查询”和更多的阅读,我现在有了一个可以工作的存储过程,而不必处理游标和临时表的动态名称。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-17 01:58:18

我不知道您实际上关注的是什么,但是可以使用存储过程中的预准备语句加载动态表,但是预准备语句不能用于游标。

预准备语句的示例如下

代码语言:javascript
复制
SET $sql=CONCAT('SELECT * from ', var_tablename);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53804607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档