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;
この場合、埋め込み関数 「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;
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;
$$;
埋め込みコードユニットレポートには、埋め込みプロシージャが1つのみ表示されます。
以下は、パッケージ内のこの組み込みプロシージャのエントリで報告されるすべての値です。
パーティションキー の値は移行によって異なります。
ファイルタイプ は、.sql拡張子を持つファイルで移行されたため、 SQL となります。
PACKAGE BODY
は埋め込みプロシージャを含むトップレベルのコードユニットであるため、 ParentCategory はPACKAGE BODY
になります。ParentID は
my_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%
となります。