DB
15편
- Oracle 프로시저·함수·뷰 소스를 테이블에 백업하기 (DBMS_METADATA)DBMS_METADATA.GET_DDL 로 내 스키마의 프로시저·함수·뷰·패키지 DDL 을 백업 테이블에 쌓아 두는 프로시저와, 실수하기 쉬운 커밋·예외 처리·패키지 타입 이름을 정리했다.
- Oracle 백업 테이블을 한 번에 만드는 DDL 생성 SQL (데이터·PK·코멘트)여러 테이블을 Z_BACKUP_ 테이블로 복사할 때 CTAS 가 빠뜨리는 PK·코멘트까지 DDL 로 만들어 주는 SQL. 작은따옴표가 든 코멘트, 시스템 이름 PK 같은 함정도 함께 정리했다.
- MySQL information_schema 로 MyBatis CRUD SQL 자동 생성하기테이블 이름만 넣으면 MyBatis 용 SELECT·INSERT·UPDATE·DELETE 문을 만들어 주는 MySQL 8 쿼리. GROUP_CONCAT DISTINCT 로 값이 빠지던 버그, 대소문자, 자동 증가·생성 열 처리까지 고친 버전이다.
- MySQL 에서 Oracle 의 테이블 함수 흉내 내기 — JSON_TABLE 과 대안들MySQL 저장 함수는 값 하나만 돌려준다. JSON 을 돌려주는 함수와 JSON_TABLE 로 테이블 함수처럼 쓰는 방법, 그리고 LATERAL·재귀 CTE·임시 테이블 같은 대안을 MySQL 8.4 기준으로 정리했다.
- Oracle SELECT 로 출력물 다단(왼쪽·오른쪽 2단) 만들기한 페이지에 20건을 왼쪽 10건, 오른쪽 10건으로 나눠 찍는 다단 출력물용 SELECT. 행 번호로 페이지·줄·단을 계산하는 공식과 실제 테이블에 쓰는 방법을 정리했다.
- 테이블 정보로 MyBatis CRUD SQL 자동 생성하기 (Oracle 딕셔너리 활용)USER_TAB_COLUMNS·PK·코멘트를 읽어 MyBatis 매퍼에 붙여 넣을 SELECT·INSERT·UPDATE·DELETE 문을 만들어 주는 Oracle SQL. 감사 컬럼 처리와 jdbcType 까지 넣었다.
- 삭제 전에 다른 테이블에서 쓰는 코드인지 확인하는 Oracle 함수FK 가 걸려 있지 않은 테이블 사이에서, 지우려는 코드 값을 다른 테이블이 쓰고 있는지 딕셔너리로 찾아 확인하는 PL/SQL 함수. 바인드 변수로 SQL 인젝션을 막고, FK 와의 차이도 정리했다.
- Oracle 함수로 글자 사이에 공백을 넣어 균등 분할(균등 정렬)하기출력물 도구가 균등 분할을 지원하지 않을 때, 글자 사이에 공백을 고르게 넣어 정해진 폭에 맞추는 PL/SQL 함수. 공백 개수 계산 오류와 한글 폭 문제를 바로잡았다.
- SQL Server 에서 함수 기반 인덱스 만들기 — 계산 열 + 인덱스SQL Server 에는 Oracle 의 함수 기반 인덱스가 없다. 계산 열(Computed Column)에 인덱스를 거는 방법과, 사용자 함수를 쓸 때 막히는 조건(소유자·SCHEMABINDING·키 길이)을 정리했다.
- Oracle 가상 열(Virtual Column)로 조합 컬럼 만들기두 컬럼을 이어 붙인 "이름(대표자)" 같은 값을 매번 SQL 로 만들지 않고 가상 열로 정의하는 방법. NULL 처리, INSERT·UPDATE 제약, 인덱스까지.
- Oracle BETWEEN 으로 기간끼리 겹치는 데이터를 찾을 때 빠지는 함정데이터도 FROM~TO, 조회 조건도 FROM~TO 일 때 BETWEEN 두 번으로는 빠지는 행이 생긴다. 겹침 조건 두 줄로 끝내는 방법과 DATE·TIMESTAMP 에서 BETWEEN 을 쓸 때 주의할 점.
- Oracle 의 MAX() KEEP (DENSE_RANK LAST) 를 SQL Server 에서 쓰는 법그룹별 최댓값을 가진 행의 다른 열을 가져오는 Oracle KEEP 절을 SQL Server 2022 에서 ROW_NUMBER, FIRST_VALUE, CROSS APPLY, 문자열 결합 트릭으로 옮기는 방법과 각각의 함정.
- EXISTS 서브쿼리에서 별칭을 빼먹으면 테이블이 통째로 지워진다상관 서브쿼리 안의 열 이름이 바깥 테이블이 아니라 서브쿼리 테이블로 해석되어 DELETE 가 전체 행을 지운 사고. SQL Server 에서 DELETE 대상에 별칭 쓰는 법, IN·NOT IN 의 같은 함정까지 정리했다.
- Oracle 에서 구분자 문자열을 행으로 나누기 — 테이블 함수와 SQL 만으로 하는 방법쉼표로 이은 문자열(1교시,2교시,3교시)을 행으로 바꾸는 방법. 파이프라인 테이블 함수, CONNECT BY + REGEXP_SUBSTR, JSON_TABLE, SQL 매크로를 비교하고 빈 값이 사라지는 흔한 버그를 바로잡는다.
- Oracle JSON_TABLE 예제 — JSON 배열을 행과 열로 풀기화면에서 넘어온 JSON 배열을 JSON_TABLE 로 표처럼 조회하는 예제. 기본 문법, 18c 부터 되는 짧은 열 정의와 대소문자 함정, 중첩 배열(NESTED PATH)까지.