2012-03-15 2 views
0

У меня есть таблица поставщика_продукта (supp_id, prod_id, invoice_id, цена) и таблица счетов (invoice_id, balance). Я попробовал сохраненную процедуру. данный (supp_id) должен иметь все существующие invoice_id и отображать баланс. вот мой код:oracle Сохраненная процедура получения суммы (баланса) с учетом параметра

set serverouput on; 
create or replace 
Procedure SUP_loop 
(v_SUPPLIER_ID int ) 
AS 
    CURSOR c_SUP IS 
    select SUPPLIER_ID , SUPP_INVOICE_ID, balance 
     from SUPPLIER_PRODUCT, supplier_invoice 
    where SUPPLIER_ID=v_SUPPLIER_ID 
     and supp_invoice_id.supplier_product=supp_invoice_id.supplier_invoice; 
BEGIN 
    --LOOP WITH IMPLICIT VARIABLE DECLARED 
    --AUTOMATIC, OPEN FETCH, CLOSE 

    FOR v_SUP_data IN c_SUP LOOP 
    DBMS_OUTPUT.PUT_LINE(TO_CHAR(v_SUP_data.SUPPLIER_ID) || ' ' || 
          TO_CHAR(v_SUP_data.SUPP_INVOICE_ID) || ' ' || 
          TO_CHAR(v_SUP_data.balance) ); 
    END LOOP; 
END; 
/

ошибка я получаю v_sup_data Error (20,31): PLS-00364: использование индексной переменной цикла 'V_SUP_DATA' недействителен

Error(9,74): PL/SQL: ORA-00904: "SUPP_INVOICE_ID"."SUPPLIER_INVOICE": invalid identifier 

ответ

0

Синтаксис для ссылки колонка <>. <>. Таким образом, курсор запроса необходимо условие соединения быть supplier_produce.supp_invoice_id = supplier_invoice.supp_invoice_id, т.е.

create or replace 
Procedure SUP_loop 
(v_SUPPLIER_ID int ) 
AS 
    CURSOR c_SUP IS 
    select SUPPLIER_ID , SUPP_INVOICE_ID, balance 
     from SUPPLIER_PRODUCT, supplier_invoice 
    where SUPPLIER_ID=v_SUPPLIER_ID 
     and supplier_product.supp_invoice_id = supplier_invoice.supp_invoice_id; 
BEGIN 
    --LOOP WITH IMPLICIT VARIABLE DECLARED 
    --AUTOMATIC, OPEN FETCH, CLOSE 

    FOR v_SUP_data IN c_SUP LOOP 
    DBMS_OUTPUT.PUT_LINE(TO_CHAR(v_SUP_data.SUPPLIER_ID) || ' ' || 
          TO_CHAR(v_SUP_data.SUPP_INVOICE_ID) || ' ' || 
          TO_CHAR(v_SUP_data.balance) ); 
    END LOOP; 
END; 
/
2

У вас есть поле и имена таблиц местами вокруг неправильно.

У вас есть ...

supp_invoice_id.supplier_invoice 

... где вы должны ...

supplier_invoice.supp_invoice_id 

: D

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