MySQL 存储过程插入选择

MySQL stored procedure insert select

提问人:Supriya_21 提问时间:10/5/2023 最后编辑:Denis MichealSupriya_21 更新时间:10/6/2023 访问量:39

问:

CREATE DEFINER=`generic_user`@`localhost` PROCEDURE `copy_GenericOperation`(IN genericInputID INT)

BEGIN

   DECLARE newOperationInfoId int;

   Insert into genericOperationInfoTable(createdBy, creationDate, modifiedBy, modificationDate, genericOperationId, cycleTime, notes, overrideFlag, processId, subProcessId, setupId)

   select createdBy, createdDate, updatedBy, updatedDate, operationId, cycleTime, notes, override, processId, subProcessId, setupId 

   from operationinfo

   where id=genericInputID;

   SELECT LAST_INSERT_ID() as newOperationInfoId;

   SET newOperationInfoId=LAST_INSERT_ID();

   Insert into genericTransactionTable(id, parameterId, value, genericOperationInfoId, overrideFlag)

   SELECT

      ot.parameterId, ot.value, newOperationInfoId, ot.overrideFlag

   FROM genericTransactionTable as ot

   where ot.genericOperationInfoId=genericInputID;

END

我正在尝试创建一个存储过程,以便将插入表中最后生成的 ID 插入到下一个表中

第一次插入工作正常,但我不确定为什么没有在第二个表中插入任何数据

mysql 数据库 存储过程

评论

1赞 P.Salmon 10/5/2023
可能,其中 ot.genericOperationInfoId=genericInputID;从来都不是真的。.为什么要插入到同一个表中?
0赞 Hasan Raza 10/5/2023
问题可能与设置 newOperationInfoId 值的方式有关。
0赞 Bill Karwin 10/5/2023
是否有名称与 同名的列?它将引用表的列,而不是变量。我假设您已经更改了问题中的列和变量名称,并且这些不是代码中的真实列名称。genericTransactionTablegenericInputID

答:

0赞 Supriya_21 10/6/2023 #1

我得到了解决方案,即声明的变量名和列名相同,因此存在歧义。 基本上我所看到的是,每当考虑新的变量 kr 声明或输入参数时。该名称不应与我们尝试插入或插入的任何列名称匹配