2016-12-18 26 views
1

如何驗證訂單?它只能在訂單(表格訂單)不大於庫存數量(表格產品)的情況下進行驗證。他們在兩個單獨的表格中,如在paranthesis之間提到的。這是我能想到的。在PL/SQL中創建驗證

declare prod number; order number; 
begin 
select qty into prod from products; 
end; 

begin 
select qty into order from orders; 
end; 
if order <= prod then 
return true; 
else 
return false; 
end if; 
+1

除了對該代碼的明顯改進之外,它似乎會起作用。這一切都取決於你想如何以及在哪裏實現這個 – Sebas

+0

匿名塊不能「返回」任何東西,所以即使你修復了語法錯誤(你有一個「開始」和兩個「結束」,你是缺少最後的'end'),並在查詢周圍添加某種'where'子句和異常處理(以防萬一您有多個產品或訂單),您需要決定您希望實際執行的操作。 –

回答

1

儘量不要使用它是「關鍵詞」,如「訂單」或別的什麼變數,因爲你的聲明將不會在某些情況下工作。只需爲它們設置前綴,如 - l_order(本地變量)或v_order(變量)。而且當沒有數據發現時,你也可能需要使用異常,所以它會是這樣的:

CREATE OR REPLACE FUNCTION is_enough_product RETURN BOOLEAN AS 
    l_prod NUMBER; 
    l_ORDER NUMBER; 
BEGIN 
    BEGIN 
    SELECT qty 
     INTO l_prod 
     FROM products; 

    EXCEPTION 
    WHEN no_data_found THEN 
     l_prod := 0; 
    END; 

    BEGIN 
    SELECT qty 
     INTO l_ORDER 
     FROM orders; 

    EXCEPTION 
    WHEN no_data_found THEN 
     l_ORDER := 0; 
    END; 
    IF l_ORDER <= l_prod THEN 
    RETURN TRUE; 
    ELSE 
    RETURN FALSE; 
    END IF; 
END; 
+0

這似乎仍然是兩個半塊,'l_order'只在第一個中定義。 –

+0

是啊,在記事本 – Leo

+0

寫它,我用這個代碼,並嘗試過,但它給了我一個錯誤: ORA-06550:1號線,列119:PLS-00103:出現符號「CREATE」在需要下列之一時:(開始的情況下聲明退出goto if循環mod空pragma提交返回選擇更新,同時帶<標識符><<繼續關閉當前刪除讀取鎖定插入打開回滾保存點集SQL執行提交FORALL合併管道淨化 BTW,謝謝你的答案,我真的很感激你想幫我 – ign30