如何从上到下在oracle中创建一个序列

时间:2015-03-03 19:31:02

标签: sql oracle insert

所以我在Oracle中有两个表。表A是主表,表B是从承包商检索的数据。它们都具有相同的一般结构。最后,我想INSERT INTO TABLE A(SELECT * FROM TABLE B)。但是,表B中的主键列不存在。您如何建议创建一个主键,同时为表B中的每一行生成一个序列,从4328开始?

我接着做了以下事情:

create sequence myseq
  increment by 1
  start with 4328
  MAXVALUE 99999
  NOCACHE
  NOCYCLE;

然后创建了一个PK列,最终实现了以下内容:

INSERT INTO TABLE B (PK) VALUES(MYSEQ.nextVal);

但是除了在最后排成一排之外没有结果。我希望从4328开始填充每一行,然后结束291行。

2 个答案:

答案 0 :(得分:0)

抱歉,但我不知道我是否能解决你的问题。 是否要在表A和表B中插入一行具有相等的PK值? 您可以通过在插入行之前将序列值放入变量中来执行此操作,例如:

BEGIN
    SELECT MYSEQ.nextval INTO v_SEQUENCE FROM dual;
    insert into table_A values (v_SEQUENCE,1,2,3);
    insert into table_B values (v_SEQUENCE,1,2,3);
END;

如果您可以从Table_B获取所有行并使用PK插入table_A,例如:

INSERT INTO TABLE_A (SELECT MYSEQ.nextval, B.* FROM TABLE_B B)
是吗?

答案 1 :(得分:0)

您的方法只调用序列一次。你想要做的是在PL / SQL中执行一个循环,根据需要多次调用序列:

BEGIN
  FOR x IN 1 .. 291 LOOP
    INSERT INTO TABLE B (PK) VALUES(MYSEQ.nextVal);
  END LOOP;
END;

确保删除并重新创建序列,以确保它以正确的值开始。