更新时间:2023-03-17 GMT+08:00
DSC约束和限制
DSC的约束和限制如下:
通用
- DSC仅用于语法迁移,不支持数据迁移。
- 如果在将IN/NOT IN操作符转换为EXISTS/NOT EXISTS时,子查询的SELECT子句包含aggregate函数,则迁移的脚本可能发生问题。
Teradata
- 如果含有FORMAT参数的case语句未用半角括号“()”括起来,该语句不会处理。
在该示例中,case when column1="0", column1="value" end未用半角括号括起,因此不会处理该语句。
- 如果Teradata查询中同时使用SELECT *和QUALIFY子句,迁移的查询会为QUALIFY子句多返回一列。
Teradata查询
1 2 3 4
SELECT * FROM dwQErrDtl_mc.C03_CORP_TIME_DPSIT_ACCT WHERE 1 = 1 AND Data_Dt = CAST( '20150801' AS DATE FORMAT 'YYYYMMDD' ) QUALIFY ROW_NUMBER( ) OVER( PARTITION BY Agt_Num, Agt_Modif_Num ORDER BY NULL ) = 1;
迁移后的查询
1 2 3 4 5 6 7
SELECT * FROM ( SELECT *, ROW_NUMBER( ) OVER( PARTITION BY Agt_Num, Agt_Modif_Num ORDER BY NULL ) AS ROW_NUM1 FROM dwQErrDtl_mc.C03_CORP_TIME_DPSIT_ACCT WHERE 1 = 1 AND Data_Dt = CAST( '20150801' AS DATE ) ) Q1 WHERE Q1.ROW_NUM1 = 1;
在迁移后的查询中,ROW_NUMBER( ) OVER( PARTITION BY Agt_Num ,Agt_Modif_Num ORDER BY NULL ) AS ROW_NUM1列为额外返回的一列。
- 子查询或函数内不支持对表的命名引用。
Oracle
- 在如下场景中不处理ROWID:
1
SELECT empno,ename ,d.deptno,d.rowid FROM ( SELECT * FROM employees where deptno is not null) e , dept d WHERE d.deptno = e.deptno;
- 窗口函数(RANK,ROW_NUMBER)中的aggregate在字段列表中不可用。
1 2 3 4 5 6 7 8
SELECT TIME, Region, ROW_NUMBER ( ) OVER (ORDER BY SUM (profit) DESC) AS rownumber , GROUPING (TIME) AS T , GROUPING (Region) AS R FROM Sales GROUP BY CUBE (TIME, Region) ORDER BY TIME, Region;
- 如果在SELECT语句中指定了星号(*),并且未指定VALUES子句,则INSERT FIRST或INSERT ALL查询的迁移将无法正常运行。
- DSC只支持在WHERE子句的末尾指定ROWNUM条件。
- 该工具不支持在UPDATE子句中使用ROWNUM函数。
1 2
UPDATE tableName SET empno = ROWNUM where column = "value";
- 该工具不支持INDEX子句中基于列表分区的功能。
1 2 3 4 5 6 7 8
CREATE TABLE sales(acct_no NUMBER(5) ORGANIZATION INDEX INCLUDING acct_no OVERFLOW TABLESPACE example PARTITION BY LIST (acct_no) (PARTITION VALUES (1) PARTITION VALUES (DEFAULT) TABLESPACE example);
- DSC不支持没有表名或表别名的JOIN条件。
- 存储过程和函数必须以“/”结尾。
父主题: DSC SQL语法迁移工具