일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- patch
- solaris network
- sqlplus
- rac
- PERL
- SQL
- php5
- Linux
- memory
- dba
- RHEL4
- solaris
- perl one-liner
- 연산자
- fdisk
- oracle install
- MySQL
- Oracle RAC
- prompt
- mariaDB
- grid
- Unix
- 오라클
- command & perl
- perl + 정규표현식
- perl string
- Network
- bash
- oracle
- cygwin
- Today
- Total
목록Data Architecture/SQL Query (21)
DATA 전문가로 가는 길
보통 타 시스템과 연계해서 데이터를 받으면 파이프 라인(|), 콤마(,) 등등 특수 문자를 활용해서 받게 되는 경우가 많을 것입니다. 그럴 때 각 항목을 파싱 하고, 적절한 패턴으로 조회하는 방법을 해보겠습니다. 구분자는 파이프 라인(|)을 기준으로 설명 할 예정이며, 아래 쿼리에서 적절하게 변경하면 다른 특수 문자도 충분히 가능합니다. 1. 데이터 정보 IN_DATA - TYPE : VARCHAR2 - VALUE : '|A||C| DEF | G|||' 2. 파이프 라인으로 구분된 문자열 행(Column) 처리 /* - REPLACE 함수를 이용해서 '|' 부분자가 겹쳐 있는 항목을 띄워 놓기 위해서 '| ' 명시적으로 한 칸 띄웠습니다. - REGEXP_SUBSTR 정규 표현식 함수를 활용하면 행(Co..
결재와 결재자(승인자) 정보가 담겨져 있는 데이터 이며, 최종 결재자(승인자)를 뽑으려고 하는 규칙은 NULL 값이 아니고, APV_APPNUM 숫자가 높은 데이터를 뽑으면 됩니다.즉, 최종 결재자는 결재 승인에 대한 코멘트를 반드시 남긴다는 규칙을 만들고, 조회 쿼리를 작성해야 합니다. 그리고 최종 결과에 APV_APPROVER 컬럼의 결재자 리스트는 결재 별로 APV_APPNUM 컬럼을 기준으로 오름차순으로 표현 합니다. (예 : estenpark, evanlee, kidonghong) 1. 테이블 생성 CREATE TABLE EST_APV ( APV_ID VARCHAR2(60 BYTE), APV_CNT NUMBER(2), APV_APPNUM NUMBER(2), APV_APPROVER VARCHAR2..
선분 이력 테이블을 작업하다 보면 겹치는 부분에 대해서 병합하고, 겹치지 않는 구간에 대해서는 그대로 남겨두는 방식을 많이 하게 됩니다. 사실 선분 이력 테이블을 제대로 관리하려면 종료 시점과 시작 시점이 끊어지지 않게 상호 관리하는 것이 바람직하지만, 보편적으로 관리의 어려움이 있다 보니 여러 데이터를 쌓아 놓고 비지니스 로직(SQL)로 해결 하는 경우가 많을 것입니다. 1. 선분이력 데이터 보기 아래는 사용자 별로 이벤트 시작 일시와 이벤트 종료 일시에 대해서 표로 작성했습니다. 파란색 부분은 병합이 되지 않는 구간이고, 노란색 부분은 병합이 되는 부분입니다. 병합 그룹 번호를 부여한 이유는 이벤트 시작 일시과 이벤트 종료 일시를 연결하고자 하는 것입니다. 즉, 2013/08/12 오후 4:45:00..
문자열을 그룹별로 합쳐야 할 때 LISTAGG, XMLAGG를 주로 많이 사용 하거나 SYS_CONNECT_BY_PATH를 활용하기도 합니다. 하지만 4000 Byte 초과할 경우 "[Error] Execution (8: 1): ORA-01489: 문자열 연결의 결과가 너무 깁니다" 에러 메시지를 종종 보게 됩니다. 따라서 이번에는 4000 Byte 초과하는 문자열을 합쳐볼 수 있는지 확인 해보겠습니다. 오라클에서 제공하는 함수, 프로시저, 패키지로는 불가능하고, Object Type과 Table을 활용해서 CLOB 형태의 데이터를 합쳐보겠습니다. 1. 테스트 데이터 가공 DROP TABLE EST_DATA; CREATE TABLE EST_DATA (ROW_GRP_NO NUMBER(9),ROW_NO NU..
문자열에서 시작과 종료를 의미하는 값을 기준으로 파싱하는 방법입니다. MariaDB와 Mysql에서 사용하는 방법을 기준으로 되어있고, 해당 내용은 샘플 예제입니다. 자세한 내용은 아래 쿼리를 참고 하시면 됩니다. SET @STRING='FORMATING #[ESTENPARK_20160314 11:30 ]# 데이터를 비교해서 파싱된 결과만 나오게 합니다. '; SELECT SUBSTR(ORG_DATA, FIRST_STR_NO + 1, LAST_STR_NO - FIRST_STR_NO) AS PARSING_DATA ,A.* FROM (SELECT POSITION('#[' IN @STRING) AS FIRST_STR_NO, POSITION(']#' IN @STRING) AS LAST_STR_NO, @STRIN..
금융 데이터를 가공할 때 결산년월을 선택하여 해당 년도의 계정 과목을 보여주고, 값이 얼마인지 출력하기도 합니다. 이번에는 기본적인 메타 관리를 원칙으로 데이터 항목, 데이터 값을 동적으로 처리하는 쿼리입니다. 가변적 컬럼을 pivot 함수 for in절에 넣을 수 있으면 좋지만, PL/SQL을 활용하지 않는 한 어려움이 있어서 원하는 결과를 위에서 받고, 아래서는 최종 결과를 리턴하는 방식으로 쿼리를 작성 하였습니다. [테이블 메타 관리 ERD] [테이블 생성] /* EstenPark_테이블컬럼 */ CREATE TABLE ESP_TB_COLUNM ( TB_UNIQ_NO NUMBER(9) NOT NULL, /* 테이블고유번호 */ COLUMN_ID VARCHAR2(32) NOT NULL, /* 컬럼ID..
데이터베이스 이관(마이그레이션)할 때 정상적으로 이관 되었는지 확인 할 때 사용하는 쿼리를 작성했습니다.운영하는 DB에 따라서 다를 수 있지만, 기본적으로 아래와 같습니다. 운영서버 MINUS 신규운영서버 UNION ALL 신규운영서버 MINUS 운영서버 대부분 운영서버에서 신규운영서버로 이관하게 되지만, 경우에 따라서 양쪽 다 비교해야 하는 경우가 생깁니다. 쿼리를 수행해서 타 시스템의 데이터를 한 번에 비교해 볼 수 있습니다. 대용량 데이터의 경우는 특정 일자 패턴을 잡아서 전일자부터 현재까지만 비교할 수 있도록 개선하였습니다. SELECT A.TABLE_NAME ,'SELECT ''NEW_DATA''' || ' AS DATA_TP, A.* FROM (' || A.NEW_DB_SQL || ' MINU..
오라클 데이터베이스에 특정 사용자에 접속해서 테이블 정보를 조회해야 하는 경우가 생기는데 USER_TAB_COLUMNS, USER_TAB_COMMENTS, USER_CONSTRAINTS 딕셔너리를 이용하여 테이블 레이아웃 형태와 같이 뽑을 수 있습니다. SELECT X.TABLE_NAME ,X.TABLE_COMMENTS ,X.COLUMN_NAME ,X.COLUMN_COMMENTS ,X.PK_FLAG ,X.FK_FLAG ,X.NULL_FLAG ,X.DATA_TYPE || X.DATA_LENGTH as COLUMN_DATA_TYPE FROM (SELECT A1.TABLE_NAME TABLE_NAME ,A1.TABLE_COMMENTS TABLE_COMMENTS ,A1.COLUMN_NAME COLUMN_NAME..