Background Image

FORUM

조회 수 1283 추천 수 0 댓글 4
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄


* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.

OS
Window7 32bit, Linux 64bit 등
CUBRID Ver.
[cubrid_rel] 수행 결과
CUBRID TOOL Ver.
[도움말]-[버전정보] 확인
응용 환경(API)
java, mybatis, jdbc


* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.

 

에러 내용 및 재현 방법 재현 가능한 Source와 SQL
관련 테이블(인덱스, 키정보 포함) 정보 CUBRID 홈 디렉토리 아래 log 디렉토리 압축


-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------

mybatis를 사용해서 bulk insert or update를 하나의 쿼리로 작성중에 있는데요
mysql 같은 경우 아래와 같이 values 키워드를 통해서 insert가 안되면 insert하고자 했던 내용으로 update가 가능하도록 할 수 있는 것으로 알고 있습니다.

<insert id="upsert" parameterType="map" useGeneratedKeys="false">
    INSERT
    INTO tt(
    a, b, c
    )
    VALUES
    <foreach collection="list" item="item" separator=",">
        (
        , #{item.a} as a
        , #{item.b} as b
        , #{item.c} as c
        )
    </foreach>
    ON DUPLICATE KEY UPDATE
    a = values(a),
    b = values(b)
</insert>

cubrid에서도 가능한 방법이 있을까요 ?

 

  • ?
    권호일 2021.07.14 13:14
    아래와 같이 변경해서 테스트 해 보세요.


    <insert id="upsert" parameterType="map" useGeneratedKeys="false">
    INSERT
    INTO tt(
    a, b, c
    )
    VALUES
    <foreach collection="list" item="item" separator=",">
    (
    #{item.a}
    , #{item.b}
    , #{item.c}
    )
    </foreach>
    ON DUPLICATE KEY UPDATE
    a = #{item.a},
    b = #{item.b}
    </insert>
  • ?
    dodev 2021.07.15 08:36
    일전에 테스트를 해보았었는데요, item을 파라미터로 인식하고 파라미터를 못찾는 바인딩 예외가 발생합니다.

    org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException
  • ?
    오명환 2021.07.15 09:49
    cubrid는 on duplicate key update 구문에 values() 를 지원하고 있지 않습니다.
    mybatis구문에서 foreach 구문에 on duplicate key update 구문까지 넣어서 변경해보세요.
    <foreach collection="list" item="item" separator=",">
    (
    , #{item.a} as a
    , #{item.b} as b
    , #{item.c} as c
    )
    ON DUPLICATE KEY UPDATE
    a = #{item.a} ,
    b = #[item.b]
    </foreach>

    그리고, cubrid 에서 replace into 구문을 지원합니다. 동작은 insert on duplicate key update와 동일하고, 사용은 insert 구문과 유사합니다.
    <insert id="upsert" parameterType="map" useGeneratedKeys="false">
    REPLACE
    INTO tt(
    a, b, c
    )
    VALUES
    <foreach collection="list" item="item" separator=",">
    (
    #{item.a}
    , #{item.b}
    , #{item.c}
    )
    </foreach>
    </insert>
  • ?
    dodev 2021.07.15 10:57
    테스트를 해보니 foreach 문 안쪽으로 ON DUPLICATION KEY UPDATE 문을 넣어서도 안되는 것 같네요. grammer 예외로 나오네요

    그리고 replace 같은 경우 update 조건이 되었을 때, 행을 제거하고 새로 삽입하기 때문에 ON DUPLICATE KEY UPDATE 문을 적극 이용해보려고 했던 상황이였는데요,
    아무래도 불가능하다면 REPLACE도 고려해봐야겠네요

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4283
3976 "DATABASE 검사" 도무지 끝날 기미가 안 보입니다 5 한종희 2011.08.02 8582
3975 "DBMS, 0, Unknown DBMS error" 요건 무슨 애러인가요?;; 2 eitetu 2011.06.02 14292
3974 "Token length is too long" 오류에 관하여 질문 드립니다. 4 file 김우람 2009.01.09 21475
3973 & 등의 특수문자등이 변환되어 저장되는 경우 1 호랑이야옹 2012.12.28 10671
3972 ' 의 입력 방식이 궁금합니다. 1 이석희 2009.04.10 13421
3971 (1개의 댓글은 작성자가 썼습니다.)비주얼 베이직 큐브리드 연동후 동시에 여러 테이블 보는 방법문의 2 secret 강남우 2012.12.21 58
3970 (Re:) 회원가입이 3명이상 안돼요... 6 딩이 2010.07.08 7595
3969 (python)centOS7 docker 연결 문의입니다. 리얼비 2021.11.01 105
3968 (댓글 질문등록 했습니다.)이전글, 다음글 기능(LAG, LEAD) ORDER BY절 FOR ORDERBY_NUM() 추가해도 그대로 입니다 3 취우다 2017.04.19 5950
3967 (함수)펑션 오류 확인부탁드립니다. 1 초코초코초 2023.02.10 100
3966 *variable* 에러 1 hwon 2013.06.14 11617
3965 ++ cubrid server start: fail 2 file 토네이도 2013.09.13 13691
3964 -74 오류 조치 방법 1 덜쇠 2013.08.07 7641
3963 .AccessViolationException (C#) 1 swift 2021.06.03 206
3962 .NET 4.5 에서의 NHibernate 문제, .NET 4.0 에서 NHibernate + TransactionScope 활용 문제. 1 websiter 2017.06.09 2053
3961 .NET DB 제어를 위한 방법. 2 우페 2008.11.23 60874
3960 .net db목록 관련 질문 드립니다. 4 파인 2021.03.05 134
3959 // 를 사용하고 싶습니다. 1 죽통군 2010.02.10 9583
3958 /etc/hosts 파일 수정 1 secret chocob 2014.10.13 13
3957 /etc/rc3.d/S98cubrid 화일 좀 바꿔주세요 1 꽁꽁단무지 2017.01.25 12245
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 199 Next
/ 199

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales