2017-04-23 35 views
0
CREATE OR REPLACE PROCEDURE displayCondoDetails 
AS 
    unitNumber condo_unit.unit_num%TYPE; 
    condoFee condo_unit.condo_fee%TYPE; 
BEGIN 
    FOR x IN (SELECT unit_num, condo_fee INTO unitNumber, condoFee FROM condo_unit) 
    LOOP 
    DBMS_OUTPUT.PUT_LINE(RTRIM(unitNumber)||' '||(condoFee)); 
    END LOOP; 
END; 
/

調用存儲過程PL/SQL錯誤:ORA-01422:獲取的,而不是顯示14條記錄

BEGIN 
displayCondoDetails; 
END; 
/

我得到14個空格,而不是顯示14條記錄14個空格。

我不知道我在做錯什麼。

enter image description here

有14只在此表中的記錄。 enter image description here

回答

0

一個select into聲明和cursor FOR loop是兩回事。遊標FOR循環隱式地從它的遊標聲明它自己的記錄變量,所以你不應該聲明你自己的記錄變量,因爲它不會被填充。嘗試這樣的事情:

create or replace procedure displaycondodetails 
as 
begin 
    for r in (
     select unit_num, condo_fee from condo_unit 
    ) 
    loop 
     dbms_output.put_line(ltrim(rtrim(r.unit_num)||' '||r.condo_fee)); 
    end loop; 
end; 
/
+0

謝謝你的幫助。還有一件事,我如何定義列名呢? –

+0

「select」列表中的每個項目(上例中的「unit_num」和「condo_fee」)都將隱式包含在記錄中(上例中的「r」),如果這就是您的意思。本質上,編譯器讀取遊標定義並定義一條記錄以匹配它。 –

1

SELECT ... INTO ...要求查詢只返回一行。如果您的表格包含14行,則使用從14行中選擇一行的條件(請參閱示例here),或使用光標遍歷所有14條記錄(參見示例here)。

嘗試像下面的代碼:

... 
BEGIN 
    FOR condo_unit_rec IN (SELECT * FROM condo_unit) 
    LOOP 
    DBMS_OUTPUT.PUT_LINE(RTRIM(condo_unit_rec.unit_num)||' '||(condo_unit_rec.condo_fee)); 
    END LOOP; 
END; 
+0

我正在使用循環來顯示我的所有14條記錄,但我得到了14個空格而不是記錄。 –

相關問題