본문 바로가기

Dev. Database

(58)
집계 쿼리 행열 변환 (가로 출력) 1. 행열변환 SELECT SUM(CASE WHEN MM=1 THEN CNT ELSE 0 END) M1 , SUM(CASE WHEN MM=2 THEN CNT ELSE 0 END) M2 , SUM(CASE WHEN MM=3 THEN CNT ELSE 0 END) M3 , SUM(CASE WHEN MM=4 THEN CNT ELSE 0 END) M4 , SUM(CASE WHEN MM=5 THEN CNT ELSE 0 END) M5 , SUM(CASE WHEN MM=6 THEN CNT ELSE 0 END) M6 , SUM(CASE WHEN MM=7 THEN CNT ELSE 0 END) M7 , SUM(CASE WHEN MM=8 THEN CNT ELSE 0 END) M8 , SUM(CASE WHEN MM=9 THEN..
[분석함수] RANK(), DENSE_RANK() 분석 함수를 이용하면, 특정 조건에 맞는 상위 혹은 하위 N개의 데이터만 추출하는 TOP n 쿼리도 쉽게 작성 가능하다. 각 부서별로 급여가 상위3위까지인 사원을 추출하는 쿼리는 아래와 같이 작성할 수 있다. SELECT * FROM (SELECT DEPARTMENT_ID , EMP_NAME , SALARY , DENSE_RANK() OVER (PARTITION BY DEPARTMENT_ID ORDER BY SALARY DESC) DEP_RANK FROM EMPLOYEES ) WHERE DEP_RANK
WITH 절 - 서브쿼리 중복 사용 방지 WITH b2 AS ( SELECT PERIOD, REGION, sum(LOAN_JAN_AMT) AS jan_amt FROM KOR_LOAN_STATUS GROUP BY PERIOD, REGION ), c AS (SELECT b.period, max(b.jan_amt) max_jan_amt FROM ( SELECT PERIOD, REGION, sum(LOAN_JAN_AMT) AS jan_amt FROM KOR_LOAN_STATUS GROUP BY PERIOD, REGION ) b, ( SELECT max(PERIOD) max_month FROM KOR_LOAN_STATUS GROUP BY SUBSTR(PERIOD, 1, 4) ) a WHERE b.period = a.max_month GROUP BY b...
복잡한 쿼리 효율적으로 작성하기 1. 최종적으로 조회되는 결과 항목을 정의한다. 2. 필요한 테이블과 컬럼을 파악한다. 3. 작은 단위로 분할해서 쿼리를 작성한다. 4. 분할한 단위의 쿼리를 하나로 합쳐 최종 결과를 산출한다. 5. 결과를 검증한다. 1) 출력항목 연도 최대매출사원명 최대매출액 2) 필요한 테이블 - 이탈리아 찾기 : countries - 이탈리아 고객 찾기 : consumers - 매출 : sales - 사원정보 : employees 3) 단위 분할 a) 연도, 사원별 이탈리아 매출액 구하기 SELECT SUBSTR(a.SALES_MONTH, 1, 4) AS years, a.EMPLOYEE_ID, sum(a.AMOUNT_SOLD) AS AMOUNT_SOLD FROM SALES a, CUSTOMERS b, COUNTRI..
DB연동 실패 NullPointerException 오류 30여분을 해매고 나서 원인을 찾았다 문제의 NullPointerException 오류 문제의 근원지를 출력문으로 찾은 결과 코드 문제는 없었다 그런데 오라클 DB와 연동하고 연결을 해제시켜주는 52번 Connection 객체인 connect 인스턴스가 .close()를 실패하고 있음을 확인했다 출력문으로 어디까지 정상적으로 작동되는 것 인지 확인해보니 위 사진처럼 connect 인스턴스에서 문제가 되는 것을 확인했다 참조된 드라이브클래스 값을 connect 인스턴스로 받아오려고 했으나 문제가 있다는 것을 알게 되었다 예문을 연습한다고 이클립스의 JAVA PROJECT를 새로 만들어 코드를 작성한 것이 원인이었다 문제는 새로 만든 JAVA PROJECT에 oracle jar파일을 로드하지 않은 것이..
Mybatis에서 alias의 중요성 마이바티스에서 알리아스는 반드시 DB 컬럼명과 일치시켜줘야 한다. 불일치할 경우 이와 같이, 자바단에서 값은 잘 넘어 오는데 정작 디비 조회시에 값이 VO에 담기지 않는 현상이 발생한다. 이 오류 덕에 또 한 시간은 휙 흘러간거 같다.지금 시간 새벽 2시30분... 하 내일 출근이 걱정이구만 ㅡㅡㅋ
system 계정 비밀번호 분실과 계정 lock 해결법 오라클 system 비밀번호를 분실했을 때, 정말 식은땀 날 뻔 했다.일단 오라클이 설치된 서버의 admin 계정으로 들어가서, cmd 를 띄워두고 아래와 같이 입력한다 C:\>sqlplus "/as sysdba"SQL> show userUSER is "SYS" 이런식으로 보일 것이다.그럼 여기에서 계정 암호를 변경해주자. SQL> alter user system identified by 암호; 한가지 더, system 계정이 lock 걸렸을 때의 대처방법cmd에서 마찬가지로 아래의 명령어를 입력하자. SQL> alter user system(유저명이 될수도 있다) account unlock; 그럼 끝 출처: http://kimfish.co.kr/209 [김생선의 어장나라]C:\>sqlplus "/as ..
인덱스와 성능에 관한 고찰 [출처] 오라클 SQL과 PL/SQL을 다루는 기술 시스템 하나를 구출할 때 운영 측면에서 보면 시스템 개발과 운영, 두 단계로 나눌 수 있고 SI와 SM을 담담하는 개발자는 상이한 것이 보통이다. SI 단계에서 개발자나 프로젝트 관리자들은 주로 데이터 정합성과 정확성을 위주로 코드를 검증하는데, 사실 이단계에서 테이블에 있는 데이터는 테스트 데이터이다. 즉, 데이터 건 수가 그리 많지 않다. 하지만 SM 단계에 접어들면 데이터는 점점 쌓이고 본격적으로 성능 이슈가 발생한다. 이 때, SM 담당자들은 개발된 코드를 보면서 불평을 늘어 놓고 SI 개발자들은 공공의 적이 되는 경우가 적지 않은 것이 현실이다. 성능 문제가 발생하면 누구나 제일 처음 생각해내는 해결책이 인덱스 추가 생성이다. SI 단계에서 향..