2014-11-02 45 views
0

我寫了一個PL/SQL程序作爲查詢:讀取參數在PL/SQL

CREATE OR REPLACE PROCEDURE checkProdQuantity (productid IN number, orderqty IN number) 
IS 
    qty number; 
    qty_diff number; 
BEGIN 
    SELECT quantity INTO qty from Products where ProductID=productid; 
    IF orderqty>qty THEN 
      dbms_output.put_line('Ordered quatity is greater than available quantity'); 
    ELSE 
      qty_diff:=qty-orderqty; 
      UPDATE Products set quantity=qty_diff where ProductID=productid; 
    END IF; 
END; 
/

但是,當我嘗試用有效的參數來執行這個程序,它顯示了一個錯誤:exact fetch returns more than the requested number of rows

我檢查了我的表,併爲我提供的參數應該只返回一行。我認爲出於某種原因,在select查詢中沒有讀取productid IN參數的值。即使我爲productid參數提供了一些隨機值,它仍會給出相同的錯誤。我無法弄清楚問題出在哪裏。

回答

3

我不認爲編譯器參數的productid和列名產品ID之間的區分。 嘗試將參數重命名爲a_productId,或者與列名稱不同。

+0

PL/SQL不區分大小寫,因此使用CamelCase不會創建唯一標識符。 – APC 2014-11-02 11:17:23

+1

更好的辦法是使用別名:'SELECT Products INTO qty from Products where Products.ProductID = checkProdQ​​uantity.productid;'(所以你不需要改變所有的調用代碼) – 2014-11-03 01:32:30

2

其happning因爲,當你寫

SELECT quantity INTO qty from Products where ProductID=productid;

甲骨文範圍分辨率解釋productid作爲列名,而不是作爲輸入變量。

將輸入變量的名稱更改爲列名以外的名稱,它應該可以工作。

希望它可以幫助

Vishad