私は1つのテーブルを持っているので、同じカラム名とデータを持つダミーテーブルを作成する必要がありますが、いくつかのカラムには異なるデータタイプが必要です。 例:表1には、C1(varchar2)とC2(date)の2つの列があります。 C1(varchar2)列とC2(varchar2)列を持つTable-2というダミーのテーブルを作成する必要があります。別の表からすべての列の同じデータ型を持つ表を作成する方法は?
オラクルで行う方法をお勧めします。
私は1つのテーブルを持っているので、同じカラム名とデータを持つダミーテーブルを作成する必要がありますが、いくつかのカラムには異なるデータタイプが必要です。 例:表1には、C1(varchar2)とC2(date)の2つの列があります。 C1(varchar2)列とC2(varchar2)列を持つTable-2というダミーのテーブルを作成する必要があります。別の表からすべての列の同じデータ型を持つ表を作成する方法は?
オラクルで行う方法をお勧めします。
開始表のすべての列をVARCHAR2
に変換(暗黙の変換)できると仮定すると、次のようなことができます。 は、あなたがこのテーブルを持っていると言う:
SQL> create table table1 (
2 date_field date,
3 varchar_field varchar2(1000),
4 number_field number
5 );
Table created.
SQL> insert into table1 values (sysdate, 'some text', 999);
1 row created.
SQL> commit;
Commit complete.
あなたは暗黙の型変換を使用して、他に別のテーブルにコピー一つのテーブルからデータを作成し、デュナミスのSQLを構築することができます。
SQL> declare
2 stm varchar2(32767);
3 begin
4 select 'create table table2(' ||
5 listagg(column_name, ' varchar2(4000), ') within group (order by column_name) ||
6 ' varchar2(4000))'
7 into stm
8 from user_tab_columns
9 where table_name = 'TABLE1';
10 --
11 execute immediate stm;
12 --
13 select 'insert into table2(' ||
14 listagg(column_name, ', ') within group (order by column_name) ||
15 ') select ' ||
16 listagg(column_name, ', ') within group (order by column_name) ||
17 ' from table1'
18 into stm
19 from user_tab_columns
20 where table_name = 'TABLE1';
21 execute immediate stm;
22 end;
23/
PL/SQL procedure successfully completed.
SQL> select * from table2;
DATE_FIELD NUMBER_FIELD VARCHAR_FIELD
--------------- --------------- ---------------
27-APR-16 some text 999
SQL>
するための最良の方法
create table Table-2 as select * from Table-1 where 1=0;
をし、必要なcoluのデータ型を変更する - たとえば、データなしで、これはcreate as select
でテーブルを複製することです手動でこれ等MNS - 列が変更された後
alter table Table-2 modify (C2 varchar2);
あなたは適切な変換を用いて、表2に表1からのデータをプッシュすることができます。あなたの例では -
insert into Table-2 select C1, to_char(C2,'dd-mm-yyyy') from Table-1;
真、それに応じて私の答えを編集します。 –
2列は単なる例です。実行時には、ダミー表のデータ型を変更する必要がある列が100列あります。 –
これは手動で行う必要があります。別の方法は、テーブルのDDLを生成し、新しいテーブルでDDLコマンドを実行する前にデータ型を変更することですが、これでもすべてのカラムを自分で変更する必要があります。 –
'varchar2'がすべての可能なタイプの開始テーブルを扱うことを確認できますか?たとえば、開始テーブルに 'BLOB'フィールドがあるとしたらどうでしょうか? – Aleksej
最初の表のデータ型は問題になりません。ダミーを作成して、すべての列をvarchar2にする必要があります。 –
開始テーブルのタイプを考慮する必要があります。たとえば、すべてのvarchar2カラムを持つtable2を作成します。 table1にblobフィールドがあるとします。テーブル2にデータを挿入しようとすると、エラーが発生します。だから、開始テーブルの種類についていくつかの妥協をしなければならない – Aleksej