SnowConvert : Rapport sur les unités de code intégrées

Qu’est-ce qu’une unité de code intégrée ?

Une unité de code, comme son nom l’indique, est l’élément exécutable le plus atomique et le plus autonome. Dans la plupart des cas, il s’agit d’instructions, mais aussi de fichiers de scripts, car ceux-ci sont exécutés en tant qu’élément unique.

Ainsi, selon la définition précédente, on parle d’unité de code intégrée lorsqu’une unité de code se trouve à l’intérieur d’une unité de code de niveau supérieur. Pour plus d’informations, veuillez vous référer à Rapport sur les unités de code de niveau supérieur.

Exemples d’unités de code intégrées

Dans la section suivante, nous pouvons voir quelques exemples d’unités de code intégrées.

Paquets

Un paquet peut définir plusieurs éléments à l’intérieur de son corps. Le corps du paquet est considéré comme l’unité de code de niveau supérieur car ces éléments ne peuvent être créés individuellement sans créer le corps entier du paquet. Les éléments ou unités de code à l’intérieur d’un paquet compteront comme des unités de code intégrées.

Les instructions suivantes seront comptées comme des unités de code intégrées dans les paquets :

  • Fonctions

  • Procédures

  • Types

  • Curseurs

  • Constantes

  • Variables

  • Exceptions

  • Instructions Pragma

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

Dans ce cas, la fonction intégrée "outer_function(NUMBER)" et la procédure intégrée "outer_procedure(NUMBER)" seront comptées.

Informations dans le rapport sur les unités de code intégrées

Colonne

Description

Clé de partition

L’identificateur unique de la conversion.

Type de fichier

Le type du fichier dans lequel se trouve l’unité de code intégrée. (SQL, BTEQ, etc…)

ParentCategory

La catégorie de l’unité de code de niveau supérieur dans laquelle l’unité de code est intégrée.

ParentID

Le nom complet de l’unité de code de niveau supérieur dans laquelle l’unité de code est intégrée.

Catégorie

La classe ou le type plus large auquel appartient chaque unité de code intégré.

Unité de code

Le type d’unité de code intégré auquel cet élément appartient.

Nom de l’unité de code

Le nom de l’unité de code intégrée, le cas échéant, comme les tables ou les procédures. Ce sera N/A pour les éléments sans nom.

File Name

Le nom du fichier dans lequel se trouve l’unité de code intégrée. Utilise le chemin relatif à partir du répertoire d’entrée.

Numéro de ligne

Le numéro de ligne dans le fichier où se trouve l’unité de code intégrée.

Lignes de code

Le nombre total de lignes de code de l’unité de code intégré.

Nombre d’EWI

Le nombre d’EWIs trouvés dans l’unité de code. Vous pouvez en savoir plus sur les EWIs ici.

Nombre de FDM

Le nombre de FDMs trouvés dans l’unité de code. Vous pouvez en savoir plus sur les FDMs ici.

Nombre de PRF

Le nombre de PRFs trouvés dans l’unité de code. Vous pouvez en savoir plus sur les PRFs ici.

Valeur de gravité EWI la plus élevée

<p>La valeur de gravité EWI la plus élevée trouvée dans l’unité de code intégrée.<br>L’ordre de gravité est le suivant :</p><ul><li>N/A (lorsqu’il n’y a pas d’EWIs)</li><li>Faible</li><li>Moyen</li><li>Élevé</li><li>Critique</li></ul>

UDFs utilisés

Les noms de toutes les fonctions définies par l’utilisateur qui se trouvent dans l’unité de code intégrée. Les noms des UDFs utilisés sont séparés par un canal s’il y en a plusieurs.

EWI

Les codes de tous les EWIs qui se trouvent dans l’unité de code. Ces codes sont séparés par des canaux et ne comprennent pas les codes répétés.

FDM

Les codes de tous les FDMs qui se trouvent dans l’unité de code. Ces codes sont séparés par des canaux et ne comprennent pas les codes répétés.

PRF

Les codes de tous les PRFs qui se trouvent dans l’unité de code. Ces codes sont séparés par des canaux et ne comprennent pas les codes répétés.

Statut de conversion

<p>Le statut final de la conversion de l’unité de code.</p><p>Les statuts de conversion possibles sont :</p><ul><li>NotSupported : Lorsque le taux de conversion de l’unité de code intégrée est de 0 %.</li><li>Partiel : Lorsque le taux de conversion de l’unité de code intégrée est compris entre 0 et 100 %.</li><li>Réussite : Lorsque le taux de conversion de l’unité de code intégrée est de 100 %.</li></ul>

Pourcentage de conversion LoC

Le pourcentage de conversion est basé sur les lignes de code. Une ligne de code unique peut comporter des fragments pris en charge et des fragments non pris en charge, en fonction du formatage du code d’entrée. Dans ces cas, la ligne entière est considérée comme non prise en charge.

Exemple

Supposons que l’instruction CREATE PACKAGE suivante ORACLE SQL se trouve dans son fichier appelé 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

Le rapport sur les unités de code intégrées ne comportera qu’une seule procédure intégrée.

Voici toutes les valeurs qui seront signalées dans l’entrée de cette procédure intégrée à l’intérieur du paquet :

  • La valeur de la clé de partition dépendra de la migration, la valeur ici variera donc.

  • Le type de fichier sera SQL car il a été migré sur un fichier portant l’extension .sql.

  • ParentCategory sera PACKAGE BODY car PACKAGE BODY est l’unité de code de niveau supérieur qui contient la procédure intégrée.

  • ParentID sera my_package1 car c’est le nom de l’unité de code de niveau supérieur qui contient la procédure intégrée.

  • La catégorie pour la procédure intégrée sera PROCEDURE car l’instruction CREATE PROCEDURE fait partie de la catégorie d’unité de code PROCEDURE.

  • L”unité de code elle-même sera CREATE PROCEDURE.

  • Le nom de l”unité de code sera calculate_salary(NUMBER).

  • Le nom du fichier dans lequel cette unité de code a été trouvée est Oracle_01.sql.

  • En supposant que l’instruction CREATE PROCEDURE se trouve dans PACKAGE BODY DEFINITION, le numéro de ligne sera 8.

  • Le nombre de lignes de code est 9.

  • La colonne Nombre d’EWI indique 0 car le code de sortie de comporte pas d’EWIs.

  • La colonne Nombre de FDM indique 3 car le code de sortie comporte trois FDM liés aux UDFs qui ont été ajoutés au code de sortie.

  • La colonne Nombre d’PRF indique N/A car le code de sortie de comporte pas d’PRFs.

  • La valeur de gravité de l’EWI la plus élevée est dans ce cas « N/A » car il n’y a pas d’EWIs.

  • La colonne UDFs utilisés est DBMS_OUTPUT.PUT_LINE_UDF car cette fonction définie par l’utilisateur a été ajoutée pour convertir la fonction DBMS_OUTPUT.PUT_LINE.

  • La colonne EWI indiquera N/A car il n’y a pas de problème lié aux EWI.

  • La colonne FDM indiquera « SSC-FDM-OR0035 » dans ce cas.

  • La colonne PRF indiquera N/A car il n’y a pas de problème lié aux PRF.

  • Le statut de conversion sera « Réussite ».

  • Le pourcentage de conversion LoC est de 100 % car toutes les lignes ont été converties avec succès.