2012-01-04 70 views
2

我在寫一個存儲過程。我知道如何將select的值傳遞給insert火鳥 - 使用選擇和值插入到

但是,INSERT INTO是否可以同時使用valuesSelect

Insert into table_1 (f1, f2, f3, f4, f5, f6, f7, f8, f9, 
     FL1, FL2, FL3) 

     Select :p_f1, :v_f2, :p_f3, :p_f4, 
     abs(:v_f5 * :p_f5), 
     abs(:v_f6 * :p_f6), 
     :v_f7, :v_f8, :v_9 from RDB$DATABASE 
     UNION 
     Select f_lookup_id from lookup_table where (f_res >= :v_res) And (f2_lookup_id = :p_id1) 
     UNION 
     Select f_lookup_id from lookup_table where (f_res >= :v_res) And (f2_lookup_id = :p_id2) 
     UNION 
     Select f_lookup_id from lookup_table where (f_res >= :v_res) And (f2_lookup_id = :p_id3); 
+1

這真的很難告訴你問這裏。你能舉一個你在做什麼的例子嗎?你最好猜測你想做什麼? – jadarnel27 2012-01-04 04:37:59

+0

我可以在一個語句中使用VALUES和Select with Insert? – user639478 2012-01-04 04:54:52

回答

5

我猜你想使用SELECT語句的結果集,作爲一個INSERT語句的輸入?是的,那可能,請參閱FB's language reference。大概是什麼導致你的問題的部分是,你不使用VALUES關鍵字在這種情況下,該語句將看起來像

INSERT INTO table (fields) SELECT ... 

或者,如果你想擁有「恆定值」(如在INSERT INTO ... VALUES(...)語句)和「動態值」在一個聲明(使用SELECT語句作爲源),那麼你可以聯合他們,即

INSERT INTO table (fields) 
    SELECT fields FROM tab_src ... 
    UNION 
    SELECT constants FROM RDB$DATABASE 

其中constants是合適類型的值的列表。


UPDATE

OK,我猜你想要的東西其實是一樣的東西

Insert into table_1 (f1, f2, f3, f4, f5, f6, f7, f8, f9, FL1, FL2, FL3) 
VALUES(:p_f1, :v_f2, :p_f3, :p_f4, 
     abs(:v_f5 * :p_f5), 
     abs(:v_f6 * :p_f6), 
     :v_f7, :v_f8, :v_9, 
     (Select f_lookup_id from lookup_table where (f_res >= :v_res) And (f2_lookup_id = :p_id1)), 
     (Select f_lookup_id from lookup_table where (f_res >= :v_res) And (f2_lookup_id = :p_id2)), 
     (Select f_lookup_id from lookup_table where (f_res >= :v_res) And (f2_lookup_id = :p_id3)) 
) 
+0

我收到錯誤:SQL錯誤代碼= -104。 命令無效。 列列表和變量列表的計數不匹配。 我在主線程中的通用字段名稱中寫了我的SQL - 請指教。謝謝 – user639478 2012-01-05 03:23:13

+0

錯誤消息「列列表和變量列表的計數不匹配」很明顯,不是嗎?您的INSERT語句列出了12列,因此每個「源行」也必須包含12列,並且這些列的類型必須與目標列的類型相匹配。但是你們聯盟的一些'SELECT'語句只有一列!對於源表沒有的字段,可以使用NULL或其他(常量)默認值,而不是字段名。 – ain 2012-01-05 03:47:48

+0

是的味精是明確的,但我在第一次選擇只嘗試零也RDB $ DATABASE是東西不能得出結論,所以感謝啓發 - 我用零現在是這樣的:f_lookup_id,0,0爲第一語句和0,f_lookup_id ,0等等 - 但使用UNION不會使零或零覆蓋實際值? – user639478 2012-01-05 04:19:44