如何利用存储过程COPYTABLE将旧表复制成一个新表?(DBMR: 2136)
用户可以通过调用存储过程“CALL COPYTABLE ()”在现有表的基础上复制一个新表。使用方法如下:
COPYTABLE(VARCHAR(32) source_schema_name INPUT,
VARCHAR(32) source_table_name INPUT,
VARCHAR(32) destination_schema_name INPUT,
VARCHAR(32) destination_table_name INPUT,
VARCHAR(128) tablespace_lock_mode_option_string INPUT,
VARCHAR(2048) where_condition_string INPUT,
INT fg_rename_index INPUT,
INT commit_count INPUT)
复制源表的定义和数据到目的表。
使用此存储过程时请注意以下事项:
(1).必须在自动提交开启的时候,该存储过程才会执行。
(2).依据DCI规则标志,用户可以设置0或1重命名索引。
(3).为commit动作设定一个提交计数功能,每复制n笔数据执行一次提交,用户可设置成0至n。
注意:一旦出现错误,在该错误发生之前的任何操作都将被提交,没有执行的命令将记录在_spusr.log中。用户可以在dmconfig.ini配置文件中设置DB_SPLOG关键词来指定存储log的目录,或者在用户执行应用程序的目录中找到它们。
用户在使用的过程中需要注意第五个参数。第五个参数允许用户设置三个选项:表空间、锁模式和填充因子。此外,关于第五个参数您可以一次设置一个选项,也可以同时设置三个选项。请注意,如果指定了相同的表空间,所有的设置都将和源表相同;如果您指定了其他表空间,记住设置不同的选项——锁模式或填充因子为不同的值,否则在不同的表空间里将使用默认设置。
例:
(1)创建表t1并查看t1的表结构。
dmSQL> def table t1;
create table SYSADM.T1 ( C1 TIMESTAMP default null )
in DEFTABLESPACE lock mode row fillfactor 100 ;
(2)在表t1所在的表空间创建表t2并查看其表结构。
dmSQL> call copytable('SYSADM', 'T1', 'SYSADM', 'T2', '', '', 0, 1);
dmSQL> DEF TABLE T2;
create table SYSADM.T2 ( C1 TIMESTAMP default null )
in DEFTABLESPACE lock mode row fillfactor 100 ;
(3)在其他表空间创建表t2并查看其表结构。
dmSQL> call copytable('SYSADM', 'T1', 'SYSADM', 'T2', 'IN TS1 LOCK
MODE PAGE FILLFACTOR 75', '', 0, 1);
//tablespace : ts1
//lock mode : page
//fillfactor : 75
dmSQL> def table t2;
Create table SYSADM.T2 ( C1 TIMESTAMP default null)
in TS1 lock mode page fillfactor 75 ;
一般来说,锁模式最好设置成行锁。
版本: DBMaster 4.3 or Above
产品: Normal / Bundle
平台: All