DELIMITER ;;CREATE DEFINER=~root~@localhost” PROCEDUREextend time'(in book num in int out result varchar(5)) begin declare latetime smallint; declare result varchar(5) default 成功';declare borrow rec num in int; set borrow rec num in = (select borrow rec_num from borrows where borrow state = 还' and book num = book num in); select datediff(CURDATE() , borrow time) borrow duration into latetime from borrows where borrow rec num = borrow rec num in;if latetime > @ then set result = 超期';else update borrows set borrow duration = borrow duration + 15where borrow rec num = borrow rec num in; end if; select result; end ;;
时间: 2024-03-04 15:53:27 浏览: 32
这是一段MySQL存储过程的代码,作用是延长借阅时间。具体来说,这段代码会接受一个书籍编号(book num in),然后会在借阅记录表(borrows)中查找该书籍的借阅记录,并且该记录的状态为“已还”(borrow state = '还')。如果找到符合条件的记录,那么会计算出该记录的借阅时长(borrow duration),并且判断是否超期(latetime > @)。如果超期,那么将结果(result)设置为“超期”,否则将该记录的借阅时长增加15天,并将结果设置为“成功”。最后,返回结果(result)。其中的@是一个占位符,需要在调用存储过程时进行赋值。
相关问题
DELIMITER ;; CREATE DEFINER=~root~@localhost’ PROCEDUREupdate book*(in book num in int. in book name in varchar(30), in book_price in float. in book state in varchar(10), in book_position in varchar(30))begin update book message set book name = book name in ,book price = book price in,book state = book state in,book_position = book_position inwhere book num = book num in; end ;; DELIMITER ;
这是一段MySQL的存储过程代码,用于更新书籍信息。存储过程名为"update_book",参数包括书籍编号、书籍名称、书籍价格、书籍状态和书籍位置。在存储过程中,使用UPDATE语句更新book_message表中符合条件的记录。DELIMITER用于设置自定义分隔符,以避免存储过程中的分号与SQL语句本身的分号冲突。
DELIMITER ;; CREATE DEFINER=~root~@localhostPROCEDURE check reader sigh up(in reader_name in varchar(20), in id num in varchar(20) , out result varchar(1))begin select exists(select * from readers where binary reader name = reader name in) into result;if result =1' then set result = 用户名已存在';select result; commit; end if; select exists(select * from readers where id num = id num in) into result;if result =1' then set result =身份证号已被注册·;end if; if result ="e' then select "Ok'; else select result; end if;
这段代码也是用于检查读者注册信息的存储过程,但是它存在多个语法错误。
首先,DEFINER=~root~@localhost 应该是 DEFINER='root'@'localhost',其中 root 应该是一个有效的 MySQL 用户名。
其次,在第一行中,分隔符的定义应该使用两个分号,而不是一个。
接下来,在第一行的 PROCEDURE 后面应该加上一个空格,即 PROCEDURE check_reader_sigh_up。
在第二个输入参数 id num 的定义中,应该使用下划线来连接单词,即 id_num。
在第二个 SELECT 语句中,字符串“身份证号已被注册·”中的“·”应该是一个英文句点。
在最后一个 IF 语句中,字符串“e'”应该是单引号“'”。
最后,在存储过程的结束标记中,应该使用两个分号。
修改后的代码如下:
```
DELIMITER ;;
CREATE DEFINER='root'@'localhost' PROCEDURE check_reader_sigh_up(in reader_name_in varchar(20), in id_num_in varchar(20), out result varchar(1))
BEGIN
SELECT EXISTS(SELECT * FROM readers WHERE binary reader_name = reader_name_in) INTO result;
IF result = 1 THEN
SET result = '用户名已存在';
SELECT result;
COMMIT;
END IF;
SELECT EXISTS(SELECT * FROM readers WHERE id_num = id_num_in) INTO result;
IF result = 1 THEN
SET result = '身份证号已被注册';
END IF;
IF result = 'e' THEN
SELECT 'Ok';
ELSE
SELECT result;
END IF;
END ;;
DELIMITER ;
```