Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6543842
  • 博文数量: 1005
  • 博客积分: 8199
  • 博客等级: 中将
  • 技术积分: 13071
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-25 20:19
个人简介

脚踏实地、勇往直前!

文章分类

全部博文(1005)

文章存档

2020年(2)

2019年(93)

2018年(208)

2017年(81)

2016年(49)

2015年(50)

2014年(170)

2013年(52)

2012年(177)

2011年(93)

2010年(30)

分类: Oracle

2011-05-12 14:53:25

SQL> CREATE TABLE tb_del_field (
  2    id            NUMBER(10),
  3    created_date  DATE,
  4    lookup_id     NUMBER(10),
  5    data          VARCHAR2(50),
  6    del_field     Varchar2(2)
  7  );
表已创建。
SQL> DECLARE
  2    l_lookup_id    Number;
  3    l_create_date  DATE;
  4  BEGIN
  5    FOR i IN 1 .. 1000000 LOOP
  6      IF MOD(i, 3) = 0 THEN
  7        l_create_date := ADD_MONTHS(SYSDATE, -24);
  8        l_lookup_id   := 2;
  9      ELSIF MOD(i, 2) = 0 THEN
 10        l_create_date := ADD_MONTHS(SYSDATE, -12);
 11        l_lookup_id   := 1;
 12      ELSE
 13        l_create_date := SYSDATE;
 14        l_lookup_id   := 3;
 15      END IF;
 16 
 17      INSERT INTO tb_del_field (id, created_date, lookup_id, data,del_field)
 18      VALUES (i, l_create_date, l_lookup_id, 'This is some data for ' || i,'dd');
 19    END LOOP;
 20    COMMIT;
 21  END;
 22  /
PL/SQL 过程已成功完成。
SQL> CREATE TABLE tb_del_field_mid (
  2    id            NUMBER(10),
  3    created_date  DATE,
  4    lookup_id     NUMBER(10),
  5    data          VARCHAR2(50)
  6  );
表已创建。
SQL> Begin
  2  Dbms_Redefinition.Can_Redef_Table(USER, 'TB_DEL_FIELD');
  3  End;
  4  /
Begin
*
第 1 行出现错误:
ORA-12089: 不能联机重新定义无主键的表 "HXL"."TB_DEL_FIELD"
ORA-06512: 在 "SYS.DBMS_REDEFINITION", line 139
ORA-06512: 在 "SYS.DBMS_REDEFINITION", line 1782
ORA-06512: 在 line 2

SQL> ALTER TABLE tb_del_field ADD (
  2    CONSTRAINT tb_del_field_pk PRIMARY KEY (id)
  3  );
表已更改。
SQL> Begin
  2  Dbms_Redefinition.Can_Redef_Table(USER, 'TB_DEL_FIELD');
  3  End;
  4  /
PL/SQL 过程已成功完成。
SQL> BEGIN
  2    DBMS_REDEFINITION.start_redef_table(
  3      uname      => USER,
  4      orig_table => 'TB_DEL_FIELD',
  5      int_table  => 'TB_DEL_FIELD_MID',
  6      col_mapping=>'Id, Created_Date, Lookup_Id, Data');
  7  END;
  8  /
PL/SQL 过程已成功完成。
SQL> BEGIN
  2    dbms_redefinition.sync_interim_table(
  3      uname      => USER,
  4      orig_table => 'TB_DEL_FIELD',
  5      int_table  => 'TB_DEL_FIELD_MID');
  6  END;
  7  /
PL/SQL 过程已成功完成。
SQL> BEGIN
  2    dbms_redefinition.finish_redef_table(
  3      uname      => USER,
  4      orig_table => 'TB_DEL_FIELD',
  5      int_table  => 'TB_DEL_FIELD_MID');
  6  END;
  7  /
PL/SQL 过程已成功完成。
SQL> desc TB_DEL_FIELD;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER(10)
 CREATED_DATE                                       DATE
 LOOKUP_ID                                          NUMBER(10)
 DATA                                               VARCHAR2(50)
SQL> spool off;
阅读(1831) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~