Python을 배워보자

오라클 프로시저 파라미터 정보 조회하는 파이썬 코드 (oracledb 사용)

_Blue_Sky_ 2025. 5. 14. 23:11
728x90

 
오라클 데이터베이스에서 프로시저(Procedure)의 파라미터 정보를 조회하는 것은 DBA나 개발자에게 유용한 작업입니다. 특정 프로시저의 파라미터 이름, 데이터 타입, 입력/출력 여부를 확인해야 할 때가 많죠. 이번 글에서는 Python의 oracledb 라이브러리를 사용해 오라클 프로시저의 파라미터 정보를 조회하는 코드를 작성해 보겠습니다. 이 코드는 프로시저 이름을 입력받아 해당 파라미터 정보를 반환하는 간단한 스크립트입니다.

준비물
  1. Python 환경: Python 3.6 이상
  2. oracledb 라이브러리: 설치가 필요합니다. 아래 명령어로 설치하세요.
    bash
     
    pip install oracledb
  3. 오라클 데이터베이스 접속 정보: 사용자 이름, 비밀번호, DSN(데이터 소스 이름)이 필요합니다.
  4. 오라클 DBA 권한: ALL_ARGUMENTS 뷰에 접근할 수 있는 권한이 필요합니다.

코드 작성
아래는 프로시저 이름을 입력받아 해당 프로시저의 파라미터 정보를 조회하는 파이썬 코드입니다. 코드에는 주석을 추가해 각 단계를 설명했습니다.
python
 
import oracledb

def get_procedure_parameters(proc_name, username, password, dsn):
    """
    오라클 프로시저의 파라미터 정보를 조회하는 함수
    :param proc_name: 조회할 프로시저 이름
    :param username: 오라클 사용자 이름
    :param password: 오라클 비밀번호
    :param dsn: 데이터 소스 이름 (호스트:포트/서비스명)
    :return: 파라미터 정보 리스트
    """
    try:
        # 오라클 데이터베이스 연결
        connection = oracledb.connect(user=username, password=password, dsn=dsn)
        cursor = connection.cursor()

        # ALL_ARGUMENTS 뷰를 사용해 프로시저 파라미터 정보 조회
        query = """
        SELECT argument_name, data_type, in_out
        FROM all_arguments
        WHERE object_name = UPPER(:proc_name)
        AND package_name IS NULL
        ORDER BY position
        """
        
        # 쿼리 실행
        cursor.execute(query, proc_name=proc_name)
        rows = cursor.fetchall()

        # 결과 출력
        if not rows:
            print(f"프로시저 '{proc_name}'의 파라미터 정보를 찾을 수 없습니다.")
            return []

        print(f"\n프로시저 '{proc_name}'의 파라미터 정보:")
        print("-------------------------------------")
        print("파라미터 이름 | 데이터 타입 | 입출력")
        print("-------------------------------------")
        for row in rows:
            arg_name = row[0] if row[0] else "N/A"  # 파라미터 이름이 NULL인 경우 처리
            print(f"{arg_name:<14} | {row[1]:<12} | {row[2]}")

        return rows

    except oracledb.DatabaseError as e:
        print(f"데이터베이스 오류: {e}")
        return []
    finally:
        # 연결 종료
        if 'cursor' in locals():
            cursor.close()
        if 'connection' in locals():
            connection.close()

# 사용 예시
if __name__ == "__main__":
    # 오라클 접속 정보 (실제 환경에 맞게 수정)
    username = "your_username"
    password = "your_password"
    dsn = "localhost:1521/your_service_name"
    procedure_name = "YOUR_PROCEDURE_NAME"  # 조회할 프로시저 이름

    # 함수 호출
    get_procedure_parameters(procedure_name, username, password, dsn)

 
 
코드 설명
  1. 라이브러리 임포트: oracledb를 사용해 오라클 데이터베이스에 연결합니다.
  2. 함수 정의: get_procedure_parameters 함수는 프로시저 이름과 접속 정보를 받아 파라미터 정보를 조회합니다.
  3. 쿼리: ALL_ARGUMENTS 뷰에서 object_name이 입력된 프로시저 이름과 일치하는 데이터를 조회합니다. package_name IS NULL 조건은 패키지에 포함되지 않은 독립 프로시저만 대상으로 합니다.
  4. 결과 처리: 조회된 파라미터 정보를 보기 좋게 출력하고, 리스트로 반환합니다.
  5. 예외 처리: 데이터베이스 연결 오류나 쿼리 실행 오류를 처리합니다.
  6. 자원 해제: 커서와 연결을 안전하게 닫습니다.

실행 방법
  1. oracledb 설치 확인: 터미널에서 pip show oracledb를 실행해 설치 여부를 확인하세요.
  2. 접속 정보 수정: 코드의 username, password, dsn, procedure_name을 실제 환경에 맞게 수정합니다.
  3. 스크립트 실행: 아래 명령어로 실행합니다.
    bash
     
    python script_name.py

출력 예시
예를 들어, MY_PROC라는 프로시저에 두 개의 파라미터가 있다고 가정하면 출력은 다음과 같을 수 있습니다:
 
프로시저 'MY_PROC'의 파라미터 정보:
-------------------------------------
파라미터 이름 | 데이터 타입 | 입출력
-------------------------------------
P_ID         | NUMBER      | IN
P_NAME       | VARCHAR2    | IN/OUT

 
 
 
추가 팁
패키지 내 프로시저 조회: 패키지 내 프로시저를 조회하려면 query에서 package_name IS NULL 조건을 제거하고 package_name을 추가로 출력하세요.
  • 대소문자 처리: 오라클은 객체 이름을 대문자로 저장하므로, UPPER(:proc_name)을 사용해 입력값을 대문자로 변환했습니다.
  • 보안: 접속 정보는 코드에 하드코딩하지 말고, 환경 변수나 별도의 설정 파일을 사용하는 것이 좋습니다.
  • 확장: 반환된 데이터를 JSON 형식으로 저장하거나, 다른 시스템과 연동할 수 있습니다.

결론
이 코드를 사용하면 오라클 프로시저의 파라미터 정보를 쉽게 조회할 수 있습니다. oracledb 라이브러리는 강력하고 직관적이어서 데이터베이스 작업을 효율적으로 처리할 수 있습니다. 필요에 따라 쿼리나 출력 형식을 커스터마이징해 활용해 보세요!
728x90