我正在尝试创建一个存储过程,该过程将接受 TYPEID 和用户编号作为参数,然后搜索尚未获取/已返回的可用条目(显示比较和查看表 1 和 2),然后插入一个新的贷款表中的行。在此之前检查用户是否被禁止(表 3,使用 SIGNAL 进行思考)。
数据:
TABLE1:
+-----------+----------+
| CODE | TYPEID |
+-----------+----------+
| 441 | mn014 |
| 223 | mn014 |
| 224 | mn014 |
| 655 | mn089 |
| 854 | mn089 |
| 449 | mn032 |
+-----------+----------+
TABLE2:
+-----------+----------+----------+
| CODE | TAKENDTE | RTURNDTE |
+-----------+----------+----------+
| 441 | 25/08/14 | 01/01/15 |
| 223 | 25/08/14 | 03/01/15 |
| 223 | 25/08/14 | 01/02/15 |
| 223 | 25/08/14 | NULL |
| 655 | 25/08/14 | 07/01/15 |
| 854 | 25/08/14 | NULL |
| 449 | 25/08/14 | 06/01/15 |
+-----------+---------------------+
TABLE3:
+-----------+----------+----------+
| USERNO | NAME | BANNED |
+-----------+----------+----------+
| 111 | Bob | 0 |
| 112 | Sally | 1 |
| 113 | Jim | 0 |
| 114 | Billy | 0 |
| 115 | Jessica | 0 |
| 116 | Fred | 0 |
| 117 | Patrik | 0 |
+-----------+---------------------+
我已经尝试使用 CURSOR,这是我认为我需要使用的,但是我遇到了我无法解决的错误,这是我到目前为止所做的
DELIMITER $$
CREATE PROCEDURE new_entry(IN isbn_search CHAR(17), useNO INT)
BEGIN
DECLARE complete BOOLEAN DEFAULT FALSE;
DECLARE newEntry VARCHAR (30) DEFAULT ' ';
DECLARE S CURSOR FOR
select t1.*
from table1 t1
where typeid = 'mn014' and
not exists (select 1
from table2 t2
where t2.code = t.code and
t2.rturndte is null
);
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET complete = TRUE;
OPEN S;
SET newLoan = ' ';
sloop : LOOP
FETCH NEXT INTO newLoan;
IF complete THEN
LEAVE sloop;
END IF;
SET newLoan = CONCAT (code, isbn, duration);
CLOSE S;
END$$
DELIMITER ;
任何想法?谢谢