DELIMITER $$ CREATE PROCEDURE set_stu_score ( IN stu_id VARCHAR(20), IN course_id VARCHAR(20), IN score DECIMAL(5,2) ) BEGIN UPDATE choose SET score = score WHERE student_id = stu_id AND course_id = course_id; END $$ DELIMITER ; -- 执行存储过程 CALL set_stu_score('201810101101', '1001', 90);
时间: 2024-03-25 13:35:33 浏览: 55
CSV.rar_In Writing_as3 csv
您的代码几乎正确,但是有一个小错误:在UPDATE语句中,score = score并没有改变原有的score值,需要将它改成score = @score。另外,存储过程中的table名字是choose,而不是student_course,如果您的数据库中不存在choose表,需要将表名改成您的表名。
以下是经过修改后的代码:
```sql
DELIMITER $$
CREATE PROCEDURE set_stu_score (
IN stu_id VARCHAR(20),
IN course_id VARCHAR(20),
IN score DECIMAL(5,2)
)
BEGIN
UPDATE choose
SET score = @score
WHERE student_id = stu_id AND course_id = course_id;
END $$
DELIMITER ;
-- 执行存储过程
CALL set_stu_score('201810101101', '1001', 90);
```
注意,我们在存储过程中使用了参数@score来更新成绩,参数名字与传入的参数score不一样,这是因为参数名字和列名字相同会导致歧义。同时,我们在调用存储过程时,需要使用CALL命令。如果您的存储过程执行成功,会返回一个"Query OK"的提示信息。
阅读全文