본문 바로가기

DB/Oracle

ojdbc와 jdk 버전 이번에 보안 이슈로 인해 마이그레이션 이슈가 생겨 spring을 3.x에서 4.x로 전환 테스트하다보니 문제가 발생했다. DB쪽에서 계속 오류가 발생하는데 처음에는 관련 라이브러리도 버전을 변경하다보니 발생하는 문제라 생각했는데, mybatis 버전을 아무리 바꿔도 안되고, 연동방식을 아무리 바꾸어도 안되는 것이다... 안되겠다 싶어 jdbctemplate으로 바꾸었는데도 안된다... 모두 동일한 오류가 발생했다.20:05:13.240 [http-nio-80-exec-2] DEBUG org.mybatis.spring.SqlSessionUtils - SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@d8269a0] was not regist.. 더보기
like in 해보자. regexp_like mybatis를 하다가 검색을 만들어야 할 일이 생겨서 like를 쓰는데, 갑자기 여러개를 검색할 수 있게 해달라는 요구가 들어왔다. 거의 다 만들었는데... 그래서 수정을 적게 하기 위해 like를 여러개 쓰다보니 한 번에 검색할 수 있을거 같아서 검색해 보니 나와 동일한 사람이 있었다. 자세히 설명은 달아 주지 않았지만 검색으로 보니 오라클에서 정규식으로 검색하는 방법이 있었다. 사용할 일이 없어서 몰랐... regexp_like는 정규식으로 검색하는 함수인데, like in 과 같은 검색도 가능하다.select *from tablewhere regexp_like(column, '검색어1|검색어2') 검색어를 계속 추가하면 되겠으나 자료가 많은 테이블을 조회해보지 못해서 조금 아쉽다. row가 180.. 더보기
모르는 테이블 조회 필요한 정보가 있는지 찾기 위해 다른 서버의 DB를 들어가서 검색해보니 나오는 정보가 없다.그래서 조회하는 방법을 적어본다. oracle SQL Developer나 토드같은 툴을 이용할 수 있는 상황이라면 이런 번거로움은 필요없겠지만, 툴을 이용한 접근을 막아버린 곳이 많아서 SQL Plus로 작업 중에 생각한 방법이다. 먼저 table 목록은 다음 쿼리로 알 수 있다.select table_name from all_tables; 그런데 이런저런 테이블이 많다. 특히 $가 들어간 테이블이 많이 있다. $가 들어간 테이블명은 보통 시스템과 관련된 테이블이어서 정리가 필요하다. 그래서 시스템 테이블같은 테이블을 제외해보자.select distinct tablespace_name from all_tables;.. 더보기
DB에서 컬럼 순서 랜덤하게 가져오기 일을 하다가 컬럼 순서를 랜덤하게 가져와야할 필요가 있어서 찾아보았다. DBMS_RANDOM을 이용하여 난수를 발생하여 가져올 수 있다. 방법은 몇가지 있다.SELECT DBMS_RANDOM.VALUE(1, 1000) AS RND FROM DUAL; 위 쿼리는 1~1000 사이의 값을 가져오는데, 소숫점의 숫자도 포함되어 있다. 정수만 가져오려면 소숫점을 없애주면 된다.SELECT CEIL(DBMS_RANDOM.VALUE(1, 1000)) AS RND FROM DUALCONNECT BY LEVEL 더보기
오라클 포트 설정하기 간만에 테스트를 위해 오라클을 설치해서 외부 컴퓨터에서 접근을 해보았다.한가지 문제가 관리상의 문제로 기본 포트인 1521 포트를 사용할 수 없었다.게다가 인터넷에서 검색하니 부족한 정보가 넘쳐나서 삽질을 해게됬다... 제발 님들아... 오라클 11g를 설치했기 때문에 다를 수도 있겠다. 하지만 난 안됬으니 패스... 하는 수 없이 처음부터 차근차근 해보기 위해 설정프로그램을 보던중에 net manager라는 관리 툴에서 설정을 할 수 있는 것을 알게됬다. 적용되는 시간이 약간 늦어서 처음에는 안되는 줄 알았는데 잘 된다. 오라클을 설치하면 오라클 메뉴에서 [구성 및 관리 툴 > Net Manager] 실행하면 별다른 어려움 없이 설정이 가능하다. 설정파일을 직접 수정하는 방법도 인터넷에 많이 소개되고 .. 더보기
한글 - 알파벳 - 숫자 순으로 정렬 기본적으로 Order By를 이용하여 정렬하면 특수문자와 숫자 영문자가 섞이고 마지막으로 한글이 나온다.하지만 요구사항에 따라 한글 - 알파벳 - 숫자 처럼 출력 순서를 바꿔야하는 경우가 있다.간단하게 Order By Desc를 사용하면 좋으나 전부 역순으로 정렬되므로 요구사항에 맞지 않다. 처음 떠오른 것은 UNION ALL을 이용해서 3번 SELECT 하는 것이 었으나, 마음에 들지 않는다. 두번째로 생각난 것은 CASE WHEN을 이용해 컬럼을 만들어 정렬하는 것이다. SELECT한 DATA로 결과를 만들고 정렬을 하기 때문에 속도면에서도 나쁘지 않다고 생각된다. 그래서 이것을 기준으로 필요한 것을 찾아보니 이미 해본 사람들이 있었다. ASCII() 오라클 함수를 이용한 구분인데 문자열이 들어가도 .. 더보기
D-DAY 계산 쿼리로 D_DAY계산을 해보았다.SELECT CASE WHEN D_DAY < 0 THEN 0 ELSE D_DAY END AS D_DAYFROM( SELECT TRUNC(TO_DATE('20130201', 'yyyymmdd') - SYSDATE, 0) AS D_DAY FROM DUAL) 만들기는 했으나, 쿼리로 해야하나? 하는 생각이 든다. 더보기
연속되는 숫자 만들기 쿼리를 만들다가 일정 기간동안 데이터를 가져올 일이 생겼다.그러다가 우현이 LEVEL에 대해 알게 됬다. 참 쓰임새가 다양한 것이 되겠다.LEVEL로 먼저 필요한 기간을 구한다. 본인은 오늘로 부터 50일 전까지 날짜를 구한다. 오늘 날짜 제외SELECT TO_NUMBER(TO_CHAR(SYSDATE - LEVEL,'YYYYMMDD')) USE_DAYFROM DUALSTART WITH LEVEL = 1CONNECT BY LEVEL 더보기
오라클 ORA-01476 에러 ORA-01476: >제수가 0 입니다 라는 메시지가 나면서 쿼리가 안돌아가는 경우가 있다. 이것은 0으로 나눗셈할 경우에 나오는 문제인데 인터넷에 보면 여러가지 해결책이 나와있다. SELECT N/M FROM ( SELECT '10' AS N, '0' AS M FROM DUAL ); 이건 문제의 나눗셈이다. SELECT N / DECODE(M, NULL, 1, 0, 1, M) FROM ( SELECT '10' AS N, '0' AS M FROM DUAL ); 인터넷에 있는 DECODE를 이용한 해결법을 보자. 더보기
한글 초성 검색 초성검색을 찾아보았다. select * from event where substr(title,1,1) >= '가' and substr(title,1,1) = '하' 찾아보면서 전에 몰랐던 사실을 한가지 알았다. 오라클의 substr 은 시작이 1이었다. 0인줄 알았고 0으로 사용하는 사람들도 많을 것이다. 0과 1의 결과가 같게 나오길래 궁금해서 오라클클럽 사이트에서 확인한 결과 0은 1과 같은 취급을 한다. 저렇게 검색하면 ㄱ이 모음인 문자가 검색된다. UTF-8과 EUC-KR은 검색방법이 다르다는데 찾기가 어렵다. 검색방법의 요점은 연결된 코드를 찾아서 확인하는 것이기 때문에 둘다 비슷한 방법으로 검색하면 된다. SELECT * FROM ( SE.. 더보기