sql >> データベース >  >> RDS >> Oracle

Oracle で即時実行を使用してテーブルにデータを挿入する

    最初のクエリの結果を (日付) 変数に取得し、それを使用することができます:

    SELECT sysdate into query_date FROM dual;
    insert into test (my_date) values (query_date)
    -- or if you really want dynamic SQL, with a bind variable
    EXECUTE IMMEDIATE 'insert into test (my_date) values (:query_date)' using query_date;
      

    または、質問を文字通り読むと、最初の文字列を連結して 2 番目の文字列の一部として使用します。

    query_date := "SELECT sysdate FROM dual";
    EXECUTE IMMEDIATE 'insert into test (my_date) ' || query_date;
      

    2 番目のステートメントを実行する代わりに印刷すると、次のように表示されます。

    insert into test (my_date) SELECT sysdate FROM dual
      

    ...これは有効なSQLです。 query_string が より複雑であるか、それ自体が動的に構築されています。しかし、query_string の列式の数が 選択リストもさまざまです。列リストも動的に構築する必要があります。そうしないと、挿入する列が多すぎたり少なすぎたりします。

    正確な方法は、クエリ文字列の作成方法によって異なります。基本的に、クエリ文字列に式を追加すると、列名も別のリストに追加され、次のようになります。

    EXECUTE IMMEDIATE 'insert into test (' || column_list ' ||) ' || query_string);
      

    どこで column_list col1, col2 のように構築されます および query_string as select x.col1, y.col2 from ... .

    あなたが示したものに動的SQLを使用する明確な理由はありません。または、実際に sysdate を使用している場合は、それを取得するために別のクエリが必要です。これを行うだけで済みます:

    insert into test (my_date) values (sysdate)
      

    ...だから、あなたの実際のシナリオは本当にもっと複雑だと思います。ただし、values を使用しないことに注意してください insert ... select ... を含むキーワード パターン。単一の列とサブクエリを使用できますが、それでも良い考えではなく、サブクエリに複数の列がある場合は機能しません。



    1. STIと親子関係を含む重複レコードを見つけるためのソリューション

    2. 日付間のLaravel$q-> where()

    3. php / sqlを使用してmysqlデータへの入力を比較するにはどうすればよいですか?

    4. リレーションシップを使用してクエリを生成できないのはなぜですか?