如何输出多个实体?(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

回到顶部