mysql - 在 mysql 触发器中使用 SQL 查询的结果作为表名

标签 mysql triggers tablename

我必须在我的表上编写一个触发器,它将执行以下功能。

  • 在更新行之前,检查项目的价格
  • 如果价格与上次价格相比发生了变化,则从另一个具有商品类型和关联表名称的表中选择表名称,插入商品名称的位置。
  • 在所选表格中插入项目名称。

简单地说,我有一个表 (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/

相关文章:

mysql - 使用sql显示列中每个元素的总和?

sqlite - SQL触发递归级别过多

mysql - 支持转义查询标识符

sql - 使用oracle plsql触发器从生日计算年龄并将年龄插入表中

postgresql - PL/pgSQL : General Way to Update N Columns in Trigger?

c# - Entity Framework 6 表名作为 FK 值

entity-framework - 运行时 Entity Framework 表名映射

python - 如何使用 pymysql 将 mySQL 查询结果存储到 pandas DataFrame 中?

c# - Mysqli 到 php 到 c#

mysql - 尝试通过命令行连接mysql,密码后留空