最初のクエリの結果を (日付) 変数に取得し、それを使用することができます:
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
asselect x.col1, y.col2 from ...
.あなたが示したものに動的SQLを使用する明確な理由はありません。または、実際に sysdate を使用している場合は、それを取得するために別のクエリが必要です。これを行うだけで済みます:
insert into test (my_date) values (sysdate)
プレ>...だから、あなたの実際のシナリオは本当にもっと複雑だと思います。ただし、
values
を使用しないことに注意してくださいinsert ... select ...
を含むキーワード パターン。単一の列とサブクエリを使用できますが、それでも良い考えではなく、サブクエリに複数の列がある場合は機能しません。