【发布时间】:2020-01-17 15:57:01
【问题描述】:
我需要在具有 CASE 条件的两个表之间的存储过程中进行选择。
CREATE PROCEDURE PRO (...., TypeA TINYTEXT)
BEGIN
....
INSERT INTO
CASE TypeA
WHEN ValueA THEN `database`.`TableA`
WHEN ValueB THEN `database`.`TableB`
END
(`ColumnA`, `ColumnB`, `ColumnC`) VALUES (....);
END
...
...
END;
但它告诉我在这种情况下存在语法错误。 我哪里错了?
【问题讨论】:
-
语法无效;任何查询都不允许动态表确定;不是 INSERT,不是 SELECT,也不是 UPDATE。您可以动态构造一个可以准备和执行的查询字符串;但这与以类似方式构建客户端没有太大区别。
-
在这种情况下你需要一个动态 SQL 和变量。
-
另外,如果您在不同的表中插入数据,数据结构通常会存在不小的差异,因此您几乎不需要语法来执行您尝试执行的操作。既然字段显然相同,为什么会有两个结构相同的不同表?也许这两个表应该合并一个新的
TypeA字段。
标签: mysql sql stored-procedures mariadb case