Oracle Database 강좌

Oracle의 스토어 프로시저를 주석을 제외한 순수 소스 코드로 확인하려면

_Blue_Sky_ 2024. 11. 24. 16:01
728x90
728x90

 

Oracle SQL만으로 완벽히 주석을 제거하는 것은 상당히 복잡하며, 특히 여러 줄 주석과 중간 주석을 처리하기 위해서는 더 정교한 처리가 필요합니다.

SQL만으로 복잡한 주석 제거를 시도하기보다는, 아래와 같은 외부 스크립트 기반 처리 또는 PL/SQL을 활용하는 방식이 현실적입니다.


외부 스크립트 기반 주석 제거 (권장)

Python이나 다른 스크립트를 이용하여 주석을 제거하는 것이 효과적입니다.

Python 예제:

import re

def remove_comments(sql_source):
    # Remove single-line comments (-- ...)
    sql_no_single_line_comments = re.sub(r'--.*', '', sql_source)
    # Remove multi-line comments (/* ... */)
    sql_no_comments = re.sub(r'/\*.*?\*/', '', sql_no_single_line_comments, flags=re.DOTALL)
    return sql_no_comments.strip()

# Oracle SQL source code example
oracle_source = """
CREATE OR REPLACE PROCEDURE example_proc IS
-- This is a single-line comment
BEGIN
   DBMS_OUTPUT.PUT_LINE('Hello, World!'); -- Inline comment
   /* This is a 
      multi-line comment */
   NULL; /* Another inline comment */
END example_proc;
"""

cleaned_source = remove_comments(oracle_source)
print(cleaned_source)

결과:

CREATE OR REPLACE PROCEDURE example_proc IS
BEGIN
   DBMS_OUTPUT.PUT_LINE('Hello, World!');
   NULL;
END example_proc;

 

728x90

PL/SQL로 주석 제거하는 방법

PL/SQL을 사용해 주석을 제거하는 사용자 정의 함수도 작성할 수 있습니다. 하지만 PL/SQL은 정규 표현식 처리에 제약이 있어 복잡한 주석 제거에는 적합하지 않을 수 있습니다.

단순 주석 제거 함수 예제:

CREATE OR REPLACE FUNCTION REMOVE_COMMENTS(source_text CLOB) RETURN CLOB IS
  result_text CLOB;
BEGIN
  -- Remove single-line comments
  result_text := REGEXP_REPLACE(source_text, '--.*$', '', 1, 0, 'm');
  -- Remove multi-line comments
  result_text := REGEXP_REPLACE(result_text, '/\*.*?\*/', '', 1, 0, 'n');
  RETURN result_text;
END;
/

사용 예:

DECLARE
  raw_source CLOB;
  clean_source CLOB;
BEGIN
  -- 프로시저 소스 가져오기
  SELECT DBMS_METADATA.GET_DDL('PROCEDURE', '프로시저명', '스키마명')
  INTO raw_source
  FROM DUAL;

  -- 주석 제거
  clean_source := REMOVE_COMMENTS(raw_source);

  DBMS_OUTPUT.PUT_LINE(clean_source);
END;
/

SQL만으로 주석 제거를 시도할 경우

SQL로 완벽히 해결하기는 어렵지만, 주석을 포함한 라인을 제거하려면 더 고도화된 필터링 조건이 필요합니다. 다만, 다중 줄 주석과 문장 중간 주석은 SQL만으로 완벽히 제거하기 어렵습니다.


728x90
  • 효율성과 정확성을 위해 Python이나 다른 외부 스크립트를 사용하는 것이 가장 현실적입니다.
  • SQL만으로 처리를 시도하려면 복잡한 조건과 패턴 매칭이 필요하지만, 실수 없이 모든 주석을 제거하기는 쉽지 않습니다.
  • 복잡한 작업일수록 Oracle 내부 처리보다는 스크립트 기반 접근을 추천합니다. 😊

 

 

2024.11.25 - [Python을 배워보자] - 오라클의 스토어 프로시져나 함수의 내용을 주석을 제외해서 내용중에 사용되는 테이블의 명들을 추출

728x90
728x90