728x90
반응형

DB 225

[DB][Oracle] RAW 타입

Oracle에서 RAW 타입은 **"가공하지 않은(binary) 데이터"**를 저장하는 자료형입니다.쉽게 말하면 문자가 아니라 순수한 바이트(byte) 값을 저장하는 거예요.📌 RAW 타입 특징문자열이 아님 → 인코딩 안 된 바이트 시퀀스 저장보통 길이는 최대 2000 바이트 (RAW(n) 에서 n ≤ 2000)VARCHAR2 와 달리 문자셋/인코딩 변환 없음출력하면 보통 16진수(hex) 형태로 보입니다📌 사용 예시바이너리 데이터 저장 CREATE TABLE raw_test ( id NUMBER, data RAW(16) -- 16바이트 저장 가능);INSERTINSERT INTO raw_test VALUES (1, HEXTORAW('7F45C210'));SELECT SELECT data..

DB 2025.08.06

[DB][Oracle] DBMS_LOB.SUBSTR

DBMS_LOB.SUBSTR 는 Oracle에서 LOB 타입(CLOB, BLOB) 데이터를 잘라서VARCHAR2 나 RAW 타입으로 변환해주는 함수예요.CLOB 은 그대로는 ORDER BY 나 GROUP BY 에 못 쓰기 때문에, 이 함수로 문자열을 잘라내 변환해야 합니다. 📌 기본 구조 DBMS_LOB.SUBSTR( lob_loc IN CLOB/BLOB, -- 잘라낼 LOB 데이터 amount IN INTEGER, -- 잘라낼 길이 (문자 수 또는 바이트 수) offset IN INTEGER := 1 -- 시작 위치 (1부터 시작)) RETURN VARCHAR2 | RAW;📌 파라미터 설명lob_loc잘라낼 대상 LOB (예: CLOB 컬럼, BLOB 컬럼..

DB 2025.08.05

[DB][Oracle] LISTAGG(DISTINCT ...)

https://imswengineer.tistory.com/1301 [DB][Oracle] LISTAGGLISTAGG는 Oracle DB를 포함한 SQL 데이터베이스에서 여러 행의 값을 하나의 문자열로 집계(Aggregation) 할 때사용하는 함수입니다.주로 그룹화된 데이터를 문자열로 연결할 때 유용합니다.📌 기본 문imswengineer.tistory.com 중복 제거: 기본적으로 중복 제거는 안 됨 → DISTINCT 서브쿼리로 처리해야 함으로 작성하였는데 ✅ 오라클 21c 이상일 경우 LISTAGG(DISTINCT ...)도 가능오라클 21c 이상에서는 다음과 같은 문법이 공식 지원됩니다:LISTAGG(DISTINCT CI.EXHL_CD, ', ') WITHIN GROUP (ORDER BY ..

DB 2025.07.04

[DB][MySQL] ROW_NUMBER()와 WITH (CTE)를 사용할 때 성능 차이

✅ 시나리오 예제: 게시판 페이징데이터 상황게시글 테이블 T_BD에 10만 건의 데이터가 있다고 가정게시글에는 공지사항(상단 고정) 여부, 등록일, 제목, 본문 등의 컬럼이 있음목표: 특정 게시글(BD_CD)이 몇 페이지에 있는지 계산① 인라인 뷰 (서브쿼리) 방식sql복사편집SELECT * FROM ( SELECT BD_CD , BD_TITLE , ROW_NUMBER() OVER (ORDER BY NOTI_YN DESC, INS_DT DESC) AS RN FROM T_BD WHERE USE_YN = TRUE ) R WHERE R.BD_CD = 'BD12345'; 🟢 장점BD_CD 조건이 바깥쪽에서 바로 필터링되므로 불필요한 전체 정렬을 피할..

DB 2025.05.26

[DB][Oracle] 동적으로 정렬이 바뀔 때 행 번호 매기기 (ROWNUM, ROW_NUMBER())

✅ 방법 1: SQL에서 여러 정렬 기준을 동적으로 설정 (CASE WHEN 사용)SELECT ROW_NUMBER() OVER ( ORDER BY CASE WHEN :sort_col = 'emp_id' THEN emp_id END , CASE WHEN :sort_col = 'emp_name' THEN emp_name END , CASE WHEN :sort_col = 'salary' THEN salary END ) AS RN , emp_id , emp_name , salary FROM employees;:sort_col은 바인딩 변수 (예: 'emp_id', 'emp_name', 'salary')정렬 기준을 바꾸면 그에 따라..

DB 2025.05.19

[DB] LISTAGG / STRING_AGG

✅ 1. 기본 개념항목LISTAGG (Oracle)STRING_AGG (PostgreSQL, SQL Server)목적문자열 집계 (여러 행 → 하나의 문자열)동일지원 DBOraclePostgreSQL, SQL Server 등기본 구문LISTAGG(col, ', ') WITHIN GROUP (ORDER BY col)STRING_AGG(col, ', ')정렬WITHIN GROUP (ORDER BY col) 필요ORDER BY col 옵션 제공 (WITHIN GROUP 아님)중복 제거DISTINCT 서브쿼리 필요DISTINCT 바로 사용 가능 (PostgreSQL 13+) ✅ 2. 예제 비교📌 Oracle (LISTAGG)SELECT DEPT_ID , LISTAGG(EMP_NAME, ', ') WIT..

DB 2025.05.16

[DB][Oracle] LISTAGG

LISTAGG는 Oracle DB를 포함한 SQL 데이터베이스에서 여러 행의 값을 하나의 문자열로 집계(Aggregation) 할 때사용하는 함수입니다.주로 그룹화된 데이터를 문자열로 연결할 때 유용합니다.📌 기본 문법LISTAGG(column_name, 'delimiter') WITHIN GROUP (ORDER BY column_name) column_name: 연결할 열 이름'delimiter': 각 값 사이에 넣을 구분자 (예: ',', ' | ', 등)WITHIN GROUP (ORDER BY ...): 연결할 값들의 정렬 순서를 지정📌 예시예제 테이블: STUDENT_COURSESTUDENT_IDCOURSE_NAME1001Math1001Science1001History ▶ LISTAGG 사용S..

DB 2025.05.15
728x90
반응형