2017-05-22 6 views
0

PL/SQLを学習しているだけで、このループ内の文が単独で実行される理由はわかりませんが、PL/SQLプロシージャは実行されません。誰も私に助言を与えることができますか?ありがとう。pl/sql問合せは実行されません

set serveroutput on size 2000 

DECLARE 
    CURSOR money_cur IS 
     SELECT SUM(etotal) AS Total_income 
     FROM a_enrolment 
     GROUP BY etotal; 

    etotal a_enrolment%ROWTYPE; 
    total_income number; 

BEGIN 
    DBMS_OUTPUT.PUT_LINE(chr(10)); 

    DBMS_OUTPUT.PUT_LINE('Displaying total income generated' || chr(10)); 

    FOR etotal IN money_cur LOOP 
     DBMS_OUTPUT.PUT_LINE('Total income is ' || Total_income); 
    END LOOP; 
END; 
/
+3

こんにちは、あなたは** etotal.Total_income **を試しましたか? – hmmftg

+0

うん、カーソルFORループは暗黙のうちにレコードを宣言しているので、 'etotal'はすでに独自の' total_income'を持っています。代わりに上部に宣言した冗長なものを表示しています。 –

答えて

0
DECLARE 
    CURSOR money_cur IS 
     SELECT SUM(etotal) AS Total_income 
     FROM a_enrolment 
     GROUP BY etotal; 

    --etotal a_enrolment%ROWTYPE; 
    --total_income number; 

BEGIN 
    DBMS_OUTPUT.PUT_LINE(chr(10)); 

    DBMS_OUTPUT.PUT_LINE('Displaying total income generated' || chr(10)); 
FOR etotal IN money_cur LOOP 
     DBMS_OUTPUT.PUT_LINE('Total income is ' || etotal.Total_income); 
    END LOOP; 
END; 
/
0

私は本当に感謝:)あなたの助けのためのみんなに感謝します。以下は、あなたのいずれかが同様の問題に直面した場合に私が問題を解決できることを発見した別の方法です。

DECLARE 
    CURSOR student_cur IS 
    SELECT sid, etotal, edate 
    FROM a_enrolment 
    ORDER BY sID; 

    grand_total number := 0; 

total a_enrolment%ROWTYPE; 

BEGIN -- this whole block is the proceedure 
DBMS_OUTPUT.PUT_LINE(chr(10)); 
    DBMS_OUTPUT.PUT_LINE('Displaying student details' || chr(10)); 
    DBMS_OUTPUT.PUT_LINE(RPAD('ID',15) || RPAD('TOTAL',15) || 'DATE'); 
FOR total IN student_cur LOOP 
DBMS_OUTPUT.PUT_LINE(RPAD(total.sID, 15) || RPAD(total.etotal, 15) || 
total.edate); 
grand_total := grand_total + total.etotal; -- this is the function 
END LOOP; 

DBMS_OUTPUT.PUT_LINE('The grand total is $' || grand_total); 

EXCEPTION 
WHEN NO_DATA_FOUND THEN 
DBMS_OUTPUT.PUT_LINE('No data has been returned'); 
WHEN TOO_MANY_ROWS THEN 
DBMS_OUTPUT.PUT_LINE('Too much data has been returned'); 
WHEN OTHERS THEN 
DBMS_OUTPUT.PUT_LINE('Oracle error code: ' || SQLCODE || ' - Message: ' || 
SQLERRM); 

END; 
/
関連する問題