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;
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;
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;
$$;
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 oPACKAGE 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çãoCREATE PROCEDURE
faz parte da categoria de unidade de códigoPROCEDURE
.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 emPACKAGE 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 oDBMS_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.