為啥存盤程序不能判斷借閱流水號不存在呢
測驗發現可以判斷是否有可借書目,如果有則拋出例外20010
但是例外20007無法判斷。。。求救
CREATE OR REPLACE PROCEDURE yuyue --預約PROCEDURE
(yy_id READER_RESERVATION.RESERVATION_NUM%TYPE, --預約流水號
borrow_id READER.RE_NUM%TYPE, --借書證號
yy_ISBN BOOKS_INFO.BK_ISBN%TYPE) --圖書ISBN號
As
nowdate varchar2(12); --記錄當前預約時間
borrowed integer; --檢查該ISBN下的圖書借出入狀態
reader_num READER.RE_NUM%TYPE; --借書證號臨時變數
reader_num_exist BOOLEAN:=TRUE; --借閱證號存在判斷
reservation_error EXCEPTION; --預約出現錯誤(該書有未借),例外處理
BEGIN
SELECT RE_NUM INTO reader_num FROM READER --判斷借書證號是否存在
WHERE READER.RE_NUM = borrow_id;
if reader_num IS NULL
then reader_num_exist:=FALSE;
end if;
SELECT to_char(sysdate,'yyyy-mm-dd') INTO nowdate FROM dual; --獲取時間
SELECT count(*) INTO borrowed FROM BOOKS_INFO WHERE BK_ISBN = yy_ISBN AND BOOK_BORROWED = '否'; --判斷該書是否都已被借出
IF borrowed = 0 THEN --如果都已被借出則進行預約插入操作
INSERT INTO READER_RESERVATION
VALUES(yy_id,borrow_id,yy_ISBN,to_date(nowdate,'yyyy-mm-dd'));
dbms_output.put_line('預約成功');
ELSE
RAISE reservation_error;--拋出預約例外
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN ROLLBACK;
IF(reader_num_exist=FALSE) THEN RAISE_APPLICATION_ERROR(-20007,'ERROR:借書證號不存在');
END IF;
WHEN reservation_error THEN RAISE_APPLICATION_ERROR(-20010,'ERROR:該書目有可借圖書,請查找');
end;
uj5u.com熱心網友回復:
SELECT RE_NUM INTO reader_num FROM READER --判斷借書證號是否存在WHERE READER.RE_NUM = borrow_id;
查不到記錄就拋例外了,不會走下面的IF判斷
你可以修改為count(*)來判斷,=0
uj5u.com熱心網友回復:
去掉false的判斷EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20007,'ERROR:借書證號不存在');
uj5u.com熱心網友回復:
SELECT count(*) INTO reader_num FROM READER WHERE READER.RE_NUM = borrow_id;--判斷借書證號是否存在
if reader_num = 0
then reader_num_exist:=FALSE;
end if;
這么改后還是不走IF。。。。
uj5u.com熱心網友回復:
BEGIN
SELECT count(*) INTO reader_num FROM READER WHERE READER.RE_NUM = borrow_id;--判斷借書證號是否存在
上面
下面
EXCEPTION
WHEN NO_DATA_FOUND THEN RAISE_APPLICATION_ERROR(-20007,'ERROR:借書證號不存在');
這樣還是不走IF。。錯誤ORA-02291。應該是沒走IF直接想把錯誤資料往表里插,可關聯表里沒有這個資料所以插不進去報了錯
uj5u.com熱心網友回復:
你可以用PL/DEV test功能,跟蹤定位一下,不走IF,肯定是你的當前邏輯不符合條件
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/113608.html
標籤:基礎和管理
上一篇:Java鏈接Oracle拋例外,但是用PLSQL能連上
下一篇:日期欄位的查詢
