SnowConvert: 임베디드 코드 단위 보고서¶
임베디드 코드 단위란 무엇인가요?¶
코드 유닛은 이름에서 알 수 있듯이 가장 원자적인 독립 실행형 실행 요소입니다. 대부분의 경우 문이지만 단일 요소로 실행되기 때문에 스크립트 파일도 포함될 수 있습니다.
따라서 앞의 정의에 따르면 임베디드 코드 유닛은 코드 유닛이 최상위 코드 유닛 안에 있는 경우입니다. 자세한 내용은 최상위 코드 단위 보고서를 참조하십시오.
임베디드 코드 단위의 예¶
다음 섹션에서는 임베디드 코드 단위의 몇 가지 예를 살펴볼 수 있습니다.
패키지¶
패키지는 본문 내에 여러 요소를 정의할 수 있습니다. 패키지 본문을 최상위 코드 단위로 간주하는 이유는 전체 패키지 본문을 생성하지 않고는 이러한 요소를 개별적으로 생성할 수 없기 때문입니다. 패키지 내부의 요소 또는 코드 단위는 임베디드 코드 단위로 계산됩니다.
다음 문은 패키지
에서 임베디드 코드 단위로 계산됩니다.
함수
프로시저
유형
커서
상수
변수
예외
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가 됩니다. |
파일 이름 |
임베디드 코드 단위가 위치한 파일의 이름입니다. 입력 디렉터리에서 시작하는 상대 경로를 사용합니다. |
라인 번호 |
임베디드 코드 유닛이 위치한 파일 내부의 라인 번호입니다. |
Lines of Code |
임베디드 코드 단위가 가지고 있는 총 코드 라인 수입니다. |
EWI 카운트 |
코드 단위 내에서 발견되는 EWIs 의 수량입니다. EWIs 에 대한 자세한 내용은 durl에서 알아볼 수 있습니다. |
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 의 이름이 2개 이상인 경우 파이프로 구분합니다. |
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 변환 비율 |
변환 비율은 코드 라인을 기준으로 합니다. 입력 코드의 형식에 따라 한 라인의 코드에도 지원되는 조각과 지원되지 않는 조각이 있을 수 있습니다. 이러한 경우 전체 라인이 지원되지 않는 것으로 간주됩니다. |
예¶
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;
$$;
임베디드 코드 단위 보고서에는 임베디드 프로시저가 하나만 포함됩니다.
패키지 내부의 이 임베디드 프로시저의 항목에서 보고되는 모든 값은 다음과 같습니다.
파티션 키 값은 마이그레이션에 따라 달라지므로 여기 값은 달라질 수 있습니다.
파일 형식 은 확장자가 .sql인 파일에서 마이그레이션되었으므로 SQL 이 됩니다.
PACKAGE BODY
은 임베디드 프로시저를 포함하는 최상위 코드 단위이므로 ParentCategory 은PACKAGE BODY
가 됩니다.ParentID 는 임베디드 프로시저를 포함하는 최상위 코드 단위 이름이므로
my_package1
이 됩니다.임베디드 프로시저의 카테고리 는
CREATE PROCEDURE
문이PROCEDURE
코드 단위 카테고리의 일부이므로PROCEDURE
가 됩니다.코드 단위 자체는
CREATE PROCEDURE
입니다.코드 단위 이름 은
calculate_salary(NUMBER)
입니다.이 코드 단위가 발견된 파일 이름 은 Oracle_01.sql입니다.
CREATE PROCEDURE
문이PACKAGE BODY DEFINITION
에 있다고 가정하면 라인 번호 는 8이 됩니다.코드의 라인 번호는 9가 됩니다.
출력 코드에 EWIs 가 없으므로 EWI Count 열은 0을 보고합니다.
출력 코드에 추가된 UDFs 관련 FDM 이 3개 있으므로 FDM Count 열은 3을 보고합니다.
출력 코드에 PRFs 가 없기 때문에 PRF Count 열은 N/A 를 보고합니다.
이 경우 최고 EWI 심각도 는 EWIs 가 없으므로 “N/A”가 됩니다.
사용자 정의 함수가
DBMS_OUTPUT.PUT_LINE
을 변환하기 위해 추가되었으므로 UDFs Used 열은DBMS_OUTPUT.PUT_LINE_UDF
입니다.EWI 문제가 없으므로 EWI 열에 N/A가 표시됩니다.
이 경우 FDM 열에 “
SSC-FDM-OR0035
”가 표시됩니다.PRF 문제가 없으므로 PRF 열에 N/A가 표시됩니다.
변환 상태 는 “
Success
”입니다.모든 라인이 성공적으로 변환되었으므로 LoC 변환율 은
100%
입니다.