在脚本中插入

时间:2012-12-17 12:31:16

标签: oracle loops insert

我在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。

任何想法我错过了什么?

非常感谢 阿萨弗。

1 个答案:

答案 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;