DB
-
FOR LOOPDB 2017. 3. 13. 10:16
정말 오랜만의 포스팅이다.. 이번엔 알아두면 좋고 생각보다 많이 쓰이는 쿼리문이다. 보통 한번에 데이터를 넣거나 변경이 필요한 경우 쓴다. 실제 업무를 하다보면 데이터 마이그레이션이나 특정 데이터의 값을 일괄적으로 바꿔야 하는 경우가 생기는데, 이때 종종 사용한다. DECLARE v_num NUMBER; -- 변수 선언 BEGIN v_num := 0; FOR c1 IN (SELECT 컬럼명1 ,컬럼명2 FROM 테이블명 WHERE 조건1 = xx ORDER BY 정렬컬럼 ASC) LOOP -- 루프 시작 v_num := v_num +1; -- 변수 +1 DBMS_OUTPUT.PUT_LINE(v_num); -- 변수값 확인 INSERT INTO 테이블( 컬럼1 ,컬럼2 ,컬럼3 ,컬럼4 ) VALUES (..
-
[쿼리] INSERT ~ SELECTDB 2015. 11. 9. 09:51
MERGE INTO기능 이 안먹히는 데이터베이스를 만나서 차선책으로 찾은 쿼리다.. 보통은 어떤 테이블에 있는 데이터를 다른 테이블로 저장 시킬 때 쓰는 쿼리이다. 기본적인 쿼리를 보면.. INSERT INTO 테이블명( col1,col2,col3) SELECT val1, val2, val3 FROM 테이블명 WHERE 조건식 각 컬럼의 타입이 같을 경우 이런식으로 테이블 복사를 할 때 사용한다. 나는 복사를 하려는것이 아니고 해당 테이블에 내가 넣으려는 값이 있는지 체크하고 넣는것이 목적이기 때문에 아래와 같은 쿼리를 사용했다. INSERT INTO 테이블명(col1, col2, col3) SELECT val1, val2, val3 FROM DUAL WHERE NOT EXISTS (SELECT 데이터가..
-
[쿼리] MERGE INTO 사용법DB 2015. 11. 6. 16:49
이번에 1,000여건 이상의 데이터를 1시간단위로 저장해야 하는 배치잡 파일을 만드는 작업을 해야했다. 테이블은 단순하고 로직도 어렵지는 않았다. 다만 데이터가 가끔 중복이 있을수도 있기 때문에 그걸 감안한 쿼리를 써야 했다. 단순하게 SELECT 날리고 insert나 update를 할까 생각했지만.. 생산성이 너무 떨어진다..라는 생각이 들었다.. (요즘은 쪼금 감안하게 됐다..하하) 그래서 구글링으로 찾아보니 MERGE INTO 라는게 있더라.. (참 기초가 부족하단 생각이 든다..) MERGE INTO는 특정 테이블에 조건에 부합하는 데이터가 이미 존재하면 update, 존재하지 않으면 insert를 시켜주는 쿼리다. 사용법은 간단하다.. MERGE INTO 테이블명 USING DUAL ON (조건..
-
알티베이스..DB 2015. 11. 6. 16:31
XML을 파싱해서 DB에 저장하는 업무를 하게 되었는데, 저장할 DB가 알티베이스였다. 처음 들어보는 생소한 DB지만 뭐 별 다른 문제는 없겠지.. 라고 생각하고 작업을 시작.. 일단 테스트 DB(오라클)로 테스트 하면서 로직 구현을 다 해놓고 알티베이스 설치파일을 받아서 설치.. 여기서부터 뭔가 불안하다.. 4.3.9 버전이란다.. 구버전이라 듣긴 했건만 4버전이라.. 일단 JDBC 연결하고 테스트 시작.. 당연하게도 에러가 난다.. 에러의 이유인 즉, 이놈이 MERGE INTO 기능을 쓰지 못한단다.. 멘붕.. 그래서 INSERT SELECT NOT EXISTS 를 사용해서 날려본다.. 데이터를 일단 900건씩 끊어서 넣어야 하기 때문에 JDBC PreparedStatement의 addBatch()기..