文档首页 > > 工具指南> Migration Tool SQL语法迁移工具> 约束和限制

约束和限制

分享
更新时间: 2019/08/09 GMT+08:00

Migration Tool的约束和限制如下:

通用

  • Migration Tool仅用于语法迁移,不支持数据迁移。
  • 如果在将IN/NOT IN操作符转换为EXISTS/NOT EXISTS时,子查询的SELECT子句包含aggregate函数,则迁移的脚本可能发生问题。

Teradata

  • Migration Tool无法区分SQL语句中的 mod是否是关键字,当mod并非关键字时也会被替换为%。

    例如:Migration Tool将SQL语句中的mod字符串迁移为%。

    SELECT sal 
     FROM employee 
     WHERE name LIKE 'mod (%';

    该查询转换如下:

    SELECT sal 
     FROM employee 
     WHERE name LIKE ' % (%';
  • 如果含有FORMAT参数的case语句未用半角括号“()”括起来,该语句不会处理。
    例如:
    case when column1='0' then column1='value' end (FORMAT 'YYYYMMDD')as alias1

    在该示例中,case when column1="0", column1="value" end未用半角括号括起,因此不会处理该语句。

  • 如果Teradata查询中同时使用SELECT *和QUALIFY子句,迁移的查询会为QUALIFY子句多返回一列。

    例如:

    Teradata查询

    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;

    迁移后的查询

    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列为额外返回的一列。

  • 子查询或函数内不支持对表的命名引用。
    例如,如果输入的查询包含表名(例如foo),迁移工具不会将基于该表命名的引用从子查询(foo.fooid)中迁移到该表中,或从调用该子查询的函数(getfoo(foo.fooid))中迁移到该表中。
    SELECT * FROM foo
     WHERE foosubid IN (
                         SELECT foosubid
                           FROM getfoo(foo.fooid) z
                          WHERE z.fooid = foo.fooid
                          );

Oracle

  • 在如下场景中不处理ROWID:
    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在字段列表中不可用。

    例如:

    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查询的迁移将无法正常运行。
  • Migration Tool只支持在WHERE子句的末尾指定ROWNUM条件。
    例如:
    SELECT ROWNUM, ename,empid
    FROM employees
    WHERE empid = 10 AND deptno = 10 AND ROWNUM < 3
    ORDER BY ename;
  • 该工具不支持在UPDATE子句中使用ROWNUM函数。

    例如:

    UPDATE tableName SET empno = ROWNUM
       where column = "value";
  • 该工具不支持INDEX子句中基于列表分区的功能。

    例如:

    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);
  • Migration Tool不支持没有表名或表别名的JOIN条件。
  • 存储过程和函数必须以“/”结尾。
  • 如果commment_storage_parameter设置为true,存储参数将会被注释掉。
  • 不支持CONNECT BY子句用在多表查询中。
  • 不支持FOR UPDATE子句用在ROWNUM之后。

Oracle(Beta)

Oracle(Beta)迁移工具的约束限制如下:

  • 如果在SELECT语句中指定了星号(*),并且未指定VALUES子句,则INSERT FIRST或INSERT ALL查询的迁移将无法正常运行。
  • Beta工具不支持以下情况的迁移,在迁移时将跳过不支持的语句:
    • EXECUTE IMMEDIATE语句
    • Indexed STRING数据类型(String Arrays)。例如:
      CREATE OR REPLACE FUNCTION get_product_name_2 (prod_id NUMBER, lang_id VARCHAR2)
           RETURN NVARCHAR2
         IS
           /* string */ -- string type
           TYPE product_names IS TABLE OF string(50) INDEX BY PLS_INTEGER;
           vstring   string(50);
           FUNCTION all_product_names (lang_id string) RETURN product_names
             RESULT_CACHE RELIES_ON (Product_Descriptions)
           IS
           all_names product_names;
         BEGIN
           vstring := 'String';
           FOR c IN (SELECT * FROM Product_Descriptions
             WHERE LANGUAGE_ID = lang_id) LOOP
               all_names(c.PRODUCT_ID) := c.TRANSLATED_NAME;
           END LOOP;
           RETURN all_names;
         END;
      BEGIN
         RETURN all_product_names(lang_id)(prod_id);
      END;
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区