2011-06-13 41 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