我有兩個表PLSQL程序通過結果
圖書查詢兩個表和循環一本書(Book.no_of_copies是5,然後在副本表中有5個副本(行))
我該怎麼寫一個可以將輸入參數作爲book_id的過程,並且首先查詢Book表,找到no_of_copies。如果no_of_copies是肯定的,則查詢Copies表並顯示每個結果的copy_number,shelf_letter和call_number。
我有兩個表PLSQL程序通過結果
圖書查詢兩個表和循環一本書(Book.no_of_copies是5,然後在副本表中有5個副本(行))
我該怎麼寫一個可以將輸入參數作爲book_id的過程,並且首先查詢Book表,找到no_of_copies。如果no_of_copies是肯定的,則查詢Copies表並顯示每個結果的copy_number,shelf_letter和call_number。
CREATE PROCEDURE (P_BOOK_ID INTEGER)
CURSOR C1(L_BOOK_ID INTEGER) IS
SELECT * FROM COPIES WHERE BOOK_ID = L_BOOK_ID;
L_NUM_COPIES NUMBER;
BEGIN
SELECT NO_OF_COPIES INTO L_NUM_COPIES FROM BOOK WHERE BOOK_ID = P_BOOK_ID;
IF L_NUM_COPIES>0
THEN
FOR CUR IN C1(P_BOOK_ID)
LOOP
DBMS_OUTPUT.PUT_LINE(CUR.COPY_NUMBER);
END LOOP;
END;
OR
CREATE PROCEDURE (P_BOOK_ID INTEGER)
CURSOR C1(L_BOOK_ID INTEGER) IS
SELECT B.book_id,
B.shelf_letter,
B.call_number,
B.no_of_copies,
C.copy_id,
C.copy_number
FROM COPIES C,
BOOK B
WHERE C.BOOK_ID = L_BOOK_ID
AND C.BOOK_ID=B.BOOK_ID;
L_NUM_COPIES NUMBER;
BEGIN
FOR CUR IN C1(P_BOOK_ID)
LOOP
DBMS_OUTPUT.PUT_LINE(CUR.book_id);
DBMS_OUTPUT.PUT_LINE(CUR.shelf_letter);
DBMS_OUTPUT.PUT_LINE(CUR.call_number);
DBMS_OUTPUT.PUT_LINE(CUR.no_of_copies);
DBMS_OUTPUT.PUT_LINE(CUR.copy_id);
DBMS_OUTPUT.PUT_LINE(CUR.copy_number);
END LOOP;
END;
請不要這樣做。沒有人。 –
@CleverIdeaWidgetry爲什麼我們不應該這樣做? –
@FahmiRamadhan我原來的評論是指最初發布的兩種遊標方法。然後在我的評論被更新後,在一個單一的光標 - 這是無限更好。我應該自己完成編輯,而不是僅僅說「不」。 –
...或者,呃,你可以只寫這個非常簡單的查詢:
select copies.copy_number,
book.shelf_letter,
book.call_number
from book
join copies
on copies.book_id = book.book_id
where book.book_id = ???
and book.no_of_copies > 0
如果非要你可以用這一個過程,但我無法想象你爲什麼需要。
謝謝。我只是被迫做爲一個程序,而不是做直接的方式..瘋狂的世界我想:) – user6123723
存儲過程本身不顯示任何內容,它返回輸出參數。 – Sebas