0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SQL Server Migration Assistant for Oracle における 0000: Unhandled Exception というSSMA issue への対応方法

Last updated at Posted at 2023-04-09

概要

ケース概要

SSMA で解析できないエラーの場合に出力される。本 issues が発生した場合には、コード全体が変換されなくなるため、ソース側の修正が必要となる。issue のケース数は複数ある可能性がある。Create Reportを実施することで、SSMA issue を確認することができる。

ケース 1 複数カラムを更新する Update 文 にてカラム名を未指定

CREATE TABLE DEPARTMENTS AS SELECT * FROM HR.DEPARTMENTS;
UPDATE departments A
SET
  (
    A.DEPARTMENT_ID,
    A.department_name
  ) = (
    SELECT
      B.DEPARTMENT_ID,
      CAST(B.department_name AS VARCHAR2(30))
    FROM
      HR.departments B
    WHERE
      B.department_id = A.department_id
  )
WHERE
  EXISTS (
    SELECT
      *
    FROM
      HR.departments B
    WHERE
      B.department_id = A.department_id
  );

Azure SQL Database における対処法

対応方法 1

オラクル DB のソースにて、CAST(B.department_name AS VARCHAR2(30))の箇所にてカラム名が設定されないため、AS department_nameを追記する。

UPDATE departments A
SET
  (
    A.DEPARTMENT_ID,
    A.department_name
  ) = (
    SELECT
      B.DEPARTMENT_ID,
      CAST(B.department_name AS VARCHAR2(30)) AS department_name
    FROM
      departments B
    WHERE
      B.department_id = A.department_id
  )
WHERE
  EXISTS (
    SELECT
      *
    FROM
      departments B
    WHERE
      B.department_id = A.department_id
  );

SSMA により次のように変換される。

WITH 
   u$cte AS 
   (
      SELECT B.DEPARTMENT_ID, CAST(B.DEPARTMENT_NAME AS varchar(30)) AS DEPARTMENT_NAME
      FROM DEPARTMENTS  AS B
   )
UPDATE DEPARTMENTS
   SET 
      DEPARTMENT_ID = u$cte.DEPARTMENT_ID, 
      DEPARTMENT_NAME = u$cte.DEPARTMENT_NAME
FROM DEPARTMENTS  AS A 
   LEFT OUTER JOIN u$cte 
   ON u$cte.DEPARTMENT_ID = A.DEPARTMENT_ID
WHERE EXISTS 
   (
      SELECT B$2.DEPARTMENT_ID, B$2.DEPARTMENT_NAME, B$2.MANAGER_ID, B$2.LOCATION_ID
      FROM DEPARTMENTS  AS B$2
      WHERE B$2.DEPARTMENT_ID = A.DEPARTMENT_ID
   )
GO
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?