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;
阅读(1935) | 评论(0) | 转发(0) |