728x90

오라클 데이터베이스에서 프로시저(Procedure)의 파라미터 정보를 조회하는 것은 DBA나 개발자에게 유용한 작업입니다. 특정 프로시저의 파라미터 이름, 데이터 타입, 입력/출력 여부를 확인해야 할 때가 많죠. 이번 글에서는 Python의 oracledb 라이브러리를 사용해 오라클 프로시저의 파라미터 정보를 조회하는 코드를 작성해 보겠습니다. 이 코드는 프로시저 이름을 입력받아 해당 파라미터 정보를 반환하는 간단한 스크립트입니다.
준비물
-
Python 환경: Python 3.6 이상
-
oracledb 라이브러리: 설치가 필요합니다. 아래 명령어로 설치하세요.bash
pip install oracledb
-
오라클 데이터베이스 접속 정보: 사용자 이름, 비밀번호, DSN(데이터 소스 이름)이 필요합니다.
-
오라클 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)
코드 설명
-
라이브러리 임포트: oracledb를 사용해 오라클 데이터베이스에 연결합니다.
-
함수 정의: get_procedure_parameters 함수는 프로시저 이름과 접속 정보를 받아 파라미터 정보를 조회합니다.
-
쿼리: ALL_ARGUMENTS 뷰에서 object_name이 입력된 프로시저 이름과 일치하는 데이터를 조회합니다. package_name IS NULL 조건은 패키지에 포함되지 않은 독립 프로시저만 대상으로 합니다.
-
결과 처리: 조회된 파라미터 정보를 보기 좋게 출력하고, 리스트로 반환합니다.
-
예외 처리: 데이터베이스 연결 오류나 쿼리 실행 오류를 처리합니다.
-
자원 해제: 커서와 연결을 안전하게 닫습니다.
실행 방법
-
oracledb 설치 확인: 터미널에서 pip show oracledb를 실행해 설치 여부를 확인하세요.
-
접속 정보 수정: 코드의 username, password, dsn, procedure_name을 실제 환경에 맞게 수정합니다.
-
스크립트 실행: 아래 명령어로 실행합니다.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
'Python을 배워보자' 카테고리의 다른 글
Python과 oracledb로 SQL 파일의 Oracle 저장 프로시저 실행하기 (0) | 2025.05.08 |
---|---|
Python에서 Oracle 저장 프로시저의 DBMS_OUTPUT.PUT_LINE 메시지 확인하기 (0) | 2025.05.05 |
Oracle DB에서 저장 프로시저 호출 및 동적 데이터 처리 방법 (0) | 2025.04.27 |
파이썬으로 오라클 스토어드 프로시저 실행하기: 다중 IN/OUT 파라미터와 커서 열 타입 출력 (0개 행 포함) (1) | 2025.04.26 |
파이썬으로 디렉토리 내 파일의 문자열 처리 및 갱신하기 (재귀 호출 방식) (0) | 2025.04.24 |