INSTR('비교할 대상', '비교하고자하는 값', 비교를 시작할 위치, 검색된 결과의 순번)

 

UPPER() - 문자열을 대문자로 변경해주는

 >> 입력값 : UPPER('test')   

 >> 결과값 : TEST 

 

LOWER() - 문자열을 소문자로 변경해주는

 >> 입력값 : LOWER('TEST')

 >> 결과값 : test

 

위의 함수들을 적절히 섞어 사용하면

회원 가입할때, 특정아이디는 만들수 없게 처리할때 유용하게 사용 가능

 

저는 아이디 제한 체크 만들때 사용했는데요 

 

예시를 보여드리겠습니다.

 

SELECT 컬럼명 
  FROM 테이블명
 WHERE instr(upper('입력받을 문자열'), upper(비교하고자 하는 컬럼명)) > 0

 

 

WHERE절에 0을 준 이유

 

instr의 값은 특정위치를 찾으면 해당 문자열 위치를 반환 합니다.

 

그러므로 특정문자열이 찾게 된다면 0보다 큰 수가 반환되기 때문입니다~

 

'DBMS > Oracle' 카테고리의 다른 글

인증 쿼리  (0) 2019.07.15
mybatis 동적 쿼리 choose 등 사용 주의사항  (1) 2018.07.13
mybits 에러  (0) 2018.07.13
이런방식의 쿼리. sort_sql에서 max값 구할때  (0) 2017.12.06
Merge Into 사용방법  (0) 2017.11.23

SELECT 
    TRUNC(DBMS_RANDOM.VALUE (1, 999999), 0) OTP_NUM,
    TO_CHAR(SYSDATE, 'YYYYMMDD')
FROM DUAL;

 

오라클 함수

TRUNC : 소수점 및 날짜를 없앨때 사용한다.

 

사용방법 > TRUNC("값","옵션")

 

DBMS_RANDOM.VALUE

사용방법 > DBMS_RANDOM.VALUE (LOW IN NUMBER, HIGHT IN NUMBER)

 

지정해준 LOW IN NUMBER 값에서 HIGHT IN NUMBER 값 사이를 랜덤으로 생성해 준다.

 

위 두개의 함수를 조합해서 사용하면 정수의 랜덤인 6자리의 숫자를 뱉는다.

 

 

 

'DBMS > Oracle' 카테고리의 다른 글

특정 문자 ID 제한 쿼리  (0) 2019.07.19
mybatis 동적 쿼리 choose 등 사용 주의사항  (1) 2018.07.13
mybits 에러  (0) 2018.07.13
이런방식의 쿼리. sort_sql에서 max값 구할때  (0) 2017.12.06
Merge Into 사용방법  (0) 2017.11.23


<choose>


</choose>


그냥 mybatis에서 동적쿼리 사용할때 무조건

소문자로 작성해야 한다.


대문자로 작성하니까 안되더라 ...


이거 때문에도 

30분 고생함.



'DBMS > Oracle' 카테고리의 다른 글

특정 문자 ID 제한 쿼리  (0) 2019.07.19
인증 쿼리  (0) 2019.07.15
mybits 에러  (0) 2018.07.13
이런방식의 쿼리. sort_sql에서 max값 구할때  (0) 2017.12.06
Merge Into 사용방법  (0) 2017.11.23

요소 콘텐츠는 올바른 형식의 문자 데이터 또는 마크업으로 구성되어야 합니다.
 


mybatis쿼리문 작성후 서버 돌릴때 위와 같은 에러가 발생 하였다면



MyBatis에서는 부등호( <, > ) 사용시 <![CDATA[  여기에    ]]> 사용해 주어야 한다. 


이거때문에 2시간 뻘고생 했네 ... 


'DBMS > Oracle' 카테고리의 다른 글

인증 쿼리  (0) 2019.07.15
mybatis 동적 쿼리 choose 등 사용 주의사항  (1) 2018.07.13
이런방식의 쿼리. sort_sql에서 max값 구할때  (0) 2017.12.06
Merge Into 사용방법  (0) 2017.11.23
데이터 변형  (0) 2017.10.17

<!-- 중소벤치기업부 사업별 매핑 Merge 등록/수정 -->

<query id="SHYBCard.mergeMapping" isDynamic="true"> 

<statement><![CDATA[ 

/* SHYBCard.mergeMapping : 중소벤치기업부 사업별 매핑 Merge 등록 / 수정 */

            MERGE INTO SHYB_RCMS_MAP_M A

      USING ( SELECT :PMS_ID     AS PMS_ID

                   , :BZ_CLAS_CD AS BZ_CLAS_CD

                   , :ITXP_CD    AS ITXP_CD

                   , :H01_DOC    AS H01_DOC 

                FROM DUAL ) B 

      ON ( A.PMS_ID     = B.PMS_ID     AND

           A.BZ_CLAS_CD = B.BZ_CLAS_CD AND

           A.ITXP_CD    = B.ITXP_CD    AND

           A.H01_DOC    = B.H01_DOC

         )

      WHEN MATCHED THEN

           UPDATE 

              SET A.USE_YN   = 'Y'

                , A.UPD_ID   = :GV_WORKER_ID

                , A.UPD_DT   = SYSDATE

      WHEN NOT MATCHED THEN

           INSERT ( PMS_ID,  BZ_CLAS_CD,  ITXP_CD,  H01_DOC,  PILSU_YN,  SORT_SEQ,  USE_YN,  BIGO,  REG_ID      , REG_DT,   UPD_ID,       UPD_DT )

           VALUES (:PMS_ID, :BZ_CLAS_CD, :ITXP_CD, :H01_DOC, :PILSU_YN, (SELECT NVL(MAX(SORT_SEQ),0) + 1 

               FROM SHYB_RCMS_MAP_M 

              WHERE PMS_ID = :PMS_ID 

                AND BZ_CLAS_CD = :BZ_CLAS_CD 

                AND ITXP_CD = :ITXP_CD),'Y', :BIGO, :GV_WORKER_ID, SYSDATE, :GV_WORKER_ID, SYSDATE )

]]></statement>

</query>


빨간 부분에서 중요한건 -> merge insert구문에서 value에 쿼리를 넣었다는것. 값을 넣어야 하기 떄문에 value에 넣은게 맞겠지??

생각 잘해라!

'DBMS > Oracle' 카테고리의 다른 글

mybatis 동적 쿼리 choose 등 사용 주의사항  (1) 2018.07.13
mybits 에러  (0) 2018.07.13
Merge Into 사용방법  (0) 2017.11.23
데이터 변형  (0) 2017.10.17
LAPD,RAPD 사용법  (0) 2017.10.17

merge into는 

DB 테이블을 다룰 때, 특정 조건의 데이터가 존재하는 경우에는 해당 row를 원하는 값으로 update하고,

없는 경우에는 새로운 데이터를 insert해야 하는 경우에 사용한다. 



MERGE문


MERGE INTO 테이블명

USING ( update나 insert될 데이터 원천, 하나의 테이블만 이용한다면 FROM DUAL사용 )

ON (UPDATE될 조건, 쿼리의 WHERE이라고 봐도 무방함)

WHEN MATCHED THEN ( ON에서 조건에 해당하면 실행 될 문 )

UPDATE SET 컬럼1 = 값1 ( UPDATE문 실행)

WHEN NOT MATCHED THEN ( ON에서 조건에 해당하지 않으면 실행 될 문 )

INSERT ( 컬럼 LIST ) VALUE ( VALUE );



!!!!!! 가장 중요한것. 이거때문에 하루 버렸는데,Point!!!!


using ( select 할때 )에서 항시 해당 Table 의 PK를 전체를 변수로 받아야 합니다.  null 유의 )



예) 회사에서 사용한 것 (테이블명,컬럼명 변경함)


MERGE INTO MAP_M A

      USING ( SELECT :컬럼0 AS 컬럼0         //컬럼0~3은 모두 MAP_M 이라는 테이블의 KEY값.

                   , :컬럼1 AS 컬럼1

                   , :컬럼2 AS 컬럼2

                   , :컬럼3 AS 컬럼3

                FROM DUAL ) B // FROM DUAL은 테이블을 1개만 쓸때!! 

      ON ( A.컬럼0     = B.컬럼0     AND

           A.컬럼1 = B.컬럼1 AND

           A.컬럼2 = B.컬럼2 AND

           A.컬럼3 = B.컬럼3

          )

      WHEN MATCHED THEN

           UPDATE 

              SET A.컬럼4   = 'Y'

                , A.컬럼5   = :받아올 값

                , A.컬럼6   = :받아올 값

      WHEN NOT MATCHED THEN

            INSERT ( 컬럼1,   컬럼2,    컬럼3,    컬럼4,    컬럼5,    컬럼6 )

           VALUES (:컬럼1,  :컬럼2,    :컬럼3,    :컬럼4,    :컬럼5,   :컬럼6 )


이런식으로 사용하면 끝 !!!! 


그리고 Oracle 10g 이후에는 When matched,, when not matched 이하의 update,insert 구문에도 where을 사용할 수 있습니다 !!!! 



'DBMS > Oracle' 카테고리의 다른 글

mybits 에러  (0) 2018.07.13
이런방식의 쿼리. sort_sql에서 max값 구할때  (0) 2017.12.06
데이터 변형  (0) 2017.10.17
LAPD,RAPD 사용법  (0) 2017.10.17
UNION, UNION ALL  (0) 2017.06.16

데이터 변형 

오라클 함수 


SELECT TO_CHAR('1000000','FM999,999,999') FROM DUAL;

-> 1,000,000

FM을 붙이면 좌측에 공백없이 붙어서 출력



'DBMS > Oracle' 카테고리의 다른 글

이런방식의 쿼리. sort_sql에서 max값 구할때  (0) 2017.12.06
Merge Into 사용방법  (0) 2017.11.23
LAPD,RAPD 사용법  (0) 2017.10.17
UNION, UNION ALL  (0) 2017.06.16
알아두면 좋을 여러가지 들  (0) 2017.06.16

DUAL테이블은 어느 아이디나 접근 가능한 표준 테이블로서 

오직 한 행(ROW)을 담고 있는 DUMMY테이블입니다.

SELECT LPAD('A',2) FROM DUAL;

-> LAPD('A',2)는 LEFT PADDING을 사용하겠다. 

2번째 위치에 A라는 문자를 대입하고 왼쪽으로 PADDING 하겠다. 즉 블랭크(공백)으로 표시하겠다.라는 뜻


LAPD함수에 인자를 3개 넣을 수 있다.


SELECT LPAD('A',3,'_') FROM DUAL; 

결과 : ___A 

즉 블랭크(공백)에 '_'로 채워 넣는다.


LAPD = LEFT PADDING 

즉 반대인

RPAD = RIGHT PADDING은 오른쪽에 블랭크(공백)을 넣겠다.라는 뜻





'DBMS > Oracle' 카테고리의 다른 글

Merge Into 사용방법  (0) 2017.11.23
데이터 변형  (0) 2017.10.17
UNION, UNION ALL  (0) 2017.06.16
알아두면 좋을 여러가지 들  (0) 2017.06.16
오라클 유저/계정 테이블, 컬럼 조회  (0) 2017.06.05

UNION이란 공동체라는 뜻을 갖는다.


사용법 

SELECT * FROM 테이블명1 

UNION

SELECT * FROM 테이블명2;


 - 테이블1,테이블2에 각 SELECT 에서 조회되는 값을 한곳에 표시 된다.

 - 테이블1,테이블2에 나타난 값들중 중복된 값은 하나로 표시 된다.

 - UNION ALL을 사용하면 중복된 값들도 표시 된다.


EX)테이블1에서 값이 [1,2,3,3,3,3,4,5,6,7] , 테이블2에서 값이 [A,B,C,D,D,D,E,F]라면

UNION 을 사용하면 [1,2,3,4,5,6,7,A,B,C,D,E,F]로 표시 된다

UNION ALL을 사용하면 [1,2,3,3,3,3,4,5,6,7,A,B,C,D,D,D,E,F]로 표시 된다


'DBMS > Oracle' 카테고리의 다른 글

데이터 변형  (0) 2017.10.17
LAPD,RAPD 사용법  (0) 2017.10.17
알아두면 좋을 여러가지 들  (0) 2017.06.16
오라클 유저/계정 테이블, 컬럼 조회  (0) 2017.06.05
UPDATE 구문  (0) 2017.06.05

SELECT SUM(컬럼명) FROM 테이블 명 

 - 컬럼안에 있는 값을 더한다.

SELECT AVG(컬럼명) FROM 테이블 명 

 - 컬럼안에 있는 값의 평균을 구한다

SELECT MAX(컬럼명) FROM 테이블 명 

 - 컬럼명 안에 가장 큰 값을 구한다.

SELECT MIN(컬럼명) FROM 테이블 명 

 - 컬럼명 안에 가장 작은 값을 구한다.

SELECT COUNT(컬럼명) FROM 테이블 명 

 - 컬럼명의 갯수를 구한다.

SELECT * FROM 테이블 명 GROUP BY(열이름) 
 - 같은이름의 열 끼리 묶는다. ADD같은 함수 사용시 특정 끼리 나누어 더할때 유용함

SELECT DISTINCT(열이름) FROM 테이블 명
 - 열이름안에 들어간 데이터의 중복 값을 제거 함 
   EX) [1,3,4,4,4,5,5,5,6,6,6,7,8,9,9,9,9] -> DISTINCT 사용시 [1,3,4,5,6,7,8,9]로 나타남

SELECT * FROM 테이블 명 WHERE 열이름 IN ('값1','값2')

 - 열이름안에 넣은 값들이 존제한 컬럼 찾는다.


SELECT * FROM 테이블 명 WHERE 열이름 NOT IN ('값1','값2')

 - 열이름안에 넣은 값들이 존제하지 않은 컬럼 찾는다.





'DBMS > Oracle' 카테고리의 다른 글

LAPD,RAPD 사용법  (0) 2017.10.17
UNION, UNION ALL  (0) 2017.06.16
오라클 유저/계정 테이블, 컬럼 조회  (0) 2017.06.05
UPDATE 구문  (0) 2017.06.05
TABLE 단위 백업 하기  (0) 2017.06.05

+ Recent posts