2014-11-02 2 views
0

Я написал процедуру PL/SQL, как:Чтение IN параметров в запросе в 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.

Я проверил свой стол, и для параметров, которые я поставляю, он должен возвращать только одну строку. Я думаю, что по какой-то причине значение параметра productid IN не читается в запросе select. Даже если я предоставляю некоторые случайные значения для параметра productid, он все равно дает ту же ошибку. Я не могу понять, где проблема.

ответ

3

Я не думаю, что компилятор различения между ProductID параметра и именем столбца ProductID. Попробуйте переименовать свой параметр в a_productId или что-то другое, отличное от имени столбца.

+0

PL/SQL не чувствителен к регистру, поэтому использование CamelCase не создает уникальный идентификатор. – APC

+1

Еще лучше, используйте псевдонимы: 'SELECT quantity INTO qty from Products, где Products.ProductID = checkProdQuantity.productid;' (так что вам не нужно изменять весь код вызова) –

2

Его happning, потому что, когда вы пишете

SELECT quantity INTO qty from Products where ProductID=productid;

области видимости Oracle интерпретирует productid как column_name и не в качестве входной переменной.

Измените имя входной переменной на нечто, отличное от имени столбца, и оно должно работать.

Надеется, что это помогает

Vishad

Смежные вопросы