あなたはどちらかそれから(日付)変数に最初のクエリの結果を取得し、それを使用することができます。
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;
あなたが見たい:
insert into test (my_date) SELECT sysdate FROM dual
...これは有効なSQLです。これは、query_string
がより複雑な場合、またはそれ自体が動的に構築されている場合に機能します。しかし、query_string
選択リスト内の列式の数も変化する場合は、列リストを動的に作成する必要があります。そうしないと、挿入に必要な列が多すぎるか少なすぎます。
これは、クエリ文字列をどのように構築するかによって異なります。基本的にクエリ文字列に式を追加すると、列名を別のリストに追加して、最終的には
select x.col1, y.col2 from ...
として
col1, col2
と
query_string
が言うように
column_list
が構築されて
EXECUTE IMMEDIATE 'insert into test (' || column_list ' ||) ' || query_string);
。
表示されている内容で動的SQLを使用する明らかな理由はありません。それとも、あなただけ行うことができますよう、あなたが本当に、それを得るために別のクエリの必要性をSYSDATEを使用している場合:
insert into test (my_date) values (sysdate)
...ので、私はあなたの本当のシナリオが本当に、より複雑であると仮定します。ただし、insert ... select ...
パターンのvalues
キーワードは使用しないでください。単一の列とサブクエリを使用することはできますが、それでも良い考えではなく、サブクエリに複数の列がある場合は機能しません。
'query_date'変数は、最初のクエリまたはクエリ自体から日付を保持しているはずですか?いずれにしても、なぜ動的SQLを使用したいのですか? –