본문 바로가기

기록/SQL

(8)
[ORACLE] 조건절 부등호 검색 비교 https://okky.kr/articles/436919 OKKY - 오라클 조건절 부등호사용할때 속도문의 테이블 A가 있습니다A테이블의 날짜가 들어있는 한컬럼에 10년치 데이터를 가져오려고 조회조건이 걸려있는상태입니다.그래서 튜닝을 해보려고 이것저것만져보다가 조건타입을 바꿔봤는데 속 okky.kr 오라클 환경에서 쿼리를 조회할때 조건절에 NOT IN과 부등호를 사용하는 방법 중 고민하게 됐다. NOT IN은 OUTER JOIN을 사용해서 null이 많을 때 효과적이라 부등호를 사용하게 되었다. 처음 작성한 쿼리는 다음과 같다. SELECT T1.COLUMN FROM TBL1 T1, TBL T2 WHERE 1 = 1 -- 추가 조건 AND T1.COLUMN2 > '100' ; COLUMN2는 VARCHA..
[MyBatis] [Error] Cause: java.lang.IndexOutOfBoundsException [문제상황] Mybatis를 사용하여 데이터베이스에서 데이터를 가져오는 과정에서 에러가 발생했다. Cause: java.lang.IndexOutOfBoundsException: Index 4 out of bounds for length 4 문제 상황을 보면 배열을 사용할 때 나타나는 오류와 비슷한데... 동적으로 크기 계산을 하고 있기 때문에 에러를 어디서 체크해야할지 고민했다. [해결 방법] 결과적으로 원인은 모델 객체였다. 내 모델은 @Builder를 사용하고 있는데, Mybatis에서 객체를 매핑할때 resultMap로 리턴하는데 Mybatis에서 미리 인스턴스를 생성한다. 그런데 모델 클래스에 모든 인자가 필요한 생성자밖에 없어서 문제가 생기는 것이다. 그래서 필요한 인자가 없다면 객체 수에 따라..
[Oracle][SQL][Error] ORA-00911: 문자가 부적합합니다 문제상황 java.sql.SQLSyntaxErrorException: ORA-00911: 문자가 부적합합니다 Mybatis로 연동하여 쿼리를 실행하는 과정에서 문제가 발생했다. 문제해결 MyBatis에 작성한 쿼리에 ;(세미콜론)이 포함되어 있었다. 해당 구문에서 세미콜론을 제거하면 해결된다.
[MySQL] ALTER TABLE로 date 타입 defualt 설정하기 오라클에서 DEFAULT로 현재 시간을 설정하기 위해서는 SYSDATE 를 사용한다. MYSQL 에서는 SYSDATE 대신 NOW() 함수를 사용한다. NOW()를 사용했을 때 오류가 발생해서 찾아본 결과, MYSQL의 버전에 따라 사용하는 구문이 다르다. 1. mysql 버전 확인하기 cmd창을 열고 mysql --version을 입력하면 현재 버전을 알 수 있다. 내 버전은 mysql 5.7.35였다. 해결 MYSQL의 버전이 5.6.5 이상일 경우에 사용하는 방법이다. NOW()함수 대신 CURRENT_TIMESTAMP를 사용한다. ALTER TABLE [테이블명] MODIFY COLUMN [컬럼명] DATETIME DEFAULT CURRENT_TIMESTAMP; 만일 MYSQL의 버전이 5.6.5..
[Oracle] [프로그래머스] 오랜 기간 보호한 동물 https://programmers.co.kr/learn/courses/30/lessons/59411 코딩테스트 연습 - 오랜 기간 보호한 동물(2) ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디 programmers.co.kr 1번 유형과 비슷한 문제이다. rownum을 사용하고, 서브쿼리를 통해 결과값을 order by 처리하는 것도 같다. 다른 점이 있다면 order by의 기준이다. "보호 기간이 긴 순서" 이므로 out.datetime - in.datetim..
[Oracle] NVL과 NVL2 SQL을 사용하는 경우 NULL 값을 다른 값으로 바꿔주어야 하는 경우가 있다. 오라클에서는 이 경우 NVL 함수를 사용한다. (MySQL은 IFNULL) 사용법 NVL(컬럼, '치환 값') NVL2 함수도 있다. 이는 NVL과 DECODE를 합쳐놓은 형태이며, NULL일 경우와 아닐때 모두 값을 치환할 수 있다. 사용법 NVL2('컬럼', 'NULL일 경우', 'NULL이 아닐 경우')
[Oracle] 계층적 쿼리 (level) 오라클만이 가진 기능 중 하나로, 데이터를 선택하여 계층 순서로 리턴한다. STARTS WITH를 사용하면 계층을 만들어 사용할 수 있다. 그 외에도 CONNECT BY LEVEL은 연속된 숫자를 조회할 때 사용한다. SELECT LEVEL AS NO FROM DUAL CONNECT BY LEVEL
[Oracle] 지원되지 않는 문자 집합(클래스 경로에 orai18n.jar 추가): KO16MSWIN949 오류 내용 There was an unexpected error (type=Internal Server Error, status=500). Error attempting to get column 'ID' from result set. Cause: java.sql.SQLException: 지원되지 않는 문자 집합(클래스 경로에 orai18n.jar 추가): KO16MSWIN949 ; uncategorized SQLException; SQL state [99999]; error code [17056]; 지원되지 않는 문자 집합(클래스 경로에 orai18n.jar 추가): KO16MSWIN949; 해결 방법 ojdbc8.jar에서 사용하는 인코딩 방식이 jdbc에서 사용하는 방식이 아니기 때문에 충돌이 난다고..

LIST