2012-01-04 14 views
2

私はストアドプロシージャを書いています。私はselectからinsertに値を渡す方法を知っています。Firebird - を使用して選択と値を挿入

しかし、INSERT INTOvaluesSelectを同時に使用できますか?

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

+0

VALUESを使用して1つのステートメントにInsert intoを使用できますか? – user639478

答えて

5

私はあなたがINSERT文の入力としてSELECT文の結果セットを使用したいと思いますか?はい、可能です。FB's language referenceを参照してください。一部は、おそらくあなたの問題はあなたが、その場合にはVALUESキーワードを使用していないということです引き起こすもの、文は

INSERT INTO table (fields) SELECT ... 

それとも、(INSERT INTO ... VALUES(...)文のような)「定数値」の両方を持つようにしたい場合のようになります。 1文で(ソースとしてSELECT文を使用)、「動的な値」そして、あなたができる労働組合彼ら、すなわち

constantsは、適切な型の値のリストです
INSERT INTO table (fields) 
    SELECT fields FROM tab_src ... 
    UNION 
    SELECT constants FROM RDB$DATABASE 


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

+0

'列リストと変数リストの数が一致しません 'というエラーメッセージはかなり明確ですね。あなたの 'INSERT'ステートメントは12個の列をリストしているので、各"ソース行 "も12個の列を持たなければならず、それらの列の型はターゲット列の型と一致しなければなりません。しかし、あなたが結合した 'SELECT'文の中には、1つの列しかないものもあります!あなたのソーステーブルにはないフィールドには、フィールド名の代わりにNULLや他の(定数)デフォルト値を使用できます。 – ain

+0

はいmsgはクリアですが、最初の選択で0を試しただけですRDB $ DATABASEは何かが結論づけできないので、enlightenに感謝します - 今のように0を使用しました:f_lookup_id、0,0、最初の文と0、f_lookup_id 、0などですが、UNIONを使用するとゼロまたはNULLが実際の値をオーバーライドしません。 – user639478

関連する問題