我在PLSQL上遇到了一个问题,希望我能在这里得到一些帮助。 我有2个表 - 第一个叫做test1,有2列 - customer_id和msisdn,里面有2个记录。 另一个名为test_hist,有3列 - customer_id,msisdn和seqno,有1条记录。 “seqno”是一个序列号。每个被插入的记录都会得到一个高出1的seqno数。 我写的脚本是:
DECLARE
CURSOR test IS
SELECT * FROM test1;
CUSTOMER_ID NUMBER;
MSISDN NUMBER;
V_SEQNO NUMBER;
BEGIN
FOR a IN test LOOP
SELECT MAX(SEQNO)+1 INTO V_SEQNO FROM test1_hist;
INSERT INTO test1_hist
select a.CUSTOMER_ID ,v_seqno, a.msisdn
from test1;
END LOOP;
commit;
END;
问题是,在运行之后,这就是我在test_hist表上得到的结果:
CUSTOMER_ID SEQNO MSISDN
1.55443322 3 5422112
1.55443322 3 5422112
1.12232323 2 5454554
1.12232323 2 5454554
1.22211444 1 544643330
它的运行时间与记录数相同。 如果我在test1表上有4条记录,它将插入test_hist 16(每组4条)。 我工作的原始表有400k记录,所以我不能做一些简单的插入语句....(: 我使用TOAD,环境是ORACLE 8。
任何想法我错过了什么?
非常感谢 阿萨弗。答案 0 :(得分:0)
你可以使用序列..然后就不需要pl / sql块来插入数据..可以在简单插入中完成...其他明智的使用带有双重值或值的pl / sql
DECLARE
CURSOR测试IS SELECT * FROM test1;
CUSTOMER_ID NUMBER;
MSISDN NUMBER;
V_SEQNO NUMBER;
BEGIN
FOR a IN test LOOP
SELECT MAX(SEQNO)+1 INTO V_SEQNO FROM test1_hist;
INSERT INTO test1_hist
select a.CUSTOMER_ID ,v_seqno, a.msisdn
from dual;
END LOOP;
commit;