2

ストアドプロシージャを書いています。selectからに値を渡す方法を知っていますinsert

しかし、同時に使用することは可能ですか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);
4

1 に答える 1

5

SELECTステートメントの結果セットをステートメントの入力として使用したいと思いますINSERTか?はい、それは可能です。FBの言語リファレンスを参照してください。おそらく問題の原因となるのは、その場合にキーワードを使用しないことです。VALUESステートメントは次のようになります。

INSERT INTO table (fields) SELECT ...

INSERT INTO ... VALUES(...)または、1つのステートメントに「定数値」(ステートメントなど)と「動的値」(SELECTステートメントをソースとして使用)の両方を含める場合は、それらを結合できます。

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

ここで、constantsは適切なタイプの値のリストです。


アップデート

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))
)
于 2012-01-04T05:07:27.830 に答える