2011-06-13 72 views
2

我可以让我在做什么错在这里Oracle过程插入

create or replace procedure load_category(
p_linea_cod varchar2, 
p_modal_cod varchar2, 
p_periodo_cod varchar2 
)IS 

BEGIN 
    insert into category(categoryid,externalcategoryid,name)values(
    SEQ_CATEGORY.nextval, 
    (select cod_modal_est,nombre 
    from [email protected] 
    where cod_linea_negocio = p_linea_cod 
    and cod_modal_est = p_modal_cod) 
); 

END; 

我试图与一个序列和select语句(工作表)一个简单的插入,但可以得到它工作,只是收到此错误:

ORA-00947: not enough values 

我感谢您的帮助提前。

回答

3

您选择时只返回一列,而您插入三列。如果您需要将它们留空,请将NULL值添加到选择区域,或将列留在插入字段列表中。

[编辑]

修改后的查询:

insert into category(categoryid, externalcategoryid, name) 
select 
    SEQ_CATEGORY.nextval, cod_modal_est, nombre 
from 
    [email protected] 
where 
    cod_linea_negocio = p_linea_cod 
    and cod_modal_est = p_modal_cod; 
+0

你是什么意思,选择应该返回“cod_modal_est”和“农布雷”列 – 2011-06-13 21:33:41

+0

的值不,它不需要,但我承认我读错了你的查询。你现在插入两个值。一个是序列,另一个是选择的结果。这会以任何方式失败。将序列移入选择来解决此问题。 (将在一分钟后发布示例。) – GolezTrol 2011-06-13 21:36:22

+0

修改它。现在查询返回三列。使用insert..select时省略* values *子句。如果选择查询将返回多个记录,则会插入所有记录,每个记录都有自己的类别。另外,如果它不返回,则不会插入行。执行insert语句后,您可以使用SQL%rowcount来获取受影响的行数。 – GolezTrol 2011-06-13 21:42:20