2012-03-15 182 views
0

我有一個supplier_product表(supp_id,PROD_ID,INVOICE_ID,價格)和發票表(INVOICE_ID,餘額)之和(平衡)。我嘗試了一個存儲過程。給(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錯誤(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