【发布时间】:2018-12-16 17:14:13
【问题描述】:
我已经编写了一个非常复杂的存储过程,但现在我想使用变量为过程带来一些动态。在 sql 编程方面,我仍然称自己为新手,所以我可能完全走错了我想要实现的目标。 我在 Windows 上运行最新的 MySQL 服务器 8.0.13(仅用于本地开发)。
我目前对存储过程的想法
... 使用输入变量
... 声明一个游标(使用 var)
... 创建一个临时表(使用 var)
... 遍历临时表
... 将数据写入新表
我想我了解一些基本工具来做到这一点,但我在处理变量时一次又一次地失败 以下代码显示了我已经失败的项目的顶部。
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'ed 字符串以构建语句,EXECUTE'ed 它 > 在存储过程的 DECLAREpart 中不起作用
在这一点上,我对如何处理这个问题的每一个提示或全新的想法完全持开放态度。
感谢您的建议!
[更新]
我的方法有一些缺陷,我不理解临时表的基本概念,例如对于会话来说是唯一的。多亏了“D's Query”和更多阅读,我现在有了一个工作存储过程,而不必处理游标和临时表的动态名称。
【问题讨论】: