SnowConvert: 埋め込みコードユニットレポート

埋め込みコードユニットとは

コードユニットとは、その名のとおり、最もアトミックで独立した実行要素です。ほとんどの場合、これらはステートメントですが、スクリプトファイルも1つの要素として実行されるため、スクリプトファイルも含まれます。

そのため、先の定義によれば、埋め込みコードユニットとは、コードユニットがトップレベルのコードユニットの中にある場合を指します。詳細情報については、 トップレベルコードユニットレポート をご参照ください。

組み込みコードユニットの例

次のセクションでは、組み込みコードユニットの例をいくつか紹介します。

パッケージ

パッケージはその本文の中に複数の要素を定義することができます。パッケージ本文はトップレベルコードユニットとみなされます。なぜなら、パッケージ本文全体を作成しなければ、これらの要素を個別に作成できないからです。パッケージ内の要素やコードユニットは、埋め込みコードユニットとしてカウントされます。

以下のステートメントは、 パッケージ の埋め込みコードユニットとしてカウントされます。

  • 関数

  • プロシージャ

  • タイプ

  • カーソル

  • 定数

  • 変数

  • 例外

  • Pragmas

CREATE OR REPLACE PACKAGE my_package1 IS
    PROCEDURE outer_procedure(input_value NUMBER);
END my_package1;
/

CREATE OR REPLACE PACKAGE BODY my_package1 IS
    FUNCTION outer_function(value NUMBER) RETURN NUMBER IS
        BEGIN
            RETURN value * 2;
        END inner_function;

    PROCEDURE outer_procedure(input_value NUMBER) IS
    BEGIN
        DBMS_OUTPUT.PUT_LINE('Result of inner function: ' || inner_function(input_value));
        DBMS_OUTPUT.PUT_LINE('Input Value: ' || input_value);
    END outer_procedure;
END my_package1;
Copy

この場合、埋め込み関数 「outer_function(NUMBER)」 と埋め込みプロシージャ 「outer_procedure(NUMBER)」 がカウントされます。

埋め込みコードユニットレポート内の情報

説明

パーティションキー

変換の一意識別子。

ファイルタイプ

埋め込みコードユニットのファイルのタイプ。(SQL、 BTEQ など)

ParentCategory

コードユニットが埋め込まれているトップレベルコードユニットのカテゴリ。

ParentID

コードユニットが埋め込まれているトップレベルコードユニットの完全修飾名。

カテゴリ

各埋め込みコードユニットが属する、広範なクラスまたはタイプ。

コードユニット

この要素が属する埋め込みコードユニットのタイプ。

コードユニット名

テーブルやプロシージャなどの埋め込みコードユニットがある場合は、その名前。名前のない要素ではN/Aになります。

ファイル名

埋め込みコードユニットがあるファイルの名前。入力ディレクトリからの相対パスを使用します。

行番号

埋め込みコードユニットがあるファイル内の行番号。

コード行数

組み込みコードユニットが持つコードの合計行数。

EWI カウント

コードユニット内で見つかった EWIs の数。EWIs については、 こちら をご参照ください。

FDM カウント

コードユニット内で見つかった FDMs の数。FDMs については、 こちら をご参照ください。

PRF カウント

コードユニット内で見つかった PRFs の数。PRFs については、 こちら をご参照ください。

最大 EWI 重大度

<p>組み込みコードユニット内で見つかった最大の EWI 重大度。<br>重大度の順序は以下のとおりです。</p><ul><li>N/A(EWIs がない場合)</li><li>Low</li><li>Medium</li><li>High</li><li>Critical</li></ul>

使用された UDFs

埋め込みコードユニット内にあるすべてのユーザー定義関数の名前。使用された UDFs の名前は、複数ある場合はパイプで区切られます。

EWI

コードユニット内にあるすべての EWIs のコード。これらのコードはパイプで区切られており、繰り返しコードは含まれていません。

FDM

コードユニット内にあるすべての FDMs のコード。これらのコードはパイプで区切られており、繰り返しコードは含まれていません。

PRF

コードユニット内にあるすべての PRFs のコード。これらのコードはパイプで区切られており、繰り返しコードは含まれていません。

変換ステータス

<p>コードユニットの変換の最終ステータスです。</p><p>可能な変換ステータスは次のとおりです。</p><ul><li>NotSupported: 組み込みコードユニットの変換率が0%のとき。</li><li>Partial: 埋め込みコードユニットの変換率が0%から100%の間のとき。</li><li>Success: 埋め込みコードユニットの変換率が100%のとき。</li></ul>

LoC 変換パーセント

変換率はコード行数に基づいています。1行のコードには、入力コードの形式によって、サポートされるフラグメントとサポートされないフラグメントがあります。このような場合、その行全体がサポートされていないと見なされます。

ORACLE SQL 内の次の CREATE PACKAGE がOracle_01.sqlというファイルにあるとします。

CREATE OR REPLACE PACKAGE my_package1 IS
    PROCEDURE calculate_salary(emp_id IN NUMBER);
END my_package1;
/

CREATE OR REPLACE PACKAGE BODY my_package1 IS
    PROCEDURE calculate_salary(emp_id IN NUMBER) IS
        emp_name VARCHAR2(100);
        emp_salary NUMBER;
    BEGIN
        SELECT name, salary INTO emp_name, emp_salary FROM employees WHERE employee_id = emp_id; 
        DBMS_OUTPUT.PUT_LINE('Employee ID: ' || emp_id);
        DBMS_OUTPUT.PUT_LINE('Employee Name: ' || emp_name);
        DBMS_OUTPUT.PUT_LINE('Employee Salary: ' || emp_salary);
    END calculate_salary;
END my_package1;
Copy
CREATE SCHEMA IF NOT EXISTS my_package1
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;

--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "employees" **
CREATE OR REPLACE PROCEDURE my_package1.calculate_salary(emp_id NUMBER(38, 18))
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
    DECLARE
        emp_name VARCHAR(100);
        emp_salary NUMBER(38, 18);
    BEGIN
        SELECT name, salary INTO
            :emp_name,
            :emp_salary
        FROM
            employees
        WHERE employee_id = :emp_id;
        --** SSC-FDM-OR0035 - CHECK UDF IMPLEMENTATION FOR DBMS_OUTPUT.PUT_LINE_UDF. **
        CALL DBMS_OUTPUT.PUT_LINE_UDF('Employee ID: ' || NVL(:emp_id :: STRING, ''));
        --** SSC-FDM-OR0035 - CHECK UDF IMPLEMENTATION FOR DBMS_OUTPUT.PUT_LINE_UDF. **
        CALL DBMS_OUTPUT.PUT_LINE_UDF('Employee Name: ' || NVL(:emp_name :: STRING, ''));
        --** SSC-FDM-OR0035 - CHECK UDF IMPLEMENTATION FOR DBMS_OUTPUT.PUT_LINE_UDF. **
        CALL DBMS_OUTPUT.PUT_LINE_UDF('Employee Salary: ' || NVL(:emp_salary :: STRING, ''));
    END;
$$;
Copy

埋め込みコードユニットレポートには、埋め込みプロシージャが1つのみ表示されます。

以下は、パッケージ内のこの組み込みプロシージャのエントリで報告されるすべての値です。

  • パーティションキー の値は移行によって異なります。

  • ファイルタイプ は、.sql拡張子を持つファイルで移行されたため、 SQL となります。

  • PACKAGE BODY は埋め込みプロシージャを含むトップレベルのコードユニットであるため、 ParentCategoryPACKAGE BODY になります。

  • ParentIDmy_package1 となります。これは、埋め込みプロシージャを含むトップレベルのコードユニット名だからです。

  • CREATEPROCEDURE ステートメントは PROCEDURE コードユニットカテゴリの一部であるため、埋め込みプロシージャの カテゴリPROCEDURE となります。

  • コードユニット 自体は CREATE PROCEDURE になります。

  • コードユニット名前calculate_salary(NUMBER) となります。

  • このコードユニットが見つかった ファイル名 はOracle_01.sqlになります。

  • CREATE PROCEDURE ステートメントが PACKAGE BODY DEFINITION にあると仮定すると、 行番号 は8になります。

  • コード行数 の数字は9になります。

  • 出力コードには EWIs がないため、 EWI カウント 列は0を報告します。

  • FDM カウント 列は、出力コードに追加された UDFs に関連する FDM が3つあるため、3と表示されます。

  • PRF カウント 列は、出力コードに PRFs がないため、N/Aになります。

  • この場合は EWIs がないため、 最大の EWI 重大度 は「N/A」になります。

  • このカスタムユーザー定義関数は、 DBMS_OUTPUT.PUT_LINE を変換するために追加されたため、 使用された UDFs 列は、 DBMS_OUTPUT.PUT_LINE_UDF となります。

  • EWI の問題がないため、 EWI 列はN/Aと表示されます。

  • この場合、 FDM 列には「SSC-FDM-OR0035」と表示されます。

  • PRF の問題がないため、 PRF 列はN/Aと表示されます。

  • 変換ステータス は「Success」となります。

  • LoC 変換率 は、すべての行が正常に変換されたため、 100% となります。