2013-10-31 27 views
0
  1. 我需要打出來的循環或不執行的循環,當找不到ITEM_ID:退出與NOT_FOUND循環時ITEM_ID沒有找到

    BEGIN 
    FOR item IN(SELECT ITEM.ITEM_ID, 
    ITEM.ITEM_DESC, 
    INVENTORY.INV_PRICE 
    FROM ITEM 
    INNER JOIN INVENTORY 
    ON ITEM.ITEM_ID = INVENTORY.ITEM_ID 
    WHERE ITEM.ITEM_ID = '1' 
    ORDER BY ITEM.ITEM_ID, 
    INVENTORY.INV_PRICE) 
    LOOP 
    DBMS_OUTPUT.PUT_LINE(
    item.ITEM_ID||' '||item.ITEM_DESC||' ' ||item.INV_PRICE); 
    END LOOP; 
    END; 
    

另外,我需要打印出類似DBMS_OUTPUT.PUT_LINE('Item not found!');

+0

此外,我需要打印出像DBMS_OUTPUT.PUT_LINE('Item not found!'); –

+0

加入條件在ITEM_ID上,這意味着它總是被找到或者查詢不會返回任何東西 –

+0

那麼我可以在它檢查兩個表的位置嗎?或者如果查詢不返回任何內容以顯示消息? –

回答

1

沒有必要break out of the loop when an item is not found

FOR record IN (select-query) LOOP statement(s) END LOOP
光標在Oracle術語LOOP,這裏是文檔:http://docs.oracle.com/cd/E18283_01/appdev.112/e17126/cursor_for_loop_statement.htm

光標for循環首先執行查詢,然後查詢返回的每一條記錄,則執行LOOP之間的語句。 ..END LOOP。

當查詢renturn沒有行時,循環代碼根本不會執行。

如果我們需要檢測cursor for循環中的查詢是否返回某些行,那麼最簡單的方法是聲明一個布爾變量併爲LOOP..END LOOP塊指定一個值:

DECLARE 
    rows_found BOOLEAN := false; 
BEGIN 
    FOR record IN (select-query) 
    LOOP 
    rows_found := true; 
    ... do something else .... 
    END LOOP: 
    IF NOT rows_found THEN 
    DBMS_OUTPUT.PUT_LINE('Item not found!'); 
    END IF; 
END; 
+0

這工作非常感謝你! –

0

問:那麼我可以在它檢查兩個表嗎?或者如果查詢不返回任何內容以顯示消息?

答:也許FULL JOIN會做的。試着讓我們知道。

BEGIN 
    FOR item IN(SELECT ITEM.ITEM_ID, 
       ITEM.ITEM_DESC, 
       INVENTORY.INV_PRICE 
       FROM ITEM 
       FULL JOIN INVENTORY 
       ON ITEM.ITEM_ID = INVENTORY.ITEM_ID 
       WHERE ITEM.ITEM_ID = '1') 
    LOOP 
     IF ITEM.ITEM_ID IS NULL OR INVENTORY.ITEM_ID IS NULL THEN 
      EXIT; 
     ELSE 
      DBMS_OUTPUT.PUT_LINE(item.ITEM_ID||' '||item.ITEM_DESC||' ' ||item.INV_PRICE); 
     END IF; 
    END LOOP; 
-- in PLSQL if query doesn’t return anything exception is raised 
EXCEPTION 
    WHEN NO_DATA_FOUND THEN 
     DBMS_OUTPUT.PUT_LINE('NO_DATA_FOUND'); 
END; 
+0

完全加入沒有工作......但Kordirko的答案確實......謝謝你的幫助! –