SnowConvert: Relatório de unidades de código incorporado

O que é uma unidade de código incorporado?

Uma unidade de código, como o nome sugere, é o elemento executável mais atômico e autônomo. Na maioria dos casos, são instruções, mas também incluem arquivos de script, pois são executados como um único elemento.

Portanto, de acordo com a definição anterior, uma unidade de código incorporada é quando uma unidade de código está dentro de uma unidade de código de nível superior. Para obter mais informações, consulte [Relatório de unidade de código de nível superior] (top-level-code-units-report.md).

Exemplos de unidades de código incorporado

Na seção a seguir, podemos ver alguns exemplos de unidades de código incorporado.

Pacotes

Um pacote pode definir vários elementos dentro de seu corpo. O corpo do pacote é considerado a unidade de código de nível superior porque esses elementos não podem ser criados individualmente sem a criação de todo o corpo do pacote. Os elementos ou unidades de código dentro de um pacote contarão como unidades de código incorporadas.

As instruções a seguir serão contadas como unidades de código incorporadas nos pacotes:

  • Funções

  • Procedimentos

  • Tipos

  • Cursores

  • Constantes

  • Variáveis

  • Exceções

  • 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

Nesse caso, a função incorporada "outer_function(NUMBER)" e o procedimento incorporado "outer_procedure(NUMBER)" serão contados.

Informações no relatório de unidades de código incorporado

Coluna

Descrição

Chave de partição

O identificador exclusivo da conversão.

Tipo de arquivo

O tipo de arquivo em que a unidade de código incorporada está. (SQL, BTEQ, etc…)

ParentCategory

A categoria da unidade de código de nível superior na qual a unidade de código está incorporada.

ParentID

O nome totalmente qualificado da unidade de código de nível superior na qual a unidade de código está incorporada.

Categoria

A classe ou o tipo mais amplo ao qual cada unidade de código incorporada pertence.

Code Unit

O tipo de unidade de código incorporada ao qual esse elemento pertence.

Code Unit Name

O nome da unidade de código incorporado, se houver uma, como tabelas ou procedimentos. Será N/A para elementos sem um nome.

Nome do arquivo

O nome do arquivo no qual a unidade de código incorporada está localizada. Usa o caminho relativo a partir do diretório de entrada.

Line Number

O número da linha dentro do arquivo em que a unidade de código incorporada está localizada.

Linhas de código

O total de linhas de código que a unidade de código incorporada tem.

EWI Count

A quantidade de EWIs encontrada na unidade de código. Você pode saber mais sobre EWIs aqui.

FDM Count

A quantidade de FDMs encontrada na unidade de código. Você pode saber mais sobre FDMs aqui.

PRF Count

A quantidade de PRFs encontrada na unidade de código. Você pode saber mais sobre PRFs aqui.

Highest EWI Severity

<p>O EWI com maior gravidade encontrado na unidade de código incorporada.<br>A ordem de gravidade é a seguinte:</p><ul><li>N/A (quando não há nenhum EWIs)</li><li>Low</li><li>Medium</li><li>High</li><li>Critical</li></ul>

UDFs Used

Os nomes de todas as funções definidas pelo usuário encontradas na unidade de código incorporada. O nome dos UDFs usado é separado por um pipe se houver mais de um.

EWI

Os códigos de todos os EWIs encontrados na unidade de código. Esses códigos são separados por pipes e não incluem códigos repetidos.

FDM

Os códigos de todos os FDMs encontrados na unidade de código. Esses códigos são separados por pipes e não incluem códigos repetidos.

PRF

Os códigos de todos os PRFs encontrados na unidade de código. Esses códigos são separados por pipes e não incluem códigos repetidos.

Status da conversão

<p>O status final da conversão da unidade de código.</p><p>Os possíveis status de conversão são:</p><ul><li>NotSupported: Quando a unidade de código incorporada tem uma taxa de conversão de 0%.</li><li>Partial: Quando a taxa de conversão da unidade de código incorporada está entre 0% e 100%.</li><li>Success: Quando a taxa de conversão da unidade de código incorporada é de 100%.</li></ul>

LoC Conversion Percentage

A porcentagem de conversão é baseada em linhas de código. Uma única linha de código pode ter fragmentos compatíveis e não compatíveis, dependendo de como o código de entrada foi formatado. Nesses casos, a linha inteira é considerada não compatível.

Exemplo

Suponha que o seguinte CREATE PACKAGE em ORACLE SQL esteja localizado em seu arquivo chamado 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

O relatório de unidades de código incorporadas terá apenas um procedimento incorporado.

Aqui estão todos os valores que seriam relatados na entrada desse procedimento incorporado dentro do pacote:

  • O valor de Partition Key dependerá da migração, portanto, o valor aqui poderá variar.

  • O File Type será SQL porque foi migrado em um arquivo com a extensão .sql.

  • O ParentCategory será PACKAGE BODY porque o PACKAGE BODY é a unidade de código de nível superior que contém o procedimento incorporado.

  • O ParentID será my_package1 porque é o nome da unidade de código de nível superior que contém o procedimento incorporado.

  • A Category para o procedimento incorporado será PROCEDURE porque a instrução CREATE PROCEDURE faz parte da categoria de unidade de código PROCEDURE.

  • A Code Unit em si será CREATE PROCEDURE.

  • O Code Unit Name será calculate_salary(NUMBER).

  • O File Name onde essa unidade de código foi encontrada seria Oracle_01.sql.

  • Supondo que a instrução CREATE PROCEDURE esteja em PACKAGE BODY DEFINITION, o número da linha **** será 8.

  • O número de Lines of Code seria 9.

  • A coluna EWI Count informará 0 porque o código de saída não tem EWIs.

  • A coluna FDM Count informará 3 porque o código de saída tem três FDMs relacionados ao UDFs que foram adicionados ao código de saída.

  • A coluna PRF Count informará N/A porque o código de saída não tem PRFs.

  • O Highest EWI Severity nesse caso seria «N/A» porque não há EWIs.

  • A coluna UDFs Used será DBMS_OUTPUT.PUT_LINE_UDF porque essa Função Definida pelo Usuário personalizada foi adicionada para converter o DBMS_OUTPUT.PUT_LINE.

  • A coluna EWI mostrará N/A porque não há problemas com EWI.

  • A coluna FDM mostrará «SSC-FDM-OR0035» nesse caso.

  • A coluna PRF mostrará N/A porque não há problemas com PRF.

  • O status da conversão **** será «Success».

  • A LoC Conversion Percentage é 100% porque todas as linhas foram convertidas com sucesso.