华为云用户手册

  • STATS_SAMPLE_PAGES STATS_SAMPLE_PAGES指定估计索引列的基数和其他统计信息时要采样的索引页数。DSC迁移时会将该属性删除。 输入示例 123456789 CREATE TABLE `public`.`runoob_alter_test`( `dataType1` int NOT NULL AUTO_INCREMENT, `dataType2` DOUBLE(20,8), `dataType3` TEXT NOT NULL, PRIMARY KEY(`dataType1`)) ENGINE=InnoDB,STATS_SAMPLE_PAGES=25;ALTER TABLE runoob_alter_test STATS_SAMPLE_PAGES 100;ALTER TABLE runoob_alter_test STATS_SAMPLE_PAGES=100; 输出示例 1 2 3 4 5 6 7 8 910 CREATE TABLE "public"."runoob_alter_test"( "datatype1" SERIAL NOT NULL, "datatype2" DOUBLE PRECISION, "datatype3" TEXT NOT NULL, PRIMARY KEY ("datatype1")) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("datatype1"); 父主题: 表(可选参数、操作)
  • UNION UNION 是 MERGE 引擎的建表参数。通过该关键字建表类似于创建普通视图。新创建的表将在逻辑上合并UNION关键字限定的多个表的数据。DSC迁移时会将该特性转为 GaussDB 视图创建语句。 输入示例 1 2 3 4 5 6 7 8 91011121314 CREATE TABLE t1 ( a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, message CHAR(20)) ENGINE=MyISAM;CREATE TABLE t2 ( a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, message CHAR(20)) ENGINE=MyISAM;CREATE TABLE total ( a INT NOT NULL AUTO_INCREMENT, message CHAR(20))ENGINE=MyISAM UNION=(t1,t2) INSERT_METHOD=LAST; 输出示例 1 2 3 4 5 6 7 8 91011121314151617181920 CREATE TABLE "public"."t1" ( "a" SERIAL NOT NULL PRIMARY KEY, "message" CHAR(80))WITH ( ORIENTATION = ROW, COMPRESSION = NO )NOCOMPRESSDISTRIBUTE BY HASH ("a");CREATE TABLE "public"."t2" ( a SERIAL NOT NULL PRIMARY KEY, message CHAR(80))WITH ( ORIENTATION = ROW, COMPRESSION = NO )NOCOMPRESSDISTRIBUTE BY HASH ("a");CREATE VIEW "public"."total"(a, message) ASSELECT * FROM "public"."t1"UNION ALLSELECT * FROM "public"."t2"; 父主题: 表(可选参数、操作)
  • 声明Hexadecimal Binary Literal值 输入: CREATE MULTISET TABLE bvalues (IDVal INTEGER, CodeVal BYTE(2));INSERT INTO bvalues VALUES (112193, '7879'XB) ;SELECT IDVal, CodeVal FROM bvalues WHERE CodeVal = '7879'XB ; 输出:
  • 声明Hexadecimal Character Literal值 输入: SELECT (COALESCE(TRIM(BOTH FROM VTX_D_RPT_0017_WMSE12_01_01.ID),'')) ||'7E'xc||(COALESCE(TRIM(BOTH FROM VTX_D_RPT_0017_WMSE12_01_01.Code),'')) ||'7E'xc||(COALESCE(TRIM(BOTH FROM VTX_D_RPT_0017_WMSE12_01_01.Description),'')) ||'7E'xc||(COALESCE(TRIM(BOTH FROM VTX_D_RPT_0017_WMSE12_01_01.Name),'')) ||'7E'xc||(COALESCE(TRIM(BOTH FROM VTX_D_RPT_0017_WMSE12_01_01.Host_Product_Id),''))FROM DP_VTXEDW.VTX_D_RPT_0017_WMSE12_01_01 VTX_D_RPT_0017_WMSE12_01_01WHERE 1=1; 输出:
  • ANALYZE Teradata的ANALYZE语句用于对表的迁移。 输入:CREATE TABLE,使用INDEX 12 CREATE TABLE EMP27 AS emp21 WITH DATA PRIMARY INDEX (EMPNO) ON COMMIT PRESERVE ROWS; 输出: BeginCREATE TABLE EMP27( LIKE emp21 INCLUDING ALL EXCLUDING PARTITION EXCLUDING RELOPTIONS EXCLUDINGDISTRIBUTION )DISTRIBUTE BY HASH ( EMPNO ) ;INSERT INTO EMP27select * from emp21 ;end ;/ANALYZE Emp27 (EmpNo); 父主题: 表迁移
  • SHOW STATS VALUES SEQUENCED 该命令显示COLLECT STATIS TICS 语句的结果以及相关统计信息,且Gauss无对应命令。考虑到该命令不影响功能,因此迁移时可直接注释掉。 输入: SHOW STATS VALUES SEQUENCED on "temp"."table" 输出: /*SHOW STATS VALUES SEQUENCED on "temp"."table"*/ 父主题: Teradata语法迁移
  • MULTISET MULTISET是一个普通表,所有数据库都支持这个表。迁移工具同时支持MULTISET和SET表。 MULTISET表支持与VOLATILE一起使用。 输入:CREATE MULTISET TABLE 1 CREATE VOLATILE MULTISET TABLE T1 (c1 int ,c2 int); 输出: 1234567 CREATE LOCAL TEMPORARY TABLE T1 ( c1 INTEGER ,c2 INTEGER ); 父主题: 表迁移
  • SET SET是Teradata的独有功能。它不允许重复的记录。它使用MINUS集合操作符来实现。DSC支持MULTISET和SET表。SET表支持与VOLATILE一起使用。 输入:SET TABLE 12345 CREATE SET VOLATILE TABLE tab1 … ;INSERT INTO tab1SELECT expr1, expr2, … FROM tab1, … WHERE ….; 输出: 1234567 CREATE LOCAL TEMPORARY TABLE tab1 … ; INSERT INTO tab1 SELECT expr1, expr2, … FROM tab1, … WHERE …. MINUS SELECT * FROM tab1 ; 父主题: 表迁移
  • MERGE MERGE是ANSI标准的SQL语法操作符,用于从一个或多个来源中选择行来更新或插入到表或视图中,可以指定更新或插入到目标表或视图的条件。 输入:MERGE 12345678 MERGE INTO tab1 Ausing ( SELECT c1, c2, ... FROM tab2 WHERE ...) AS BON A.c1 = B.c1 WHEN MATCHED THEN UPDATE SET c2 = c2 , c3 = c3 WHEN NOT MATCHED THEN INSERT VALUES (B.c1, B.c2, B.c3); 输出 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536373839 WITH B AS ( SELECT c1 ,c2 ,... FROM tab2 WHERE ...),UPD_REC AS ( UPDATE tab1 A SET c2 = c2 ,c3 = c3 FROM B WHERE A.c1 = B.c1 returning A. *)INSERT INTO tab1 SELECT B.c1 ,B.c2 ,B.c3 FROM B WHERE NOT EXISTS ( SELECT 1 FROM UPD_REC A WHERE A.c1 = B.c1 ); 父主题: 数据操作语句(DML)
  • 表(可选参数、操作) 本节主要介绍表(可选参数、操作)的迁移语法。迁移语法决定了关键字/功能的迁移方式。GaussDB(DWS)不支持表(可选参数),目前针对表(可选参数)的迁移方法都是临时迁移方法。 ALGORITHM ALTER TABLE RENAME AUTO_INCREMENT AVG_ROW_LENGTH BLOCK_SIZE CHARSET CHECKSUM CLUSTERED KEY COLLATE COMMENT CONNECTION DEFAULT DELAY_KEY_WRITE DISTRIBUTE BY DIRECTORY ENGINE FOREIGN_KEY_CHECKS IF NOT EXISTS INDEX_ALL INSERT_METHOD KEY_BLOCK_SIZE LOCK MAX_ROWS MIN_ROWS PACK_KEYS PARTITION BY PASSWORD ROW_FORMAT STATS_AUTO_RECALC STATS_PERSISTENT STATS_SAMPLE_PAGES UNION WITH AS CHANGE修改列 CHECK约束 DROP删除表 LIKE 表克隆 MODIFY修改列 TRUNCATE 删除表 ROUNDROBIN表 RENAME 重命名表名 设置与清除列默认值 字段名重命名 行列存压缩 添加与删除列 父主题: MySQL语法迁移
  • COMMENT 在MySQL中,COMMENT对表进行注释。GaussDB(DWS)支持该属性修改表定义信息,DSC工具迁移时会添加额外的表属性信息。 输入示例 12345678 CREATE TABLE `public`.`runoob_alter_test`( `dataType1` int NOT NULL AUTO_INCREMENT, `dataType2` FLOAT(10,2) COMMENT 'dataType2列', PRIMARY KEY(`dataType1`)) comment='表的注释';ALTER TABLE `public`.`runoob_alter_test` COMMENT '修改后的表的注释';ALTER TABLE `public`.`runoob_alter_test` ADD INDEX age_index(dataType2) COMMENT '索引'; 输出示例 1 2 3 4 5 6 7 8 9101112 CREATE TABLE "public"."runoob_alter_test"( "datatype1" SERIAL NOT NULL, "datatype2" REAL COMMENT 'dataType2列', PRIMARY KEY ("datatype1")) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("datatype1") COMMENT '表的注释';ALTER TABLE "public"."runoob_alter_test" COMMENT '修改后的表的注释';CREATE INDEX "age_index" ON "public"."runoob_alter_test" ("dataType2") COMMENT '索引'; 父主题: 表(可选参数、操作)
  • KEY_BLOCK_SIZE KEY_BLOCK_SIZE的选择与存储引擎有关。对于MyISAM表,KEY_BLOCK_SIZE可选地指定用于索引键块的字节大小。对于InnoDB表,KEY_BLOCK_SIZE指定用于压缩的InnoDB表的页面大小(以KB为单位)。GaussDB(DWS)不支持该属性,DSC迁移时会将属性删除。 输入示例 123456789 CREATE TABLE `public`.`runoob_tbl_test`( `runoob_id` VARCHAR(30), `runoob_title` VARCHAR(100) NOT NULL, `runoob_author` VARCHAR(40) NOT NULL, `submission_date` VARCHAR(30)) ENGINE=MyISAM KEY_BLOCK_SIZE=8;ALTER TABLE runoob_tbl_test ENGINE=InnoDB;ALTER TABLE runoob_tbl_test KEY_BLOCK_SIZE=0; 输出示例 1 2 3 4 5 6 7 8 910 CREATE TABLE "public"."runoob_tbl_test"( "runoob_id" VARCHAR(120), "runoob_title" VARCHAR(400) NOT NULL, "runoob_author" VARCHAR(160) NOT NULL, "submission_date" VARCHAR(120)) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("runoob_id"); 父主题: 表(可选参数、操作)
  • IF NOT EXISTS DSC支持转换IF NOT EXISTS关键字,迁移过程保留。 输入示例 1 2 3 4 5 6 7 8 910 DROP TABLE IF EXISTS `categories`;CREATE TABLE IF NOT EXISTS `categories`( `CategoryID` tinyint(5) unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, `CategoryName` varchar(15) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '' , `Description` mediumtext CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL , `Picture` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '', UNIQUE (`CategoryID`))ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;DROP TABLE IF EXISTS `categories`; 输出示例 12345678 DROP TABLE IF EXISTS "public"."categories";CREATE TABLE IF NOT EXISTS "public"."categories" ( "categoryid" SMALLSERIAL NOT NULL PRIMARY KEY, "categoryname" VARCHAR(60) NOT NULL DEFAULT '', "description" TEXT NOT NULL, "picture" VARCHAR(200) NOT NULL DEFAULT '') WITH (ORIENTATION = ROW, COMPRESSION = NO) NOCOMPRESS DISTRIBUTE BY HASH ("categoryid");DROP TABLE IF EXISTS "public"."categories"; 父主题: 表(可选参数、操作)
  • DROP删除表 GaussDB(DWS)与MySQL都支持使用DROP语句删除表,但GaussDB(DWS)不支持在DROP语句中使用RESTRICT | CASCADE关键字。DSC工具迁移时会将上述关键字移除。 输入示例 1234567 CREATE TABLE IF NOT EXISTS `public`.`express_elb_server`( `runoob_id` VARCHAR(10), `runoob_title` VARCHAR(100) NOT NULL, `runoob_author` VARCHAR(40) NOT NULL, `submission_date` VARCHAR(10))ENGINE=InnoDB DEFAULT CHARSET=utf8;DROP TABLE `public`.`express_elb_server` RESTRICT; 输出示例 1 2 3 4 5 6 7 8 91011 CREATE TABLE IF NOT EXISTS "public"."express_elb_server"( "runoob_id" VARCHAR(40), "runoob_title" VARCHAR(400) NOT NULL, "runoob_author" VARCHAR(160) NOT NULL, "submission_date" VARCHAR(40)) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("runoob_id");DROP TABLE "public"."express_elb_server"; 父主题: 表(可选参数、操作)
  • COMMENT语句 COMMENT语句的迁移过程如下所示,输入一个复杂语句,迁移之后语句更加简化。 输入: 1 2 3 4 5 6 7 8 91011121314 CREATE MULTISET TABLE PDAT.t_tbl_comment ( Data_Dt DATE NOT NULL ,Data_Src VARCHAR(4) NOT NULL ,List_Make_Stat CHAR(1) ) PRIMARY INDEX(Data_Dt,Data_Src) ;COMMENT ON PDAT.t_tbl_comment IS 'comment test on table';---------------REPLACE VIEW PVW.v_vw_comment ASLOCKING ROW FOR AC CES SSELECT Data_Dt, Data_Src, List_Make_Stat FROM PDAT.t_tbl_comment;COMMENT ON PVW.v_vw_comment IS 'comment test on view';COMMENT ON PVW.v_vw_comment.Data_Dt IS 'comment test on view column'; 输出: COMMENT ON TABLE PDAT.t_tbl_comment IS 'comment test on table';COMMENT ON VIEW PVW.v_vw_comment IS 'comment test on view';COMMENT ON COLUMN PVW.v_vw_comment.Data_Dt IS 'comment test on view column'; 父主题: Teradata语法迁移
  • COLUMN STORE 表的存储方式可使用CREATE TABLE语句中的WITH(ORIENTATION=COLUMN)从ROW-STORE转换为COLUMN存储。可使用rowstoreToColumnstore参数启用/禁用此功能。 输入:CREATE TABLE,修改存储模式为 COLUMN STORE 1234567 CREATE MULTISET VOLATILE TABLE tab1 ( c1 VARCHAR(30) CHARACTER SET UNICODE , c2 DATE , ... ) PRIMARY INDEX (c1, c2) ON COMMIT PRESERVE ROWS; 输出: 1234567 CREATE LOCAL TEMPORARY TABLE tab1 ( c1 VARCHAR(30) , c2 DATE , ... ) WITH (ORIENTATION = COLUMN) ON COMMIT PRESERVE ROWS DISTRIBUTE BY HASH (c1, c2); 父主题: 表迁移
  • 类型对照 表1 数字类型对照表 MySQL数字类型 MySQL INPUT GaussDB(DWS) OUTPUT DEC DEC DEC[(M[,D])] [UNSIGNED] [ZEROFILL] DECIMAL DECIMAL[(M[,D])] DECIMAL DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL] DECIMAL[(M[,D])] DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION [(M[,D])] [UNSIGNED] [ZEROFILL] DOUBLE PRECISION DOUBLE PRECISION DOUBLE DOUBLE[(M[,D])] [UNSIGNED] [ZEROFILL] DOUBLE PRECISION FIXED FIXED FIXED[(M[,D])] [UNSIGNED] [ZEROFILL] DECIMAL DECIMAL[(M[,D])] FLOAT FLOAT FLOAT [(M[,D])] [UNSIGNED] [ZEROFILL] FLOAT(p) [UNSIGNED] [ZEROFILL] REAL REAL REAL INT INT INT(p) [UNSIGNED] [ZEROFILL] INTEGER INTEGER(p) INTEGER INTEGER INTEGER(p) [UNSIGNED] [ZEROFILL] INTEGER INTEGER(p) MEDIUMINT MEDIUMINT MEDIUMINT(p) [UNSIGNED] [ZEROFILL] INTEGER INTEGER(p) NUMERIC NUMERIC NUMERIC [(M[,D])] [UNSIGNED] [ZEROFILL] DECIMAL DECIMAL[(M[,D])] REAL REAL[(M[,D])] REAL/DOUBLE PRECISION SMALLINT SMALLINT SMALLINT(p) [UNSIGNED] [ZEROFILL] SMALLINT TINYINT TINYINT TINYINT(n) TINYINT(n) ZEROFILL TINYINT(n) UNSIGNED ZEROFILL SMALLINT SMALLINT SMALLINT TINYINT TINYINT类型做转换时,如果存在无符号类型(UNSIGNED)修饰则转换为TINYINT,否则转换为SMALLINT。 REAL类型做转换时,默认转换为DOUBLE PRECISION,如果配置文件(features-mysql.properties)中table.database.realAsFlag标志为true时(默认false),转换为REAL 输入示例TINYINT 1234567 CREATE TABLE IF NOT EXISTS `runoob_dataType_test`( `dataType_1` TINYINT, `dataType_2` TINYINT(0), `dataType_3` TINYINT(255), `dataType_4` TINYINT(255) UNSIGNED ZEROFILL, `dataType_5` TINYINT(255) ZEROFILL); 输出示例 1 2 3 4 5 6 7 8 91011 CREATE TABLE IF NOT EXISTS "public"."runoob_datatype_test"( "datatype_1" SMALLINT, "datatype_2" SMALLINT, "datatype_3" SMALLINT, "datatype_4" TINYINT, "datatype_5" SMALLINT) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("datatype_1");
  • INDEX_ALL 在ADB中,创建全列索引index_all='Y'。GaussDB(DWS)不支持该属性修改表定义信息,DSC迁移时会将该属性删除。 输入示例 1234567 DROP TABLE IF EXISTS unsupport_parse_test;CREATE TABLE `unsupport_parse_test` ( `username` int, `update` timestamp not null default current_timestamp on update current_timestamp , clustered key clustered_key(shopid ASC, datetype ASC))index_ALL = 'Y';DROP TABLE IF EXISTS unsupport_parse_test; 输出示例 123456 DROP TABLE IF EXISTS "public"."unsupport_parse_test";CREATE TABLE "public"."unsupport_parse_test" ( "username" INTEGER, "update" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP) WITH (ORIENTATION = ROW, COMPRESSION = NO) NOCOMPRESS DISTRIBUTE BY HASH ("username");DROP TABLE IF EXISTS "public"."unsupport_parse_test"; 父主题: 表(可选参数、操作)
  • MIN_ROWS MIN_ROWS表示在表中存储的最小行数。DSC迁移过程时会将该属性删除。 输入示例 12345678 CREATE TABLE `public`.`runoob_alter_test`( `dataType1` int NOT NULL AUTO_INCREMENT, `dataType2` DOUBLE(20,8), `dataType3` TEXT NOT NULL, PRIMARY KEY(`dataType1`));ALTER TABLE runoob_alter_test MIN_ROWS 10000;ALTER TABLE runoob_alter_test MIN_ROWS=10000; 输出示例 1 2 3 4 5 6 7 8 910 CREATE TABLE "public"."runoob_alter_test"( "datatype1" SERIAL NOT NULL, "datatype2" DOUBLE PRECISION, "datatype3" TEXT NOT NULL, PRIMARY KEY ("datatype1")) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("datatype1"); 父主题: 表(可选参数、操作)
  • CHANGE修改列 MySQL使用CHANGE关键字同时修改列名、列数据类型、设置非空约束。DSC工具迁移时会根据GaussDB(DWS)的特性进行相应适配。 输入示例 1 2 3 4 5 6 7 8 910111213141516171819 CREATE TABLE IF NOT EXISTS `runoob_alter_test`( `dataType0` varchar(128), `dataType1` bigint, `dataType2` bigint, `dataType3` bigint, `dataType4` bigint)ENGINE=InnoDB DEFAULT CHARSET=utf8;## A.ALTER TABLE runoob_alter_test CHANGE dataType1 dataType1New VARCHAR(50);## B.ALTER TABLE runoob_alter_test CHANGE dataType2 dataType2New VARCHAR(50) NOT NULL;## C.ALTER TABLE runoob_alter_test CHANGE dataType3 dataType3New VARCHAR(100) FIRST;## D.ALTER TABLE runoob_alter_test CHANGE dataType4 dataType4New VARCHAR(50) AFTER dataType1; 输出示例 1 2 3 4 5 6 7 8 91011121314151617181920212223 CREATE TABLE "public"."runoob_alter_test"( "datatype0" VARCHAR(512), "datatype1" BIGINT, "datatype2" BIGINT, "datatype3" BIGINT, "datatype4" BIGINT) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("datatype0");-- A.ALTER TABLE "public"."runoob_alter_test" CHANGE COLUMN "datatype1" "datatype1new" VARCHAR(200) NULL DEFAULT NULL;-- B.ALTER TABLE "public"."runoob_alter_test" CHANGE COLUMN "datatype2" "datatype2new" VARCHAR(200) NOT NULL;-- C.ALTER TABLE "public"."runoob_alter_test" CHANGE COLUMN "datatype3" "datatype3new" VARCHAR(400) NULL DEFAULT NULL;-- D.ALTER TABLE "public"."runoob_alter_test" CHANGE COLUMN "datatype4" "datatype4new" VARCHAR(200) NULL DEFAULT NULL; 父主题: 表(可选参数、操作)
  • 表操作符 可以在查询的FROM子句中调用函数,该函数包含在表操作符内部。 输入:表操作符,使用RETURNS 12 SELECT * FROM TABLE( sales_retrieve (9005) RETURNS ( store INTEGER, item CLOB, quantity BYTEINT) ) AS ret; 输出: 12 SELECT * FROM sales_retrieve(9005) AS ret (store, item, quantity); 父主题: 函数和操作符
  • 保留关键字作字段名 在GaussDB(DWS)中保留关键字作字段名需要加双引号,目前工具支持的保留关键字有desc、checksum、operator、size等。 输入示例 1234567 CREATE TABLE `desc` ( user char, checksum int, operator smallint, desc char, size bigint); 输出示例 1234567 CREATE TABLE "public"."desc" ( "user" CHAR(4), "checksum" INTEGER, "operator" SMALLINT, "desc" CHAR(4), "size" BIGINT) WITH (ORIENTATION = ROW, COMPRESSION = NO) NOCOMPRESS DISTRIBUTE BY HASH ("user");
  • 系统表隐藏字段名作字段名 定义字段名和GaussDB(DWS)中系统表隐藏字段重名,需重新命名:包括xc_node_id,tableoid, cmax, xmax, cmin, xmin, ctid, tid;重新命名方式,字段后加_new,例如xc_node_id改为xc_node_id_new。 输入示例 1 2 3 4 5 6 7 8 9101112 DROP TABLE IF EXISTS `renameFieldName`;CREATE TABLE IF NOT EXISTS `renameFieldName`( xc_node_id int, tableoid char(3), cmax smallint, xmax bigint auto_increment, cmin varchar(10), xmin int, ctid int auto_increment, tid int);DROP TABLE IF EXISTS `renameFieldName`; 输出示例 1 2 3 4 5 6 7 8 9101112 DROP TABLE IF EXISTS "public"."renamefieldname";CREATE TABLE IF NOT EXISTS "public"."renamefieldname" ( "xc_node_id_new" INTEGER, "tableoid_new" CHAR(12), "cmax_new" SMALLINT, "xmax_new" BIGSERIAL, "cmin_new" VARCHAR(40), "xmin_new" INTEGER, "ctid_new" SERIAL, "tid_new" INTEGER) WITH (ORIENTATION = ROW, COMPRESSION = NO) NOCOMPRESS DISTRIBUTE BY HASH ("xc_node_id_new");DROP TABLE IF EXISTS "public"."renamefieldname";
  • CHARACTER SET和CASESPECIFIC CHARACTER SET用于指定字符列的服务器字符集,CASESPECIFIC用于指定字符数据比较及排序时的大小写情况。 可以使用tdMigrateCharsetCase参数来配置是否迁移CHARACTER SET和CASESPECIFIC。如果该参数设为false,则工具将跳过该查询的迁移并记录消息。 输入:tdMigrateCharsetCase=True 12345678 CREATE MULTISET VOLATILE TABLE TAB1( col1 INTEGER NOT NULL ,col2 INTEGER NOT NULL ,col3 VARCHAR(100) NOT NULL CHARACTER SET UNICODE CASESPECIFIC )PRIMARY INDEX (col1,col2)ON COMMIT PRESERVE ROWS; 输出: 1 2 3 4 5 6 7 8 910 CREATE LOCAL TEMPORARY TABLE TMP_RATING_SYS_PARA ( col1 INTEGER NOT NULL ,col2 INTEGER NOT NULL ,col3 VARCHAR(100) NOT NULL /* CHARACTER SET UNICODE CASESPECIFIC */))ON COMMIT PRESERVE ROWS DISTRIBUTE BY HASH (col1,col2); 输入:迁移支持的字符数据类型 在Teradata中,以下字符集支持以字符个数来衡量字符串数据类型的长度: LATIN UNICODE GRAPHIC 不过,KANJISJIS字符集支持以字节个数来衡量字符串数据类型的长度。 以COLUMN_NAME VARCHAR(100) CHARACTER SET UNICODE CASESPECIFIC COLUMN_NAME VARCHAR(100) CHARACTER SET LATIN CASESPECIFIC为例,字符串最大支持100个字符(而不是字节)。 在GaussDB(DWS)中,字符串数据类型长度通过字节(而不是字符)来衡量。 VARCHAR(100)和VARCHAR2(100)最多支持100个字节(而不是字符)。 但是NVARCHAR2(100)最大可支持100个字符。 因此,如果Teradata使用LATIN、UNICODE或GRAPHIC字符集,VARCHAR应迁移为NVARCHAR。 12345 CREATE TABLE tab1(col1 VARCHAR(10),COL2 CHAR(1)); 输出: 1 2 3 4 5 6 7 8 9101112131415 a)when default_charset = UNICODE/GRAPHICCREATE TABLE tab1 ( col1 NVARCHAR2 (10) ,COL2 NVARCHAR2 (1) ) ;b)when default_charset = LATINCREATE TABLE tab1 ( col1 VARCHAR2 (10) ,COL2 VARCHAR2 (1) ) ; 输入: 12345 CREATE TABLE tab1(col1 VARCHAR(10) CHARACTER SET UNICODE,COL2 CHAR(1)); 输出: 1 2 3 4 5 6 7 8 9101112131415 a) when default_charset = UNICODE/GRAPHICCREATE TABLE tab1 ( col1 NVARCHAR2 (10) /* CHARACTER SET UNICODE*/ ,COL2 NVARCHAR2( 1 ) ) ; b) when default_charset = LATINCREATE TABLE tab1 ( col1 NVARCHAR2 (10) /* CHARACTER SET UNICODE*/ ,COL2 CHAR(1) ) ; 父主题: 表迁移
  • 授予执行权限 此功能授予用户特定包的特定权限。特定包中定义的所有过程和函数都将被授予执行权限。 输入 1 GRANT EXECUTE ON SAD.BAS_LOOKUP_MISC_PKG TO EIP_SAD; 输出 12 GRANT EXECUTE ON procedure_name TO EIP_SAD;GRANT EXECUTE ON function1_name TO EIP_SAD; 此处,procedure _name和function1_name必须都属于SAD.BAS_LOOKUP_MISC_PKG。 授予包的执行权限 包的最后一次授权不会被转换。 --GRANT 输入 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637 Below should be created as 1spec/t603.SQLCREATE OR REPLACE PACKAGE SAD.bas_dml_lookup_pkg IS FUNCTION func_name RETURN VARCHAR2; PROCEDURE data_change_logs ( pi_table_name IN VARCHAR2 , pi_table_key_columns IN VARCHAR2 , po_error_msg OUT VARCHAR2 );END bas_dml_lookup_pkg;/GRANT EXECUTE ON SAD.bas_dml_lookup_pkg TO eip_sad;==============================Below should be created as 2body/t603.SQLCREATE OR REPLACE PACKAGE BODY SAD.bas_dml_lookup_pkg IS g_pkg_name CONSTANT VARCHAR2(30) := 'bas_dml_ic_price_rule_pkg' ; g_func_name VARCHAR2(100); FUNCTION func_name RETURN VARCHAR2 IS l_func_name VARCHAR2(100) ; BEGIN l_func_name := g_pkg_name || '.' || g_func_name ; RETURN l_func_name ; END func_name; PROCEDURE data_change_logs ( pi_table_name IN VARCHAR2 , pi_table_key_columns IN VARCHAR2 , po_error_msg OUT VARCHAR2 ) IS BEGIN ... END data_change_logs;END bas_dml_lookup_pkg;/ 输出 1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829303132333435363738394041424344454647484950 BEGIN INSERT INTO MIG_ORA_EXT.MIG_PKG_VARIABLES ( PACKAGE_NAME,SPEC_OR_BODY,VARIABLE_NAME , VARIABLE_TYPE,CONSTANT_I,DEFAULT_VALUE , RUNTIME_EXEC_I ) VALUES ( UPPER('bas_dml_lookup_pkg'), 'B', UPPER('g_pkg_name') , UPPER( 'VARCHAR2(30)' ),TRUE,'bas_dml_ic_price_rule_pkg' , FALSE ) ; INSERT INTO MIG_ORA_EXT.MIG_PKG_VARIABLES ( PACKAGE_NAME,SPEC_OR_BODY,VARIABLE_NAME , VARIABLE_TYPE,CONSTANT_I,DEFAULT_VALUE , RUNTIME_EXEC_I ) VALUES ( UPPER('bas_dml_lookup_pkg'), 'B', UPPER( 'g_func_name' ) , UPPER( 'VARCHAR2(100)' ),FALSE,NULL , FALSE ) ;END ;/CREATE OR REPLACE FUNCTION SAD.bas_dml_lookup_pkg#bas_dml_lookup_pkg#func_nameRETURN VARCHAR2 PACKAGE IS MIG_PV_VAL_DUMMY_G_PKG_NAME VARCHAR2(30) := MIG_ORA_EXT.MIG_FN_GET_PKG_VARIABLE( 'SAD' ,'bas_dml_lookup_pkg' ,'g_pkg_name' )::VARCHAR2(30); MIG_PV_VAL_DUMMY_G_FUNC_NAME VARCHAR2(100) := MIG_ORA_EXT.MIG_FN_GET_PKG_VARIABLE( 'SAD' ,'bas_dml_lookup_pkg' ,'g_func_name' )::VARCHAR2(100); l_func_name VARCHAR2 ( 100 ) ;BEGIN l_func_name := MIG_PV_VAL_DUMMY_G_PKG_NAME || '.' || MIG_PV_VAL_DUMMY_G_FUNC_NAME ; MIG_ORA_EXT.MIG_FN_SET_PKG_VARIABLE ( 'SAD' ,'bas_dml_lookup_pkg' ,'g_func_name' ,MIG_PV_VAL_DUMMY_G_FUNC_NAME ) ; MIG_ORA_EXT.MIG_FN_SET_PKG_VARIABLE ( 'SAD' ,'bas_dml_lookup_pkg' ,'g_pkg_name' ,MIG_PV_VAL_DUMMY_G_PKG_NAME ) ; RETURN l_func_name ;END ;/CREATE OR REPLACE PROCEDURE SAD.bas_dml_lookup_pkg#data_change_logs ( pi_table_name IN VARCHAR2 , pi_table_key_columns IN VARCHAR2 , po_error_msg OUT VARCHAR2 ) PACKAGE ISBEGIN ...END ;/GRANT EXECUTE ON FUNCTION SAD.bas_dml_lookup_pkg#bas_dml_lookup_pkg#func_name() TO eip_sad;GRANT EXECUTE ON FUNCTION SAD.bas_dml_lookup_pkg#data_change_logs(VARCHAR2, VARCHAR2) TO eip_sad; 父主题: Oracle语法迁移
  • 支持中文字符 输入:中文( 1 CREATE TABLE test11(a int,b int)/*CREATE TABLE test11(a int,b int)*/; 输出 1 CREATE TABLE test11 (a INT,b INT)/*CREATE TABLE test11(a int,b int)*/; 输入:中文) 1 CREATE TABLE test11(a int,b int)/*CREATE TABLE test11(a int,b int)*/; 输出 1 CREATE TABLE test11 (a INT,b INT)/*CREATE TABLE test11(a int,b int)*/; 输入:中文, 1 CREATE TABLE test11(a int,b int)/*CREATE TABLE test11(a int,b int)*/; 输出 1 CREATE TABLE test11 (a INT,b INT)/*CREATE TABLE test11(a int,b int)*/; 输入:支持中文SPACE 1 CREATE TABLE test11(a int,b int)/*CREATE TABLE test11(a int,b int)*/; 输出 1 CREATE TABLE test11 (a INT,b INT)/*CREATE TABLE test11(a int,b int)*/; 父主题: Oracle语法迁移
  • VARRAY REF CURSOR定义为返回参数。 设置plSQLCollection=varray后进行迁移。 输入: VARRAY 1 2 3 4 5 6 7 8 910111213141516171819202122232425 CREATEOR REPLACE TYPE TYPE_RMTS_ARRAYTYPE IS TABLEOF VARCHAR2 (30000); CREATE OR REPLACE PACKAGE BODY SCMS_STRING_UTILSAsFUNCTION END_WITH (SR CS TRING VARCHAR2, --Source character string ENDCHAR VARCHAR2, --End character string IGNORECASE BOOLEAN --Ignore Case )RETURN BOOLEAN IS SRCLEN NUMBER (20) := LENGTH(SRCSTRING);ENDLEN NUMBER (20) := LENGTH(ENDCHAR);V_TOKEN_ARRAY TYPE_RMTS_ARRAYTYPE := TYPE_RMTS_ARRAYTYPE ();V_TOKEN_ARRAY1 TYPE_RMTS_ARRAYTYPE := TYPE_RMTS_ARRAYTYPE ();I NUMBER (20) := 1;TMP_CHAR VARCHAR(1);TMP_CHAR1 VARCHAR(1);BEGIN... END;END;/ 输出 1 2 3 4 5 6 7 8 91011121314151617 CREATEOR REPLACE FUNCTION SCMS_STRING_UTILS.END_WITH (SRCSTRING VARCHAR2 /* source character string */, ENDCHAR VARCHAR2 /* End character string */, IGNORECASE BOOLEAN /* Ignore case */)RETURN BOOLEAN IS SRCLEN NUMBER (20) := LENGTH(SRCSTRING);ENDLEN NUMBER (20) := LENGTH(ENDCHAR);TYPE TYPE_RMTS_ARRAYTYPE IS VARRAY (1024) OF VARCHAR2 (30000);V_TOKEN_ARRAY TYPE_RMTS_ARRAYTYPE /*:= TYPE_RMTS_ARRAYTYPE()*/;V_TOKEN_ARRAY1 TYPE_RMTS_ARRAYTYPE /*:= TYPE_RMTS_ARRAYTYPE()*/;I NUMBER (20) := 1;TMP_CHAR VARCHAR(1);TMP_CHAR1 VARCHAR(1);BEGINEND; 父主题: Oracle语法迁移
  • 包拆分 包规范迁移为以包名命名的模式,包体中的存储过程和函数迁移为Packagename.procedurename和Packagename.funtionname。 设置pkgSchemaNaming=true后,可以进行迁移。 输入: PACKAGE1.FUNC1 1 2 3 4 5 6 7 8 9101112131415161718192021 CREATE OR REPLACE PACKAGE BODY pack AS FUNCTION get_fullname(n_emp_id NUMBER) RETURN VARCHAR2 IS v_fullname VARCHAR2(46); BEGIN SELECT first_name || ',' || last_name INTO v_fullname FROM employees WHERE employee_id = n_emp_id; RETURN v_fullname; END get_fullname; PROCEDURE get_salary(n_emp_id NUMBER) RETURN NUMBER IS n_salary NUMBER(8,2); BEGIN SELECT salary INTO n_salary FROM employees WHERE employee_id = n_emp_id; END get_salary;END pack;/ 输出 1 2 3 4 5 6 7 8 91011121314151617181920212223242526 CREATEOR REPLACE FUNCTION pack.get_fullname ( n_emp_id NUMBER )RETURN VARCHAR2 IS v_fullname VARCHAR2 ( 46 ) ;BEGIN SELECT first_name || ',' || last_name INTO v_fullname FROM employees WHERE employee_id = n_emp_id ; RETURN v_fullname ; END ;/CREATE OR REPLACE FUNCTION pack.get_salary ( n_emp_id NUMBER ) RETURN NUMBER IS n_salary NUMBER ( 8 ,2 ) ;BEGIN SELECT salary INTO n_salary FROM employees WHERE employee_id = n_emp_id ; RETURN n_salary ; END ; / 若pkgSchemaNaming为false,可拆分包。 当bas_lookup_misc_pkg调用insert_fnd_data_change_logs时,不会迁移insert_fnd_data_change_logs。 输入 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334 CREATE OR REPLACE PACKAGE BODY SAD.bas_dml_lookup_pkg IS g_pkg_name CONSTANT VARCHAR2(30) := 'bas_dml_ic_price_rule_pkg' ; g_func_name VARCHAR2(100); FUNCTION func_name RETURN VARCHAR2 IS l_func_name VARCHAR2(100) ; BEGIN l_func_name := g_pkg_name || '.' || g_func_name ; RETURN l_func_name ; END ; PROCEDURE data_change_logs ( pi_table_name IN VARCHAR2 , pi_table_key_columns IN VARCHAR2 , po_error_msg OUT VARCHAR2 ) IS BEGIN g_func_name := 'insert_fnd_data_change_logs_t'; INSERT INTO fnd_data_change_logs_t ( logid, table_name, table_key_columns ) VALUES ( fnd_data_change_logs_t_s.NEXTVAL , pi_table_name, pi_table_key_columns ); EXCEPTION WHEN OTHERS THEN po_error_msg := 'Others Exception raise in ' || func_name || ',' || SQLERRM; END data_change_logs;END bas_dml_lookup_pkg;/ 输出 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334 CREATE OR REPLACE FUNCTION SAD.bas_dml_lookup_pkg#func_nameRETURN VARCHAR2 IS MIG_PV_VAL_DUMMY_G_PKG_NAME VARCHAR2(30) := MIG_ORA_EXT.MIG_FN_GET_PKG_VARIABLE ( 'SAD', 'BAS_DML_LOOKUP_PKG', 'G_PKG_NAME' )::VARCHAR2(30) ; MIG_PV_VAL_DUMMY_G_FUNC_NAME VARCHAR2(100) := MIG_ORA_EXT.MIG_FN_GET_PKG_VARIABLE ( 'SAD', 'BAS_DML_LOOKUP_PKG', 'G_FUNC_NAME' )::VARCHAR2(100) ; l_func_name VARCHAR2(100) ;BEGIN l_func_name := MIG_PV_VAL_DUMMY_G_PKG_NAME || '.' || MIG_PV_VAL_DUMMY_G_FUNC_NAME ; RETURN l_func_name ;END ;/CREATE OR REPLACE PROCEDURE SAD.bas_dml_lookup_pkg#data_change_logs ( pi_table_name IN VARCHAR2 , pi_table_key_columns IN VARCHAR2 , po_error_msg OUT VARCHAR2 ) IS MIG_PV_VAL_DUMMY_G_FUNC_NAME VARCHAR2(30) := MIG_ORA_EXT.MIG_FN_GET_PKG_VARIABLE ( 'SAD' ,'BAS_DML_LOOKUP_PKG' ,'G_FUNC_NAME' )::VARCHAR2(30) ;BEGIN MIG_PV_VAL_DUMMY_G_FUNC_NAME := 'insert_fnd_data_change_logs_t' ; INSERT INTO fnd_data_change_logs_t ( logid,table_name,table_key_columns ) VALUES ( NEXTVAL ( 'fnd_data_change_logs_t_s' ) , pi_table_name, pi_table_key_columns ) ; MIG_ORA_EXT.MIG_FN_SET_PKG_VARIABLE ( 'SAD', 'BAS_DML_LOOKUP_PKG', 'G_FUNC_NAME', MIG_PV_VAL_DUMMY_G_FUNC_NAME ) ; EXCEPTION WHEN OTHERS THEN po_error_msg := 'Others Exception raise in ' || SAD.bas_dml_lookup_pkg#func_name( ) || ',' || SQLERRM ; MIG_ORA_EXT.MIG_FN_SET_PKG_VARIABLE ( 'SAD', 'BAS_DML_LOOKUP_PKG', 'G_FUNC_NAME', MIG_PV_VAL_DUMMY_G_FUNC_NAME ) ;END ;/ PACKAGE关键字 内核需要将包标签添加到从包转换来的函数和存储过程。 输入 1 2 3 4 5 6 7 8 91011121314 CREATE OR REPLACE PACKAGE BODY SAD.bas_dml_lookup_pkg IS FUNCTION func_name RETURN VARCHAR2 IS l_func_name VARCHAR2(100) ; BEGIN l_func_name := 'bas_dml_lookup_pkg' || '.' || 'func_name' ; RETURN l_func_name ; END ;END bas_dml_lookup_pkg ;/ 输出 1 2 3 4 5 6 7 8 91011 CREATE OR REPLACE FUNCTION func_nameRETURN VARCHAR2 PACKAGEIS l_func_name VARCHAR2(100) ;BEGIN l_func_name := 'bas_dml_lookup_pkg' || '.' || 'func_name' ; RETURN l_func_name ;END ;/ 父主题: PL/SQL包
  • REF CURSOR REF Cursor是一种数据类型,它可保存数据库游标值,并可用于返回查询结果。 DSC支持REF CURSOR的迁移。如下示例显示了DSC如何迁移lref_strong_emptyp(本地REF CURSOR)和ref_strong_emptyp(包级别REF CURSOR)。 输入:PL/SQL程序包中使用REF CURSOR(包规范和包体) 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930 # Package specificationCREATE OR REPLACE PACKAGE pkg_refcur IS TYPE ref_variable IS REF CURSOR; TYPE ref_strong_emptyp IS REF CURSOR RETURN emp_o%ROWTYPE;PROCEDURE p_get_employees ( v_id in INTEGER ,po_results OUT ref_strong_emptyp );END pkg_refcur ;/# Package bodyCREATE OR REPLACE PACKAGE BODY pkg_refcur IS TYPE lref_strong_emptyp IS REF CURSOR RETURN emp_o%ROWTYPE ; var_num NUMBER ;PROCEDURE p_get_employees ( v_id IN INTEGER, po_results OUT ref_strong_emptyp ) is vemp_rc lref_strong_emptyp ;BeginOPEN po_results for SELECT * FROM emp_o e WHERE e.id = v_id;EXCEPTION WHEN OTHERS THEN RAISE;END p_get_employees;END pkg_refcur;/ 输出 1 2 3 4 5 6 7 8 910111213141516171819 BEGIN INSERT INTO MIG_ORA_EXT.MIG_PKG_VARIABLES ( SCHEMA_NAME ,PACKAGE_NAME ,SPEC_OR_BODY ,VARIABLE_NAME ,VARIABLE_TYPE ,CONSTANT_I ,DEFAULT_VALUE ,EXPRESSION_I ) VALUES ( UPPER( current_schema ( ) ) ,UPPER( 'pkg_refcur' ) ,'B' ,UPPER( 'var_num' ) ,UPPER( 'NUMBER' ) ,false ,NULL ,false ) ;END ;/CREATE OR REPLACE PROCEDURE pkg_refcur#p_get_employees ( v_id IN INTEGER ,po_results OUT SYS_REFCURSOR ) is vemp_rc SYS_REFCURSOR ; Begin OPEN po_results for SELECT * FROM emp_o e WHERE e.id = v_id ; EXCEPTION WHEN OTHERS THEN RAISE ; END ; / 父主题: PL/SQL包
  • OUTER QUERY (+) GaussDB(DWS)支持JOIN,因此添加supportJoinOperator配置参数。 设置supportJoinOperator=false后OUTER QUERY (+)可迁移。 输入:OUTER QUERY(+) 123456789 SELECT PP.PUBLISH_NO FROM SPMS_PA RAM _PUBLISH PP WHERE PP.PUBLISH_ID(+) = TB2.PUBLISH_ID; SELECT I.APP_CHNAME, I.APP_SHORTNAME FROM SPMS_APPVERSION SA, SPMS_APP_INFO I WHERE SA.APP_ID = I.APP_ID(+) AND SA.DELIVERY_USER = IN_USERID ORDER BY APPVER_ID DESC ; 输出 1 2 3 4 5 6 7 8 91011121314151617181920 SELECT PP.PUBLISH_NO FROM SPMS_PARAM_PUBLISH PP WHERE PP.PUBLISH_ID (+) = TB2.PUBLISH_ID; SELECT I.APP_CHNAME ,I.APP_SHORTNAME FROM SPMS_APPVERSION SA ,SPMS_APP_INFO I WHERE SA.APP_ID = I.APP_ID (+) AND SA.DELIVERY_USER = IN_USERID ORDER BY APPVER_ID DESC; 父主题: Oracle语法迁移
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全