-1

主キーを持たない 2 つの異なる外部ファイルから 1 つのテーブルに挿入する必要があります。

各外部ファイルには異なる列があります。また、値はアルファベット順に挿入する必要があります。データベースのテーブルには、自動的に増加する主キーがあります。

これを達成する方法を教えてください。


助けてくれて本当にありがとう...

それはすべて、外部テーブルを使用して 1:1 または 1:n の関係を持つテーブルに挿入することです...それぞれに主キーがあり、シーケンスによってインクリメントされます。bu_id、bu_section などのテーブル「予算」の 1 つに既に挿入しています。

insert into Budget (
bu_id,
bu_section
)

select dep.ID_seq.nextval, file1.section
from file1

結果は次のようになります。

bu_id   bu_section
1006     blabla
1007     blablabla

2 つの異なる外部ファイルから de_id、de_resource、de_comment を持つ ("detail") テーブルに挿入したいと考えています。1 つはリソースの詳細で、もう 1 つはコメントです。insert ステートメントでは、bu_id と de_id の関係も考慮する必要があります (de_id も 1006 から開始する必要があります)。

@a_horse_with_no_name: 各外部ファイルに 1800 を超えるレコードがあります。そのため、テーブルへの挿入中に各 select ステートメントで ID_seq.nextval を使用すると機能しないと思います。

ps: SQL*loader の使用は許可されていません。

4

2 に答える 2

1

私があなたの質問を理解している限り、これはそれをするべきです:

insert into real_table (id, col1, col2, col3)
select some_sequence.nextval,
       c1_1,
       c1_2,
       c1_3
from external_table_1
union 
select some_sequence.nextval,
       c2_1,
       c2_2,
       c2_3
from external_table_2;

これがあなたが望んでいたものではない場合、あなたはあなたの質問をより明確にする必要があります。

ランディがアルファベット順に挿入しないことを指摘しているように、特定の順序で行を取得します。リレーショナルテーブルの行は並べ替えられません。ORDER BY実際のテーブルから取得するときは、式を指定する必要があります。

select id, 
       col1, 
       col2, 
       col3
from real_table
order by col1;
于 2012-08-01T19:36:37.220 に答える
0

「外部ファイルの主キー」のようなものはありません(フラットファイルについて話していると仮定して)。「テーブル」ではなく 2 つの「フラット ファイル」を 1 つのテーブルにロードする場合は、SQL*Loader について読み始めてください。

2 つの異なる「テーブル」(テーブル 1 とテーブル 2) の内容を 1 つのテーブル (テーブル 3) に挿入する場合、これに対する回答は既に投稿されています。

于 2012-08-01T19:41:33.063 に答える