【发布时间】:2021-12-12 18:24:11
【问题描述】:
我想使用 while 循环一一更新日期。日期应该增加一天,但我的代码没有执行此任务。我要更新的表是 Session 表,它有复合 PK (Code+Date) ,所以我想更新这个日期和 PK 的其他部分代码 正在引用模块表中的 代码。 这是生成表格的脚本
CREATE TABLE course (
`code` CHAR(3) NOT NULL,
`name` VARCHAR(30) NOT NULL,
credits TINYINT NOT NULL,
CONSTRAINT course_code PRIMARY KEY(`code`));
CREATE TABLE module (
`code` CHAR(2) NOT NULL,
`name` VARCHAR(30) NOT NULL,
cost DECIMAL(8,2) NOT NULL,
credits TINYINT NOT NULL,
course_code CHAR(3) NOT NULL,
CONSTRAINT module_code PRIMARY KEY(code),
CONSTRAINT F_code FOREIGN KEY (`course_code`)
REFERENCES course (`code`)
ON DELETE CASCADE
ON UPDATE CASCADE);
CREATE TABLE session (
`code` CHAR(2) NOT NULL,
`date` DATE NOT NULL,
room VARCHAR(30) NULL,
CONSTRAINT code_date_PK PRIMARY KEY(code, date),
CONSTRAINT F_session FOREIGN KEY (`code`)
REFERENCES module(`code`)
ON DELETE CASCADE
ON UPDATE CASCADE);
INSERT INTO course (`code`,`name`, credits) VALUES
('WSD', 'Web Systems Development', 75),
('DDM', 'Database Design & Management', 100),
('NSF', 'Network Security & Forensics', 75);
INSERT INTO module (`code`, `name`, cost, credits, course_code) VALUES
('A2', 'ASP.NET', 250, 25, 'WSD'),
('A3', 'PHP', 250, 25, 'WSD'),
('A4', 'JavaFX', 350, 25, 'WSD'),
('B2', 'Oracle', 750, 50, 'DDM'),
('B3', 'SQLS', 750, 50, 'DDM');
INSERT INTO `session` (`code`, `date`, room) VALUES
('A2', '2021.06.05', 305),
('A3', '2021.06.06', 307),
('A4', '2021.06.07', 208),
('B2', '2021.08.22', 208),
('B3', '2021.08.23', 303),
('A2', '2022.05.01', 303),
('A3', '2022.05.02', 305);
喜欢
- 2021-06-05
- 2021-06-07
- 2021-06-08
- 2021-06-09
这是我的 SP 代码
CREATE PROCEDURE Modify_Schedule_5(IN courseCode Varchar(30), IN startDate date)
BEGIN
DECLARE loopCounter int;
DECLARE startDateCounter date;
SET loopCounter=(SELECT COUNT(*) from session);
SET startDateCounter=DATE_ADD(startDate, INTERVAL 1 day);
WHILE loopCounter>0 DO
UPDATE module m INNER JOIN session s on m.code=s.code
SET s.date=startDateCounter
where m.course_code=courseCode;
SET loopCounter=loopCounter-1;
SET startDateCounter=DATE_ADD(startDateCounter, INTERVAL 1 day);
END WHILE;
END $$
DELIMITER ;
非常感谢
【问题讨论】:
-
代码看起来不错,请添加示例数据来证明您的断言。
-
@P.Salmon 是的,一切都很好
-
那么请删除问题..
-
@P.Salmon 我的意思是代码看起来不错,但为什么它不增加日期。
-
日期确实增加了,但更新的行为可能与您认为的不一样,请将示例数据和预期结果作为文本添加到问题中。