2017-12-02 206 views
1

我有兩個表。模型和汽車。以及用戶輸入的名稱和價格(存儲在AUTOMOBILES中)導出所有模型的過程。如何輸出多個實體?(oracle sql)

create or REPLACE procedure modelzz( VAR_MODEL IN MODELS.NAME_MODEL%TYPE, 
             VAR_PRICE OUT AUTOMOBILES.A_PRICE%TYPE) 
             as 
             begin 
SELECT a.A_PRICE 
INTO VAR_PRICE 
FROM AUTOMOBILES a 
join MODELS m 
on a.MODELS_ID_MODEL=m.ID_MODEL 
where m.NAME_MODEL=VAR_MODEl; 
dbms_output.put_line(VAR_MODEL||'''s price is : '||VAR_PRICE); 
END; 

過程的開始:

var v_modelzz varchar2; 
exec modelzz('&model_name',:v_modelzz); 

的問題是我要導出的所有實體的某型號。他們的一個以上,一個模型可以有兩個或更多的記錄。我知道這是不實際的。這只是測試。這裏的錯誤:exact fetch returns more than requested number of rows

回答

1

您應該創建甲骨文型(我沒有測試此代碼,只是一個例子):

create type v_price_array 
as table of AUTOMOBILES.A_PRICE%TYPE ; 

變化過程的返回類型:

create or REPLACE procedure modelzz( VAR_MODEL IN MODELS.NAME_MODEL%TYPE, 
             VAR_PRICES OUT v_price_array) 

Or return created array type from function instead of procedure. 

而變化您的選擇:

SELECT a.A_PRICE 
BULK COLLECT INTO VAR_PRICES 
FROM AUTOMOBILES a 
join MODELS m 
on a.MODELS_ID_MODEL=m.ID_MODEL 
where m.NAME_MODEL=VAR_MODEl; 
dbms_output.put_line(VAR_MODEL ||''s price is : '||VAR_PRICE); 

第二種方法是在OUT參數sys_refcursor中返回。然後你必須打開程序中的光標:

create or REPLACE procedure modelzz( VAR_MODEL IN MODELS.NAME_MODEL%TYPE, 
             VAR_PRICES OUT SYS_REFCURSOR) 
             as 
             begin 
OPEN VAR_PRICES FOR 
SELECT a.A_PRICE 
FROM AUTOMOBILES a 
join MODELS m 
on a.MODELS_ID_MODEL=m.ID_MODEL 
where m.NAME_MODEL=VAR_MODEl; 
dbms_output.put_line(VAR_MODEL ||''s price is : '||VAR_PRICE); 
END; 

我推薦第二種方法。

+1

@ruveena感謝您的編輯 –

+0

如果解決方案正常工作,請返回反饋 –