0
我試圖創建一個存儲過程,將接受一個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 |
+-----------+---------------------+
我使用遊標這是什麼想我需要使用,但我得到的錯誤,我不能解決這個嘗試就是我迄今所做
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 ;
有什麼想法嗎? 感謝