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 21:35:33 浏览: 16
您的代码几乎正确,但是有一个小错误:在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"的提示信息。
相关问题
ERROR 1064 (42000) at line 5: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'delimeter && CREATE PROCEDURE set_stu_score ( IN stu_id VARCHAR(20), IN ' at line 1
很抱歉,我之前的回答有误,正确的代码应该是:
```sql
-- 创建存储过程
DELIMITER $$
CREATE PROCEDURE set_stu_score
(
IN stu_id VARCHAR(20),
IN course_id VARCHAR(20),
IN score DECIMAL(5,2)
)
BEGIN
UPDATE course_selection
SET grade = score
WHERE student_id = stu_id AND course_id = course_id;
END $$
DELIMITER ;
-- 执行存储过程
CALL set_stu_score('201810101101', '1001', 90);
```
在MySQL中,需要使用DELIMITER指定一个新的定界符,以便在存储过程中使用多个语句。在存储过程结束后,需要使用DELIMITER重新设置定界符。
在我的之前的回答中,我没有正确设置DELIMITER,导致语法错误。我非常抱歉给您带来的困扰。
解释一下这段代码:delimiter $$ create trigger insert_stu after insert on Student for each row begin declare @cid varchar(30); select @cid=Cid from inserted; update Class set Cnumber = Cnumber + 1 where Cid = @cid; end; $$ delimiter ;
这段代码是用于创建一个触发器 (trigger)。触发器是一种特殊的数据库对象,可以在数据库表中的数据发生变化时自动执行特定的操作。
具体来说,这个触发器的名称是 `insert_stu`,它会在 `Student` 表中插入一条记录之后自动触发。`for each row` 表示每插入一行记录就会触发一次该触发器。
在触发器的主体部分,首先声明了一个名为 `@cid` 的变量。这个变量是用来存储插入到 `Student` 表中的记录的 `Cid` 字段值。`declare` 表示声明变量,`varchar(30)` 表示该变量是一个长度为 30 的字符串类型。
接下来,使用 `select` 语句从 `inserted` 表中获取新插入的记录的 `Cid` 字段值,并将其赋值给 `@cid` 变量。`inserted` 是一个特殊的表,用于存储触发器所依赖的数据。在这个例子中,`inserted` 表中存储了新插入的 `Student` 记录的所有字段值。
最后,使用 `update` 语句更新 `Class` 表中的记录,将 `Cnumber` 字段的值增加 1。`where` 子句用于指定更新哪些记录,这里是根据 `Cid` 字段的值来匹配。这表示当向 `Student` 表中插入一条记录时,与该记录相关联的 `Class` 表中的 `Cnumber` 字段值都会自动加 1。