oracle数据库中有10个表,这10个表很相似,如果把这10个表合成一个表?存储过程

这10个表内的字段是一模一样的(id,name),但表名类似于abc1,abc2,abc3,abc4。。。这样的,想写个存储过程一次把数据导过来,但不知道这个存储过程怎样... 这10个表内的字段是一模一样的(id,name),但表名类似于abc1,abc2,abc3,abc4。。。这样的,想写个存储过程一次把数据导过来,但不知道这个存储过程怎样写?了解的朋友麻烦帮忙写下~~~多谢! 展开
 我来答
沃德斯塔和皮皮塔
2009-08-04 · 超过31用户采纳过TA的回答
知道答主
回答量:64
采纳率:100%
帮助的人:30万
展开全部
其实,最快的办法是建立分区,Exchange partition,使用交换分区的方法,注意要
Exchange partition提供了一种方式,让你在表与表或分区与分区之间迁移数据,注意不是将表转换成分区或非分区的形式,而仅只是迁移表中数据(互相迁移),由于其号称是采用了更改数据字典的方式,因此效率最高(几乎不涉及io操作)。Exchange partition适用于所有分区格式,你可以将数据从分区表迁移到非分区表,也可以从非分区表迁移至分区表,或者从hash partition到range partition诸如此类吧。

其语法很简单:alter table tbname1 exchange partition/subpartition ptname with table tbname2;

Exchange partition迁移的方式也很有意思,言语表达怕大家听不明白,下面直接通过示例来表达:

借用前文中创建的空分区表:t_partition_range,并插入几条记录

JSSWEB> create table t_partition_range (id number,name varchar2(50))

2 partition by range(id)(

3 partition t_range_p1 values less than (10) tablespace tbspart01,

4 partition t_range_p2 values less than (20) tablespace tbspart02,

5 partition t_range_p3 values less than (30) tablespace tbspart03,

6 partition t_range_pmax values less than (maxvalue) tablespace tbspart04

7 );

表已创建。

JSSWEB> insert into t_partition_range values (11,'a');

已创建 1 行。

JSSWEB> insert into t_partition_range values (12,'b');

已创建 1 行。

JSSWEB> insert into t_partition_range values (13,'c');

已创建 1 行。

JSSWEB> commit;

提交完成。

再创建一个非分区表,结构与t_partition_range相同

JSSWEB> create table t_partition_range_tmp (id number,name varchar2(50));

表已创建。

执行交换分区(我们知道刚插入到range分区表的数据都在分区t_range_p2中,因此这里指定交换该分区)

JSSWEB> alter table t_partition_range exchange partition t_range_p2

2 with table t_partition_range_tmp;

表已更改。

看看效果如何:

JSSWEB> select * from t_partition_range partition(t_range_p2);

未选定行

JSSWEB> select * from t_partition_range_tmp;

ID NAME

---------- --------------------------------------------------

11 a

12 b

13 c

记录成功交换到未分区的表中。

我们再执行一次exchange partition的命令,看看又会发生什么呢

JSSWEB> select *from t_partition_range partition(t_range_p2);

ID NAME

---------- --------------------------------------------------

11 a

12 b

13 c

JSSWEB> select *from t_partition_range_tmp;

未选定行

又交换回来了,有点儿意思。

再做个更加明确的测试,我们往未分区的表中加入一些记录后再执行exchange partition,看看会发生什么呢:

JSSWEB> insert into t_partition_range_tmp values (15,'d');

已创建 1 行。

JSSWEB> insert into t_partition_range_tmp values (16,'e');

已创建 1 行。

JSSWEB> insert into t_partition_range_tmp values (17,'d');

已创建 1 行。

JSSWEB> alter table t_partition_range exchange partition t_range_p2

2 with table t_partition_range_tmp;

表已更改。

JSSWEB> select *from t_partition_range partition(t_range_p2);

ID NAME

---------- --------------------------------------------------

15 d

16 e

17 d

JSSWEB> select *from t_partition_range_tmp;

ID NAME

---------- --------------------------------------------------

11 a

12 b

13 c

这就是前面所说的,互相交换的意思~~

注意:

l 涉及交换的两表之间表结构必须一致,除非附加with validation子句;

l 如果是从非分区表向分区表做交换,非分区表中的数据必须符合分区表中指定分区的规则,除非附加without validation子句;

l 如果从分区表向分区表做交换,被交换的分区的数据必须符合分区规则,除非附加without validation子句;

l Global索引或涉及到数据改动了的global索引分区会被置为unusable,除非附加update indexes子句。

提示:

一旦附加了without validation子句,则表示不再验证数据有效性,因此指定该子句时务必慎重。

例如:

JSSWEB> insert into t_partition_range_tmp values (8,'g');

已创建 1 行。

JSSWEB> alter table t_partition_range exchange partition t_range_p2

2 with table t_partition_range_tmp without validation;

表已更改。

JSSWEB> select *from t_partition_range partition(t_range_p2);

ID NAME

---------- --------------------------------------------------

11 a

12 b

13 c

8 g

虽然新插入的记录并不符合t_range_p2分区的范围值,但指定了without validation后,数据仍然转换成功。
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
温述贺
2009-08-04 · 超过11用户采纳过TA的回答
知道答主
回答量:72
采纳率:0%
帮助的人:40.4万
展开全部
CREATE PRODUCE produce_name()
AS
BEGIN
INSERT TABLE table_name FROM
AS
SELECT * FROM table1
;INSERT TABLE table_name FROM
AS
SELECT * FROM table2
;INSERT TABLE table_name FROM
AS
SELECT * FROM table3
;INSERT TABLE table_name FROM
AS
SELECT * FROM table4
;INSERT TABLE table_name FROM
AS
SELECT * FROM table5




END
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liuzongsha
2009-08-05 · TA获得超过1609个赞
知道小有建树答主
回答量:1148
采纳率:0%
帮助的人:542万
展开全部
用不着写过程,一个SQL就搞定,SELECT ID,NAME FROM ABC1 UNION ALL SELECT ID,NAME FROM ABC2 .......
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式