기본 콘텐츠로 건너뛰기

라벨이 ORACLE인 게시물 표시

Oracle Calendar

[Oracle] SQL로 달력 만들기: CONNECT BY LEVEL을 활용한 날짜 생성 완벽 가이드 개발을 하다 보면 '데이터가 없는 날짜' 까지 포함해서 조회해야 하는 상황을 자주 마주합니다. 예를 들어 일별 매출 리포트를 뽑는데, 매출이 0원인 날짜는 아예 조회되지 않아 그래프가 뚝뚝 끊기는 현상 같은 것들이죠. 이럴 때 필요한 것이 바로 1일부터 말일까지 꽉 채워진 '달력 테이블(Calendar Dummy Table)' 입니다. 오늘은 오라클(Oracle)의 강력한 계층형 쿼리 기능인 CONNECT BY LEVEL 을 사용하여, 단 3줄의 SQL로 특정 월의 모든 날짜를 생성하는 방법을 심층 분석해 보겠습니다. 1. 핵심 쿼리 분석 가장 먼저, 질문자님께서 공유해주신 코드를 기반으로 핵심 로직을 뜯어보겠습니다. 이 쿼리는 2018년 4월의 1일부터 30일까지를 생성하는 예제입니다. SELECT TO_CHAR(TO_DATE('201804'||LPAD(LEVEL,'2',0), 'YYYYMMDD'),'YYYYMMDD') AS YMD , LEVEL FROM (SELECT TO_DATE('20140601', 'YYYYMMDD') MAKE_DATES FROM DUAL) -- (A) CONNECT BY LEVEL <= TO_CHAR(LAST_DAY(sysdate),'DD') -- (B) 이 쿼리가 작동하는 원리는 다음과 같습니다. (A) DUAL 집합: CONNECT BY 를 수행하기 위한 모태가 되는 1건짜리 데이터입니다. (실제 날짜 값은 바깥에서 하드코딩 되어 있으므로 여기선 단순히 Row Source 역할만 합니다.) ...

Oracle 전체 테이블 삭제 및 DB 링크 복제 자동화: PL/SQL 실전 스크립트 정리

Oracle DB 전체 테이블 삭제 및 DB 링크로 테이블·데이터 복사 자동화하기 개발·운영 환경을 초기화하거나, 다른 서버의 스키마를 그대로 복제해야 할 때 “전체 테이블 삭제 → DB 링크를 이용한 테이블/데이터 복사” 작업이 자주 필요합니다. 이 글에서는 Oracle 데이터베이스 기준으로 PL/SQL 루프 + EXECUTE IMMEDIATE 를 활용해 전체 테이블 삭제와 DB 링크를 통한 테이블/데이터 복사를 자동화하는 방법 을 정리합니다. 실무에서 바로 쓸 수 있는 예제 코드와, 꼭 확인해야 할 주의사항까지 함께 담았습니다. 📚 목차 Oracle DB 전체 테이블 삭제 (user_tables 기반) DB 링크로 테이블 구조만 복사하기 DB 링크로 테이블 데이터까지 복사하기 실무에서 자주 하는 튜닝·주의사항 1. Oracle DB 전체 테이블 삭제 (user_tables 기반) 개발 환경을 초기화하거나, 테스트용 스키마를 리셋할 때 user_tables 기준으로 현재 스키마의 모든 테이블을 DROP 하는 패턴입니다. 아래 예제는 PL/SQL 블록 + 커서 루프 로 구현한 기본 형태입니다. BEGIN FOR c IN (SELECT table_name FROM user_tables) LOOP EXECUTE IMMEDIATE 'DROP TABLE ' || c.table_name || ' CASCADE CONSTRAINTS'; END LOOP; END; / 1-1. 코드 설명 user_tables : 현재 접속한 유저가 소유한 테...

Oracle PL/SQL로 한글 초성 검색 구현하기: FN_CHOSEARCH · FN_APARTCHR 완전 정리

2. 한글 초·중·종성 분리 함수: FN_APARTCHR 초성 검색을 넘어, 한글 한 글자를 초성·중성·종성 단위로 완전히 분리 해야 할 때가 있습니다. 예를 들어 '각' 을 'ㄱㅏㄱ' 으로 분해하여 형태소 분석이나 유사도 검사에 활용하는 경우입니다. 이 로직은 한글 유니코드의 구성 원리 를 기반으로 합니다. 2.1 핵심 분해 함수: FN_APARTCHR 아래 함수는 입력된 한 글자가 한글 완성형 범위(AC00 ~ D7A3)에 속하는지 확인한 후, 유니코드 공식을 적용하여 자모를 분리합니다. CREATE OR REPLACE FUNCTION FN_APARTCHR(P_CHAR IN VARCHAR2) RETURN VARCHAR2 IS ExceptNoHangul EXCEPTION; startHanUniDec NUMBER; calHanUniDec NUMBER; tmpUniDec NUMBER; initUniDec NUMBER; vowelUniDec NUMBER; finUniDec NUMBER; initStr VARCHAR2(10); vowelStr VARCHAR2(10); finStr VARCHAR2(10); BEGIN -- 한글 완성형 범위(AC00 ~ D7A3) 확인 IF ASCIISTR(P_CHAR) NOT BETWEEN '\AC00' AND '\D7A3' THEN RETURN P_CHAR; -- 한글 아니면 원문 반환 END IF; startHanUniDec := FN_H...