[DB]/[Oracle]_DB(6)
-
[Connect by]_ 계층형 쿼리 & 재귀 쿼리 응용 ( 이달의 휴일 구하기 )
개요 휴일 정보 테이블과 연계하여 이달( 선택한 달 ) 의 총 일수, 총 휴일 수 , 총 근무일 수 를 구하는 쿼리 작성 OUTPUT Total_cnt : 해당 월의 총 일수 Working_cnt : 해당 월의 근무일 수 ( 평일 ) Holiday_cnt 해당 월의 휴일 사용 Oracle 함수 connect by to_char to_date with as () 휴일 테이블 HOLIDAY 해당 테이블에는 휴일 ('YYYY-MM-DD') 생성일 작성자 3가지의 데이터가 들어가도록 구성 선택 월 2022-11-01 11월에는 평일이 22일 휴일이 8일 총일이 30일이 있습니다. Connect by 를 응용한 계층형 쿼리 SELECT COUNT(*) AS TOTAL_CNT ,SUM(WORK_TOTAL_CNT) ..
2022.11.28 -
[connect_by]_ORACLE_계층 형 함수 사용(메뉴트리)
개요 ORACLE 에서 제공하는 계층형 함수인 connect by 탐구 메뉴 정보 테이블에서 메뉴트리 쿼리 생성해보기 의의 보통 트리형 구조( 메뉴트리 ) 와 같은 데이터에 사용 데이터의 부모, 자식 간의 관계를 통해 depth 구분할 때 유용합니다. 문법 START WITH : 계층 구조를 만들 주체 CONNECT BY : 각 데이터의 연결 관계 설정 PRIOR : CONNECT BY 에 사용하며 지정된 컬럼이 부모- 자식의 관계를 가집니다. ORDER SIBLINGS : 계층형 쿼리에서의 정렬을 수행합니다. 예제 1. 태이블 설계 메뉴정보를 입력할 테이블을 구성합니다. 메뉴를 구별할 PK 인 MENU_ID 메뉴 이름인 MENU_NM 부모의 메뉴 아이디를 저장할 HIGH_MENU_ID 로 3가지 컬럼을..
2022.11.21 -
[Oracle]_날자 , 요일 추출_그룹 핑 후 순번 매기기
개요 테이블에 저장된 날자 정보를 토대로 해당 날자의 저장 횟수 (로그인한 횟수) 접속한 날자의 요일 접속한 날자의 Day 일 을 쿼리를 통해서 추출 사용 함수 해당 날자데이터를 요일로 추출 to_char(createDate,'day') 요일 해당 'YYYY-MM-DD' 형식 데이터를 DD 만 추출 substr(trunc(createDate,'dd'),7,2) dd 해당 'YYYY-MM-DD' 데이터를 날자의 '일' 데이터로 추출 EXTRACT(day from createDate) 그룹핑 이후 얼마나 중복되는지 순번을 매겨주는 함수 row_number() over (partition by createDate order by createDate) 예제 유저접속기록 테이블 원래는 'YYYY-MM-DD' 만 ..
2022.10.25 -
[Oracle]_NVL 사용 (DATE,Number) 비교
사용환경] DB : oracle FrameWork : mybatis,ibatis 문제 발생] NULL 처리 시도 방법] CASE WHEN 을 사용 NVL 함수를 사용 NVL 을 사용했을 때 문제가 되었던 점을 정리해 보았습니다. 날자, Number 을 비교했을 때 문제 발생 NVL 의 경우 NVL(target,result) 로 2가지 인자를 받습니다. 만약 target 이 DATE 나 INT 일 경우 동일한 자료형으로 바꿔줄 수 있습니다. 이를 치환할 target 자료형에 맞춰야 합니다. 제가 한 부분은 null일 경우 '-' (하이픈) 처리를 해야 했고, 값은 varchar 이를 group 하여 오름차순 정렬을 해야 했습니다. 해결방법 null은 null 대로 반환이 필요하고 0의 값은 별도로 존재하며..
2022.08.29 -
[Oracle]SelectKey_사용하기 (feat. SEQUENCE)
구조 : Oracle DB framework: Mybatis 목적 : SEQUENCE 로 증가되는 PK 를 가진 테이블의 INSERT 후 증가된 PK 가져오기 이유 : 글 작성 table 과 fileupload table 은 별도로 구성되어 있고, 파일 업로드시 게시글 table 의 pk 를 JOIN 하기 위함 조건: JOIN 할 태이블은 SEQUENCE 설정이 되어 있어야 함 시퀀스는 다음글 참고 : https://yn971106.tistory.com/107 [Oracle]_SEQUENCE (feat. 테이블 pk) 구조 : Oracle DB framework: Mybatis 목적 : PK 이면서 값이 하나씩 또는 원하는 숫자만큼 증가해야하는 컬럼을 가진 테이블생성 ex) 테이블 고유 번호 기존 : 테..
2022.05.24 -
[Oracle]_SEQUENCE (feat. 테이블 pk)
구조 : Oracle DB framework: Mybatis 목적 : PK 이면서 값이 하나씩 또는 원하는 숫자만큼 증가해야하는 컬럼을 가진 테이블생성 ex) 테이블 고유 번호 기존 : 테이블을 추가 할 때마다 MAX 값에 +1 을 더하는 방식 차용 문제 발생 : 동시에 사용자가 접근 했을 때 같은 테이블 고유 번호가 입력 됨. 문제 해결 : 테이블 구조를 만들 때, 컴럼 추가시 자동으로 증가하는 pk 로 구성 시퀀스 등록 CREATE SEQUENCE BNO START WITH 1 INCREMENT BY 1 NOMAXVALUE NOMINVALUE; BNO 라는 값은 SEQUENCE 로 등록 합니다. 시작은 1 증가 폭도 1로 설정하고 최대, 최소값은 리미트를 지정하지 않았습니다. 태이블 생성 CREATE..
2022.05.24