2017-12-02 237 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

如果解决方案正常工作,请返回反馈 –