我必须在我的表上编写一个触发器,它将执行以下功能。
- 在更新行之前,检查项目的价格
- 如果价格与上次价格相比发生了变化,则从另一个具有商品类型和关联表名称的表中选择表名称,插入商品名称的位置。
- 在所选表格中插入项目名称。
简单地说,我有一个表 (TypeNameTable),其中包含商品类别和相应的表名称,如果商品的价格发生变化,那么我必须从 中获取表名称TypeNameTable 并在表中插入项目名称,该表是从 TypeNameTable 检索到的。 当我动态获取表名时,我无法插入到表中。请建议如何去做。这是我正在做的:
BEGIN
#declare countryTableName varchar(50);
declare itemPrice int;
declare itemTableName text;
IF (New.Price != Old.Price) THEN
SET countryTableName = (select `ItemManager`.`TypeNames`.`TypeTableName`
from `ItemManager`.`TypeNames`
where `ItemManager`.`TypeNames`.`ItemType` = NEW.ItemType);
INSERT INTO `ItemManager`.itemTableName
( `ItemName`, `ItemPrice`,
VALUES
( NEW.Name, New.Price );
END IF;
END$$
我得到了错误
ItemManager
.itemTableName doesn't exists.
最佳答案
回答我自己的问题。
发现 MySQL 触发器 中不允许使用Dynamic SQL。
列出限制here .
然而,在 Oracle 中我们可以使用 PRAGMA AUTONOMOUS_TRANSACTION 在新上下文中执行查询,因此支持 Dynamic SQL。
示例列出here在点 27。
关于mysql - 在 mysql 触发器中使用 SQL 查询的结果作为表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6881213/