0

我在 PLSQL 上遇到了一个问题,希望我能在这里得到一些帮助。我有 2 个表 - 第一个称为 test1,有 2 列 - customer_id 和 msisdn,其中有 2 条记录。另一个称为 test_hist,有 3 列 - customer_id、msisdn 和 seqno,有 1 条记录。“seqno”是一个序列号。插入的每条记录都会获得一个高 1 的 seqno 编号。我编写的脚本是:

宣布

CURSOR test IS
SELECT * FROM test1; 


CUSTOMER_ID NUMBER;
MSISDN NUMBER;
V_SEQNO NUMBER;

开始

    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;

结尾;

问题是,运行它之后,这就是我在 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 条)。我使用的原始表有 40 万条记录,所以我不能只做一些简单的插入语句....(:我使用 TOAD,环境是 ORACLE 8。

知道我错过了什么吗?

非常感谢阿萨夫。

4

1 回答 1

0

你可以使用序列..那么不需要pl / sql块来插入数据..可以在简单的插入中完成......否则明智地使用带有双重或值的pl / sql

宣布

CURSOR 测试是 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;
于 2012-12-17T13:04:05.513 回答