如何利用存储过程COPYTABLE将旧表复制成一个新表?(DBMR: 2136)

~ 0 min
2016-03-03 07:16

用户可以通过调用存储过程“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

平均分: 0 (0 投票)

你不能对该内容发表评论

标签