일반적으로 여러개의 데이터를 select 해와서 한번에 insert 하는 쿼리는 하단과 같다. INSERT INTO RESULT_TB ( SEQ, NAME, AGE, GENDER ) SELECT RESULT_SEQ.NEXTVAL, NAME, AGE, GENDER FROM STUDENT_TB WHERE AGE >= 20; 그런데, RESULT_TB2 라는 테이블이 새로 생기고, 이제는 20살 이상의 학생들을 RESULT_TB, RESULT_TB2 모두 한번에 넣어줘야 하는 상황이 생겼다. 근데, RESULT_TB 의 시퀀스를 가지고 그대로 RESULT_TB2 테이블의 RESULT_SEQ 라는 컬럼에 바로 넣어줘야 하는 상황이다. 나..
보통 데이터들을 정렬할때는 특정 컬럼(특히 인덱스)의 오름차순, 내림차순 이거나 가나다 순 등으로 정렬하는 방법을 많이 쓴다. 하지만 그런 특정한 규칙없이 내 마음대로 정렬하고 싶을 때 쓰는 함수가 있다. 바로 DECODE 이다. 사용예) SELECT NAME FROM TABLEORDER BY decode(NAME, 'A', '1', 'D', '2', 'B', '3') , IDX desc 이런식으로 써주면해당 테이블에서 NAME이 A인 것이 1등, D가 2등, B가 3등으로 출력되고나머지 데이터들은 IDX가 내림차순으로 정렬되어 나오게 된다.
mybatis + 오라클에서 nclob형 데이터는 바로 뿌려지지 않는다. 그래서 이전에 한번 포스팅을 했었다.(http://hiworldbye.tistory.com/26) 근데 위의 방법 말고 더 간단하게 할 수 있는 방법이 있다. 예시로 nclob형 데이터 컬럼명을 CONTENTS 라고 한다면 SELECT to_char(CONTENTS) AS CONTENTS FROM 테이블명 라고 해주면 됨. nclob형 데이터를 char 형으로 바꿔 가져오게끔 만들어 줌 처음에 내가 소개한 방법보다 덜 복잡하며 직관적이다.
하~~ 진짜 이 문제로 골치 너무 아팠다. 특정 기간을 검색 조건으로 주면, 해당 기간에 맞는 데이터가 select 되게 해야하는 거였는데, 간단한 쿼리였는데도 자꾸만 400에러 (bad request)가 나더라.. 더 미치겠는건 로컬에서는 잘 돌아가서 원하는 데이터만 select 되어 조회되는데, 운.영.서.버 에서는 자꾸만 400에러를 뱉었음 ㅠㅠㅠ... (로컬에서 되고, 운영에서 안될때 제일 난감하다.. 회사 서버였기때문에 파일 반영 후 서버 on/off를 내 맘대로 할 수 없으므로 로그 찍기가 힘듦 ㅠㅠ) 처음에는 문제 원인이 뭔지 아예 몰라서 무작정 400에러만 찾아봤다.400에러 원인은 여러가지있었지만1) 제일 많았던 건 '파라미터'를 잘못 넘겨줬을 때.-> 이건 나의 원인은 아니었다. 로컬에..
clob형 데이터들은 varchar2 형 데이터 처럼 단순히 select 하여 값을 갖고오면 바로 우리가 볼 수 있는 string형으로 보이지 않는다. 처리를 해주어야 하는데 mybatis에 있는 쿼리문들에서 처리해 줄 수 있다. 셀렉트 문 쿼리 내용~ 이런식으로 처리해 주면 clob 형 데이터 (nclob 등) 를 스트링형으로 처리하여 자바에서 별도의 처리 없이 뷰단에서 뿌려주기만 하면 string형으로 잘 보인다. 주의점은 resultMap 태그는 select 태그에서는 사용가능한데, sql태그에서는 해당 resultMap을 불러오지 못하기 때문에 select 태그 위에서 선언하여 select 태그에서 해당 resultMap의 이름을 가져와 써줘야 한다.
테이블의 pk값으로 인덱스를 설정할 때, 1씩 자동증가되는 시퀀스를 써야한다. 시퀀스 생성하는 코드는CREATE SEQUENCE 시퀀스명START WITH 1INCREMENT BY 1NOMAXVALUENOCACHE;COMMIT; 하고, 시퀀스를 실제로 하나씩 증가하도록 특정 컬럼에 넣고싶다면.자바파일에서 쿼리를 INSERT하는 지점에서인덱스 컬럼명이 IDX 라면 INSERT INTO 테이블명 (IDX) VALUES (시퀀스명.NEXTVAL) 로 해주면 된다.