在處理這類問題時,首先考慮一下您要捕獲的數據。
處理PL/SQL中的隱式遊標需要1行,所以您需要確保您瞭解數據。
在這種情況下,您傳入的變量不會用於任何查詢,因此我建議您重新評估。
我手頭沒有數據庫來執行此操作,但您應該能夠解決這個問題,並希望能讓您更靠近一點。我把它放在一個匿名塊中,這樣我可以很快寫出它。
DECLARE
PROCEDURE model_details_sp (p_model IN VARCHAR2, p_noofcars OUT NUMBER)
IS
p_description VARCHAR2 (200);
BEGIN
--2
SELECT COUNT (model_name)
INTO p_noofcars
FROM i_car
WHERE model_name = p_model;
DBMS_OUTPUT.put_line ('No of Cars for model: ' || p_noofcars);
--3
SELECT model_description
INTO p_description
FROM i_car --the table should be the car_model table so that only one record is returned
WHERE model_name = p_model;
DBMS_OUTPUT.put_line ('Model Desc' || p_description);
END model_details_sp;
BEGIN
dbms_output.put_line('');
END;
要@大衛阿爾德里奇評論:
嘗試運行這 - 結果應是失敗的 - 因爲你cannont使用到CLAUS選擇多行,除非你彙總數據:
DECLARE
p_num NUMBER;
BEGIN
SELECT LEVEL INTO p_num FROM DUAL CONNECT BY LEVEL <= 10;
dbms_output.put(p_num);
END;
,你應該看到的錯誤是這樣的:
錯誤報告:
ORA-01422:精確獲取回報超過行 ORA-06512的請求數量:4行 01422. 00000 - 「精確獲取回報超過行請求數量」 *原因 :在指定的數精確提取小於返回的行。 *行動:重寫行的查詢或更改號碼請
恐怕你可能需要澄清第3步。你是什麼意思「顯示」?你只是在尋找「DBMS_OUTPUT.put_line」?另外,你確定req 3不是一個「顯式」遊標,因爲它返回多於一行,並且會失敗一個典型的隱式遊標。 –
感謝您的回覆Rob。通過顯示,我的意思是通過DBMS_Output.Putline使用PL/SQL塊調用proc。 – Splunk