oracle中,我有2个表: 表A和表B,表B比表A多2个字段,其他字段完全一样,我想把A中的数据全部导入到B。

oracle中,我有2个表:表A和表B,表B比表A多2个字段,其他字段完全一样,我想把表B中的数据全部导入到表A。表B的数据量有1000W条,如果用insertintoa... oracle中,我有2个表: 表A和表B,表B比表A多2个字段,其他字段完全一样,我想把表B中的数据全部导入到表A。表B的数据量有1000W条,如果用 insert into a (a,b,c)select a,b,c from B 这样把插入不了。还有其他别的办法么。 展开
 我来答
匿名用户
2013-01-17
展开全部
DECLARE
-- 定义游标.
CURSOR c_test_main IS
SELECT a,b,c FROM B;
v_rowCount INT;
BEGIN

v_rowCount := 0;
FOR test_rec IN c_test_main
LOOP
INSERT INTO A (a,b,c)
VALUES (test_rec.a, test_rec.b, test_rec.c);

-- 计数器.
v_rowCount := v_rowCount + 1;

-- 每一万行提交一次
IF( v_rowCount >= 10000 ) THEN
v_rowCount := 0;
COMMIT;
END IF;
END LOOP;

-- 最后提交一次
COMMIT;
END;
/

你可以根据需要 调整, 具体多少行 提交一次.

--------------------
上面的 PL/SQL 可能存在性能问题, 因为是 一行一行 处理的。性能差了一些。

下面的 PL/SQL 使用 Oracle 的 BULK COLLECT 技术。
Oracle BULK COLLECT在数据量很大的时候,能够显著提升性能。

DECLARE
-- 定义游标.
CURSOR c_test_main IS
SELECT a,b,c FROM B;

-- 定义类型
TYPE test_type IS TABLE OF B%ROWTYPE;
test_data test_type;

BEGIN
-- 打开游标.
OPEN c_test_main;

-- 开始循环
LOOP
-- 填充数据 批量填充,每次读取 10000 条.
FETCH c_test_main
BULK COLLECT INTO test_data LIMIT 1000;

-- FORALL 插入
FORALL i IN test_data.FIRST..test_data.LAST
INSERT INTO A (a,b,c)
VALUES (test_data(i).a, test_rec(i).b, test_rec(i).c);

-- 每 10000 条提交一次.
COMMIT;

-- 当没有数据的时候,退出。
EXIT WHEN c_test_main%NOTFOUND;
END LOOP;

-- 关闭游标.
CLOSE c_test_main;

-- 最后提交一次 COMMIT;
END;
/
xgpengfei
2013-01-16 · 超过15用户采纳过TA的回答
知道答主
回答量:48
采纳率:0%
帮助的人:35.1万
展开全部
我估计是你类型不一样,或者是长度设置不同或者是有其他约束之类的,
你插入的时候报什么错。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
leafive
2013-01-16 · TA获得超过536个赞
知道答主
回答量:37
采纳率:0%
帮助的人:28.3万
展开全部
这语句没有问题,为什么插入不了?是加为数据量太多?数据量太多就加一个条件分段处理。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天雨青辰
2013-01-20 · TA获得超过169个赞
知道答主
回答量:160
采纳率:100%
帮助的人:119万
展开全部
加个索引吧,别无他求了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
井里面的笨熊
2013-01-16
知道答主
回答量:26
采纳率:0%
帮助的人:13.7万
展开全部
insert into a select a,b,c from b 这个测试可行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式