SQL> CREATE TABLE tb_long_to_clob (
2 id NUMBER(10),
3 created_date DATE,
4 lookup_id NUMBER(10),
5 data Long
6 );
表已创建。
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_long_to_clob (id, created_date, lookup_id, Data)
18 VALUES (i, l_create_date, l_lookup_id, 'This is some data for ' || i);
19 END LOOP;
20 COMMIT;
21 END;
22 /
PL/SQL 过程已成功完成。
SQL> CREATE TABLE tb_long_to_clob_mid (
2 id NUMBER(10),
3 created_date Date,
4 lookup_id NUMBER(10),
5 data Clob
6 );
表已创建。
SQL> ALTER TABLE tb_long_to_clob ADD (
2 CONSTRAINT tb_long_to_clob_pk PRIMARY KEY (id)
3 );
表已更改。
SQL>
SQL> Begin
2 Dbms_Redefinition.Can_Redef_Table(USER, 'TB_LONG_TO_CLOB');
3 End;
4 /
PL/SQL 过程已成功完成。
SQL> BEGIN
2 DBMS_REDEFINITION.start_redef_table(
3 uname => USER,
4 orig_table => 'TB_LONG_TO_CLOB',
5 int_table => 'TB_LONG_TO_CLOB_MID',
6 col_mapping=>'Id Id, Created_Date Created_Date, Lookup_Id Lookup_Id, to_lob(Data) Data',
7 options_flag => DBMS_REDEFINITION.cons_use_pk);
8 -- --如果有主键则是 options_flag => DBMS_REDEFINITION.cons_use_pk,如果没有DBMS_REDEFINITION.cons_use_rowid
9 END;
10 /
PL/SQL 过程已成功完成。
SQL> BEGIN
2 dbms_redefinition.sync_interim_table(
3 uname => USER,
4 orig_table => 'TB_LONG_TO_CLOB',
5 int_table => 'TB_LONG_TO_CLOB_MID');
6 END;
7 /
PL/SQL 过程已成功完成。
SQL> ALTER TABLE TB_LONG_TO_CLOB_MID ADD (
2 CONSTRAINT TB_LONG_TO_CLOB_MID_pk PRIMARY KEY (id)
3 );
表已更改。
SQL> BEGIN
2 dbms_redefinition.finish_redef_table(
3 uname => USER,
4 orig_table => 'TB_LONG_TO_CLOB',
5 int_table => 'TB_LONG_TO_CLOB_MID');
6 END;
7 /
PL/SQL 过程已成功完成。
SQL> Drop Table TB_LONG_TO_CLOB_MID;
表已删除。
SQL> ALTER TABLE TB_LONG_TO_CLOB
2 RENAME CONSTRAINT TB_LONG_TO_CLOB_MID_PK TO TB_LONG_TO_CLOB_PK;
表已更改。
阅读(2660) | 评论(0) | 转发(0) |