从Oracle中没有任何主键的多个表中插入单个表

时间:2012-08-01 19:24:06

标签: oracle insert external

我应该从两个没有任何主键的外部文件中插入一个表。

每个外部文件都有不同的列。此外,应按字母顺序插入值。数据库中的表有一个主键,它会自动递增。

请告诉我实现这一目标的方法。


非常感谢你的帮助...

所有关于使用外部表插入具有1:1或/和1:n关系的表格... 每个主键都有一个主键,它按顺序递增。我已经插入其中一个表“预算”:bu_id,bu_section等。

insert into Budget (
bu_id,
bu_section
)

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

,结果如下:

bu_id   bu_section
1006     blabla
1007     blablabla

我想插入(“detail”)表,该表包含来自两个不同外部文件的de_id,de_resource,de_comment。 其中一个是资源详细信息,另一个是评论。 insert语句还应该考虑bu_id和de_id关系(de_id也应该从1006开始)

@a_horse_with_no_name:每个外部文件中有超过1800条记录。因此,当我在插入表时在每个select语句中使用ID_seq.nextval时,我认为它不起作用。

p.s:我不允许使用SQL * loader。

2 个答案:

答案 0 :(得分: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;

如果这不是你想要的,你需要让你的问题更清楚。

正如Randy指出的那样,您不按字母顺序插入,而是按照特定顺序检索行。关系表中的行未排序。从真实表中检索时,您需要提供ORDER BY表达式:

select id, 
       col1, 
       col2, 
       col3
from real_table
order by col1;

答案 1 :(得分:0)

没有“外部文件上的主键”(假设您正在谈论平面文件)。如果要将两个“平面文件”而不是“表”加载到单个表中,则开始阅读有关SQL * Loader的内容。

如果您想将两个不同“表格”(表1和表2)的内容插入一个表格(表3),则已经发布了对此的答案。