之前曾遇到过这个错误,知道触发器中不能直接和间接的使用动态SQL语句。可是目前我有这么一个问题,:
我创建了一个触发器,当向表tables中插入数据时,调用存储过程B,删除旧记录,添加新纪录。
存储过程B的内容大致如下:
DROP PROCEDURE IF EXISTS GAFIS_ADMIN_ModLog_AddOrUpdate  //
CREATE PROCEDURE GAFIS_ADMIN_ModLog_AddOrUpdate(p_tablename  VARCHAR(40), p_id  DECIMAL)
BEGIN 
  -- 删除原有记录
  SET @V_SQL := CONCAT('DELETE FROM ' , p_tablename , ' WHERE ID=' , p_id);
  PREPARE stmt FROM @V_SQL;
  EXECUTE stmt;
  DEALLOCATE PREPARE  stmt;
  
  -- 添加新纪录
  SET @V_SQL := CONCAT('INSERT INTO ' , p_tablename , '( ID,OPTIME) VALUES(' , p_id  , ', now())');
  PREPARE stmt FROM @V_SQL;
  EXECUTE stmt;
  DEALLOCATE PREPARE  stmt;
END;
//可是,我发现在调用过程中,就会报如上的错误。但是,因为要删除和插入的表明都要从外界传人,所以,我又必须使用这种SQL语句,这就出现了矛盾。我想请问下,针对我的情况,该如何解决这个矛盾呢?