WORK/DB 44

테이블명 변수로 보내서 select 하기 (동적 SELECT )

개발하다보면 비슷한 쿼리인데도 불구하고 테이블명만 바꿔서 동적으로 조회해야하는 경우가 생긴다. 예를들어 아래와 같이 SELECT USER_NM , USER_ID FROM USER_INFO 이러한 쿼리로 예를 들자면 아래와 같이 하면 된다. SELECT USER_NM , USER_ID FROM ${변수명} #{변수명} 이러한 방식으로 사용하게되면 'USER_INFO' 형태로 인식이 되어 에러가 발생한다. # / $ 기호를 잘 분리해서 사용하자.

WORK/DB 2019.09.02

mssql merge 문장 예제

mssql MS SQL Server 2008부터 지원하는 merge 문장 예제이다. 나처럼 왜 안되지.. 하기전에 아래 문장으로 현재 내 mssql 버전을 조회해 보도록 하자. SELECT @@VERSION 2008 이상이라면 아래와 같이 merge문을 만들면 된다. ================================== SQL MERGE 문장 MERGE USER_INFO UI USING (SELECT MEMBER_ID, USERTYPE FROM USER_INFO WHERE MEMBER_ID = 'TEST1111') A ON (CM.MEMBER_ID = A.MEMBER_ID AND CM.USERTYPE = A.USERTYPE) WHEN MATCHED THEN UPDATE SET USER_NM = ..

WORK/DB 2019.05.13

MSSQL 테이블 생성 및 코멘트 추가하기 , 코멘트 조회하기

MSSQL 테이블 생성 및 코멘트 추가하기 먼저 아래와 같은 테이블을 생성한다고 했을때 코멘트 추가를 해보자. CREATE TABLE USER_INFO ( USER_ID NVARCHAR(10) NOT NULL, USER_NM NVARCHAR(20) NOT NULL, USER_TEL NVARCHAR(20) , CONSTRAINT PK_USER_INFO PRIMARY KEY(USER_ID )) 위와같은 테이블을 생성한다고 했을때 코멘트 추가는 아래와 같이 하면 된다. EXEC SP_ADDEXTENDEDPROPERTY 'MS_DESCRIPTION', [코멘트], 'USER', DBO, 'TABLE', [테이블명]; // 테이블 설명EXEC SP_ADDEXTENDEDPROPERTY 'MS_DESCRIPTION'..

WORK/DB 2019.02.28

mysql insert 후 String형 값 돌려받기

mysql 에서 INT형이라면 보통 SELECT LAST_INSERT_ID() 를 사용하면 된다.아래처럼 말이다. SELECT LAST_INSERT_ID() AS SEQ INSERT INTO 어쩌구 저쩌구 ===================================================== 그런데 INT 가 아닌 STRING TYPE 이라고 했을때 나는 아래처럼 사용 했다. 예를들어 부서코드가 순차적 증가라고 했을 때 DEPT_1 , DEPT_2 , DEPT_3 ....이런식으로 아래 예제를 보자 SELECT MAX(DEPT_CD) FROM DEPT_INFO INSERT INTO (DEPT_CD)VALUES(// 여기서 숫자 구하기 (대충한거라 TEST 해보진 않음)CONCAT('DEPT_',..

WORK/DB 2019.02.21

오라클 데이터 되돌리기

헐 !!!!!!!!!!!!!!!!!!! 하고 나도 모르게 아차 싶을 순간이 있을텐데 바로 데이터를 DELETE 혹은 UPDATE 했을때 이다.이럴 때 오라클 이라면 이전 데이터를 되돌릴 수가 있다. 예를 들어 UPDATE USER_INFO SETUSER_NM = '홍길동'WHERE 1 = 1 깜빡하고 WHERE 절에 조건을 안주고 UPDATE 문을 실행 했을 경우...몇건이 들어가 있건 USER_NM 컬럼은 '홍길동' 이라는 값이 들어가게 된다. 이럴 때 당황하지말고 되돌려 보자. SELECT * FROM USER_INFO AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '1' MINUTE) 위와같이 입력하면 1분 전으로 되돌릴 수가 있다. 위 옵션은 SECOND, MINUTE, HO..

WORK/DB 2019.01.07

오라클 CLOB 컬럼 update 하기

TB_NOTICE 라는 테이블에 BIC_CONTENT 라는 컬럼이 CLOB 일 경우 이 BIC_CONTENT 컬럼 UPDATE 하는 방법을 알아보자. 방법은 간단하다. UPDATE TB_NOTICE SETBIC_CONTENT = TO_CLOB('가나다라마바사 아자차카타파하')WHERE 1 = 1 이렇게 하면 되는데 간혹 내용이 4000자가 넘어가면 SQL디벨로퍼가 인식을 못하는것 같다.그래서 해결책은 UPDATE TB_NOTICE SETBIC_CONTENT = TO_CLOB('가나다라마바사 아자차카타파하') || TO_CLOB('아오 이놈에 CLOB 짜증나네') WHERE 1 = 1 이런식으로 이어붙여서 UPDATE 하면 된다.

WORK/DB 2018.12.28

오라클 SELECT 결과값으로 UPDATE 하기

모든 DB의 UPDATE 문은 아래 문장처럼 동일하다. UPDATE USER_INFO SETDEPT_NM = '개발팀'WHERE USER_ID = '1' 이런 식으로 말이다. 다음은 SELECT 결과로 UPDATE 처리하는 문장을 보자. UPDATE USER_INFO A SET ( DEPT_NM, DEPT_CD) = (SELECT DEPT_NM -- Alias 를 사용해 UPDATE 하고자 하는 컬럼명과 동일하게 한다., DEPT_CDFROM DEPT_INFO DI -- JOIN도 가능WHERE 1 = 1 -- DEPT_INFO 조건이 더 들어갈 수 있다.)WHERE A.USER_ID = '1' 이렇게 실행하면 조건에 주어진 DEPT_NM 과 DEPT_CD 가 USER_INFO 테이블에 UPDATE 될 ..

WORK/DB 2018.12.05

오라클 리스트 누적 합계 구하기

SELECT NAME, CNT1, CNT2, CNT3FROM TEMP 위와같은 테이블에서 데이터를 조회 했을 경우 아래와 같이 데이터가 조회 된다. 이럴때 CNT1 , CNT2 , CNT3 의 값을 SUM 해서 맨 아래 ROW에 추가 해보자 WITH TEMP_TABLE AS( SELECT NAME, CNT1, CNT2, CNT3FROM TEMP)SELECT NAME, SUM(CNT1)AS CNT1 , SUM(CNT2)AS CNT2 , SUM(CNT3)AS CNT3 FROM TEMP_TABLE GROUP BY ROLLUP(NAME ) 위와 같이 추가하면 아래와같이 결과가 나온다. 맨 아래 합계된 ROW가 추가된걸 확인할 수 있다.

WORK/DB 2018.12.03