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;
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;
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;
$$;
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
carPACKAGE 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’instructionCREATE PROCEDURE
fait partie de la catégorie d’unité de codePROCEDURE
.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 dansPACKAGE 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 fonctionDBMS_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.