如何输出多个实体?(oracle sql)
我有两个表。模型和汽车。以及用户输入的名称和价格(存储在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
回答:
您应该创建甲骨文型(我没有测试此代码,只是一个例子):
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;
我推荐第二种方法。
以上是 如何输出多个实体?(oracle sql) 的全部内容, 来源链接: utcz.com/qa/258102.html