2012-03-15 4 views
0

supplier_product 테이블 (supp_id, prod_id, invoice_id, price) 및 송장 테이블 (invoice_id, balance)이 있습니다. 나는 저장된 proc을 시도했다. 주어진 (supp_id) 그것은 기존의 모든 invoice_id해야하고 균형을 표시합니다.오라클 저장 프로 시저 매개 변수가있는 경우 합계를 가져옵니다.

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

관련 문제