以下の行を押すと、SQL コマンドが正しく終了しません。テーブル B のデータをテーブル A に挿入したいのですが、どちらも同じ列を持っていますが、順序が異なる可能性があります。ティア!
Insert into a (select column_name from user_tab_columns where table_name = 'B')
select * from b
pl/sql 開発者を使用しています。
以下の行を押すと、SQL コマンドが正しく終了しません。テーブル B のデータをテーブル A に挿入したいのですが、どちらも同じ列を持っていますが、順序が異なる可能性があります。ティア!
Insert into a (select column_name from user_tab_columns where table_name = 'B')
select * from b
pl/sql 開発者を使用しています。
plsql プロシージャで動的 SQL を使用します。カーソルのループで列名をループし、それらを文字列に追加します。次に、クエリを実行します。以下のコードを参照してください(テストされていません)
declare
l_query varchar2(32767);
l_columns varchar2(32767);
cursor c is select column_name
from user_tab_columns
where table_name=&table_name;
begin
for r in c loop
l_columns := l_columns ||','||r.columns_name;
end loop;
-- remove first ','
l_columns := substr(l_columns,2);
l_query := 'insert into a ('||l_columns||') select '||l_columns||' from &table_name;
execute immediate l_query;
end;
同様の状況で、適切な順序で列を持つ宛先テーブルのビューを作成しました。
例えば
Table A has columns (A, B, C)
Table B has columns (B, C, A)
次のようなビューを作成します
CREATE VIEW A_V AS SELECT B,C,A FROM A;
その後、あなたはすることができますinsert into a_v select * from b;
利点は、列がテーブルaに追加されても、テーブルbには追加されない場合でも、それらがnull可能であるかデフォルトがある限り、ビューを介した挿入が機能することです。
テーブルBのUSER_TAB_COLUMNSを検索して、CREATEVIEWスクリプトを自動的に作成しました。
これは多分あなたが望むことをします。
INSERT INTO a (col1, col2)
SELECT col1, col2
FROM b