분류 전체보기 1149

MyBatis에서 숫자 포함 Oracle 컬럼명 매핑 문제 해결하기

문제: 숫자 뒤 언더스코어 컬럼명 매핑 실패Oracle 데이터베이스에서 컬럼명 CNT_100_SM을 Java MyBatis 프로젝트에서 카멜 케이스(cnt100Sm)로 매핑하려 했지만, 유독 숫자(예: 100) 뒤에 언더스코어(_)가 붙은 경우 매핑이 제대로 되지 않는 문제가 발생했습니다. 예를 들어, CNT_100_SM은 cnt100Sm으로 변환되어야 하지만, MyBatis가 이를 인식하지 못하거나 잘못된 필드에 매핑되는 경우가 있었습니다. 이로 인해 부득이하게 컬럼명을 CNT100_SM처럼 변경해 사용하는 불편함을 겪었습니다.이 글에서는 이 문제의 원인을 분석하고, MyBatis에서 숫자 포함 컬럼명을 깔끔하게 처리하는 방법을 정리합니다.원인 분석MyBatis는 데이터베이스 컬럼명(스네이크 케이스)과..

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

오라클 데이터베이스에서 프로시저(Procedure)의 파라미터 정보를 조회하는 것은 DBA나 개발자에게 유용한 작업입니다. 특정 프로시저의 파라미터 이름, 데이터 타입, 입력/출력 여부를 확인해야 할 때가 많죠. 이번 글에서는 Python의 oracledb 라이브러리를 사용해 오라클 프로시저의 파라미터 정보를 조회하는 코드를 작성해 보겠습니다. 이 코드는 프로시저 이름을 입력받아 해당 파라미터 정보를 반환하는 간단한 스크립트입니다.준비물Python 환경: Python 3.6 이상oracledb 라이브러리: 설치가 필요합니다. 아래 명령어로 설치하세요.bash pip install oracledb오라클 데이터베이스 접속 정보: 사용자 이름, 비밀번호, DSN(데이터 소스 이름)이 필요합니다.오라클 DBA ..

PocketFlow-Tutorial-Codebase-Knowledge 프로젝트

코드베이스의 복잡함을 단순화하다새로운 프로젝트에 합류하거나 오픈소스 코드베이스를 탐색할 때, 수백 개의 파일과 복잡한 구조에 압도당한 경험이 있으신가요? The-Pocket의 PocketFlow-Tutorial-Codebase-Knowledge 프로젝트는 이러한 문제를 해결하기 위해 설계된 혁신적인 AI 기반 도구입니다. 이 프로젝트는 GitHub 레포지토리나 로컬 디렉토리의 코드를 분석하여 초보자도 이해할 수 있는 친화적인 튜토리얼을 자동으로 생성합니다. 이 블로그 포스트에서는 이 프로젝트의 주요 기능, 작동 방식, 그리고 개발자에게 미치는 영향을 자세히 살펴보겠습니다.PocketFlow-Tutorial-Codebase-Knowledge란?PocketFlow-Tutorial-Codebase-Knowle..

카테고리 없음 2025.05.11

Python과 oracledb로 SQL 파일의 Oracle 저장 프로시저 실행하기

오라클 데이터베이스에서 저장 프로시저를 관리하다 보면, 특정 디렉토리 내의 SQL 파일을 자동으로 실행해야 할 때가 있습니다. 이 블로그에서는 oracledb 라이브러리와 Python을 사용해, 특정 경로와 그 하위 디렉토리를 순회하며 CREATE OR REPLACE PROCEDURE로 시작하는 SQL 파일을 실행하는 방법을 소개합니다. 이 코드는 기존의 oracle_procedure_util.py 모듈을 기반으로 작성되었으며, 디렉토리 순회와 SQL 실행 로직을 추가했습니다.1. 코드 개요이 Python 스크립트는 다음 기능을 수행합니다:디렉토리 순회: 지정된 경로와 하위 디렉토리를 탐색해 .sql 확장자를 가진 파일을 찾습니다.SQL 파일 필터링: 파일 내용이 CREATE OR REPLACE PROC..

Python에서 Oracle 저장 프로시저의 DBMS_OUTPUT.PUT_LINE 메시지 확인하기

오라클 데이터베이스의 저장 프로시저에서 DBMS_OUTPUT.PUT_LINE으로 출력된 디버깅 메시지를 Python에서 확인하는 방법을 소개합니다. 이 블로그에서는 oracle_procedure_util.py 모듈을 기반으로, DBMS_OUTPUT 메시지를 읽어오는 방법을 단계별로 설명하고, 실제 구현 코드를 제공합니다.1. oracle_procedure_util.py 모듈 개요oracle_procedure_util.py는 오라클 저장 프로시저를 호출하고, 결과를 처리하거나 테스트용 SQL 쿼리를 동적으로 생성하는 유틸리티 모듈입니다. 주요 기능은 다음과 같습니다:저장 프로시저 호출: 오라클 저장 프로시저를 호출해 결과 데이터를 처리합니다.랜덤 데이터 생성: 결과 데이터가 없을 경우, 커서 메타데이터를 ..

Oracle DB에서 저장 프로시저 호출 및 동적 데이터 처리 방법

Oracle 데이터베이스에서 저장 프로시저를 호출하고, 결과가 없을 경우 동적으로 대체 데이터를 생성하는 방법을 소개합니다. 이 글에서는 Python의 oracledb 모듈을 활용해 저장 프로시저를 호출하고, 결과 데이터를 분석하며, 필요 시 랜덤 데이터를 생성해 쿼리를 실행하는 과정을 세련되게 정리했습니다. 초보자부터 숙련자까지 참고할 수 있도록 코드와 출력 예시를 포함했습니다.1. Oracle DB 연결 및 저장 프로시저 호출먼저, Oracle DB에 연결하고 저장 프로시저를 호출하는 기본 구조를 살펴보겠습니다. 아래 코드는 oracledb 모듈을 사용해 DB에 연결하고, 특정 저장 프로시저(NEXTPOT.STP_STK_050101_LST_01)를 호출합니다. CREATE OR REPLACE PRO..

파이썬으로 오라클 스토어드 프로시저 실행하기: 다중 IN/OUT 파라미터와 커서 열 타입 출력 (0개 행 포함)

오라클 스토어드 프로시저에서 SYS_REFCURSOR로 반환되는 emp_names가 0개 행을 반환하더라도, 반환되는 열(first_name, last_name, age)의 데이터 타입(예: VARCHAR2, DECIMAL)을 출력하는 방법을 구현하겠습니다. 이를 위해 oracledb의 커서 객체에서 열 메타데이터를 추출하여 각 열의 데이터 타입을 확인합니다. 또한, 다중 IN/OUT 파라미터를 처리하고, 모든 파라미터의 값, 길이, 타입을 출력합니다. 핵심 아이디어SQL 파일 읽기: 스토어드 프로시저의 SQL 코드가 담긴 파일을 읽어옵니다.데이터베이스 연결: oracledb로 오라클 데이터베이스에 연결합니다.스토어드 프로시저 실행: SQL 코드를 실행해 프로시저를 생성합니다.다중 IN/OUT 처리: 여..

Vue 3 <script setup>과 TypeScript로 부모-자식 컴포넌트 간 함수 호출 구현 (공통 타입 분리)

Vue 3의 설명:DataStructure를 ../types/DataStructure에서 임포트합니다.processData 함수는 DataStructure 타입의 데이터를 받아 처리합니다.defineExpose로 processData를 부모 컴포넌트에서 접근 가능하도록 노출합니다.설명:DataStructure를 ../types/DataStructure에서 임포트합니다.parentData는 DataStructure 타입으로 정의됩니다.ref로 자식 컴포넌트를 참조하며, InstanceType으로 타입을 명시합니다.handleButtonClick은 자식 컴포넌트의 processData 함수를 호출합니다.5. 동작 원리부모 컴포넌트에서 버튼을 클릭하면 handleButtonClick이 실행됩니다.childRe..

파이썬으로 디렉토리 내 파일의 문자열 처리 및 갱신하기 (재귀 호출 방식)

특정 디렉토리 내 모든 파일을 읽어 문자열의 마지막 스페이스를 제거하고, 탭을 4개의 스페이스로 변환한 뒤 파일을 갱신하는 파이썬 코드를 재귀 호출 방식으로 수정해 작성하겠습니다. 이 코드는 하위 디렉토리를 직접 재귀적으로 탐색하며 텍스트 파일을 처리합니다.코드 설명재귀 디렉토리 순회: os.listdir와 재귀 호출을 사용해 디렉토리와 하위 디렉토리를 탐색.파일 읽기/수정: 각 파일을 읽어 문자열을 처리한 후 원본 파일에 덮어씌움.문자열 처리:문자열 끝의 공백 제거: rstrip() 사용.탭을 4개의 스페이스로 변환: replace('\t', ' ') 사용.에러 처리: 파일 읽기/쓰기 중 발생할 수 있는 오류를 처리.파이썬 코드import osdef process_file(file_path): t..

Vue 3와 Vuetify로 구현하는 부모-자식 컴포넌트 간 RESTful 데이터 바인딩: 탭 기반 테이블과 상세 뷰

Vue 3에서 Composition API와 TypeScript를 사용해 RESTful API 데이터를 부모 컴포넌트에서 호출하고, 자식 컴포넌트 두 개(테이블 그리드와 상세 뷰)를 탭으로 구분해 바인딩하는 방법을 소개합니다. Vuetify를 활용해 깔끔한 UI를 구현하며, 실용적인 예제를 통해 배우고자 하는 분들께 도움이 되고자 합니다.이번 예제에서는 부모 컴포넌트에서 검색어 입력과 버튼으로 데이터를 가져오고, 두 자식 컴포넌트가 각각 데이터를 테이블 형태와 클릭 시 개별 행의 상세 정보를 표시하는 방식으로 동작합니다. Vuetify의 탭과 그리드 컴포넌트를 사용해 직관적인 UI를 구성합니다.프로젝트 개요우리의 목표는 다음과 같습니다:부모 컴포넌트: 검색어 입력 필드와 버튼으로 RESTful API 호..