gpt4 book ai didi

mysql - 如何在MySQL中准备和执行多条语句?

转载 作者:行者123 更新时间:2023-11-29 16:18:40 25 4
gpt4 key购买 nike

我在 MySQL 数据库上有一个存储过程,用于更新我的记录。根据输入,向列添加小时数,或向列减去小时数。我使用 Appian 智能服务来调用此 SP 进行存储过程。我的问题是,如果尝试同时执行加法和减法(针对不同的行),则存储过程不会执行任何操作。它在我的流程模型中运行良好,但数据库未更新。如果我仅使用一个输入(加或减)运行 PM,那么它会相应地更新数据库。谁能告诉我我的 SP 做错了什么?注意:addAttendeeUsername 和removeAttendeeUsername 输入都是以逗号分隔的VARCHAR 字符串

    BEGIN

DECLARE startTime datetime;
DECLARE SQLStateCode varchar(5) DEFAULT '00000';
DECLARE ErrorNumber int;
DECLARE MessageText varchar(1000);

-- insert / update

set @sql = concat("UPDATE
XCS_APP_CERTIFICATION
SET
COMPLETED_HOURS = COMPLETED_HOURS + ", courseHours , ",
LAST_MODIFIED_BY = '", lastModifiedBy, "',
LAST_MODIFIED_ON = NOW()
WHERE
XCS_APP_CERTIFICATION.CREATED_BY in (" , addAttendeeUsername , ") AND VALID_START_DATE <= '", offeringEndDateTime, "'
AND GRACE_PER_END_DATE >= '", offeringEndDateTime,"' ");


set @sql2 = concat("UPDATE
XCS_APP_CERTIFICATION
SET
COMPLETED_HOURS = COMPLETED_HOURS - ", courseHours, ",
LAST_MODIFIED_BY = '", lastModifiedBy, "',
LAST_MODIFIED_ON = NOW()
WHERE
CREATED_BY IN (", removeAttendeeUsername, ") AND VALID_START_DATE <= '", offeringEndDateTime, "'
AND GRACE_PER_END_DATE >= '", offeringEndDateTime, "' ");

PREPARE stmt FROM @sql;
EXECUTE stmt;


PREPARE stmt2 FROM @sql2;
EXECUTE stmt2;

set successFlag = 1;

-- committing transaction
COMMIT;

END

最佳答案

不清楚,因为您没有提供过程参数声明,但我猜测 addAttendeeUsernameremoveAttendeeUsername 是字符串。但在 SQL 语法中不要在它们周围使用引号。因此它们将被解释为列名称,这无疑是找不到的。

您确实应该使用查询参数组合输入变量,而不是将它们连接到 SQL 中。

set @sql = concat("UPDATE
XCS_APP_CERTIFICATION
SET
COMPLETED_HOURS = COMPLETED_HOURS + ?
LAST_MODIFIED_BY = ?,
LAST_MODIFIED_ON = NOW()
WHERE
XCS_APP_CERTIFICATION.CREATED_BY in (?) AND VALID_START_DATE <= ?
AND GRACE_PER_END_DATE >= ? ");

SET @courseHours = courseHours,
@lastModifiedBy = lastModifiedBy,
@addAttendeeUsername = addAttendeeUsername,
@offeringEndDateTime = offeringEndDateTime;

PREPARE stmt FROM @sql;
EXECUTE stmt USING @courseHours, @lastModifiedBy,@addAttendeeUsername,
@offeringEndDateTime, @offeringEndDateTime;

当您EXECUTE时,您必须使用 session 变量(带有@符号的类型),而不是局部变量。

关于mysql - 如何在MySQL中准备和执行多条语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54639927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com