对于类,我将创建一个名为 add_parts 的存储过程,它将用于将记录添加到 parts_service 表中。它有 2 个输入参数,与该表中的part_id 和parts_qty 字段/数据类型相匹配。我还必须声明一个变量,该变量将保留另一个表服务中的 service_id 值,并使用 select into 将其设置为 MAX。这是我的代码:
/*Set DB context and drop the procedure if it exists (2 lines)*/
USE cf;
DROP PROCEDURE IF EXISTS add_parts;
/*Delimiter statement (1 line)*/
DELIMITER //
/*Create procedure statement & 2 int parameters.*/
CREATE PROCEDURE add_parts (
IN part_id_param INT,
IN parts_qty_param INT
)
BEGIN
/*Declare the internal int variable (1 line)*/
DECLARE service_id_var INT;
/*Declare sql_error variable, Declare continue handler, set sql_error variable (3 lines)*/
DECLARE sql_error TINYINT DEFAULT FALSE;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
SET sql_error = TRUE;
/*Set the internal int variable */
/*From the appropriate table (3 lines)*/
SELECT MAX(service_id) INTO service_id_var FROM service;
START TRANSACTION;
/*Insert into parts_service values statement */
INSERT INTO parts_service VALUES(DEFAULT, part_id, part_qty, service_id_var);
/* If/else conditional; if sql_error variable is false, commit the transaction and select the appropriate message*/
/* else, rollback the transaction and select the appropriate message */
IF sql_error = FALSE THEN
COMMIT;
SELECT 'Record was added!' AS Message;
ELSE
ROLLBACK;
SELECT 'The part id you entered does not exist' AS Message;
END IF;
END//
CALL add_parts(15,7);
最后一行中的 CALL 应返回“记录已添加!”而是返回“您输入的部件 ID 不存在”。我如何判断我的做法是否正确?
CREATE TABLE parts_service (
parts_service_id int(11) NOT NULL AUTO_INCREMENT,
part_id int(11) NOT NULL,
service_id int(11) NOT NULL,
parts_qty int(11) DEFAULT NULL,
PRIMARY KEY (parts_service_id),
KEY ps_fk_parts (part_id),
KEY ps_fk_service (service_id),
CONSTRAINT ps_fk_parts FOREIGN KEY (part_id) REFERENCES parts (part_id),
CONSTRAINT ps_fk_service FOREIGN KEY (service_id) REFERENCES service (service_id)
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
最佳答案
啊哈,这两个乱了:
service_id int(11) NOT NULL,
parts_qty int(11) DEFAULT NULL,
尝试将 parts_qty
插入 service_id
时,查询(对 service
表有约束)一定会失败。
将插入内容切换为:
INSERT INTO parts_service VALUES(DEFAULT, part_id, service_id_var, part_qty);
或者,这可能更好,您可以显式设置要将值放入的列:
INSERT INTO parts_service
(`parts_service_id`, `part_id`, `parts_qty`, `service_id`)
VALUES
(DEFAULT, part_id, part_qty, service_id_var);
关于mysql - mySQL 中的存储过程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58848228/