왕초보벗어나자
207
2021-09-14 16:50:04
2
101

오라클 mybatis 쿼리 문법 질문


안녕하세요 

신입개발자 입니다.

개속 오류가 나서 도저히 답이 없어서 게시글 작성합니다.

조합해서 짜다보니 도저히 모르겠네요


	<![CDATA[	
SELECT * 
  FROM(
        SELECT ROWNUM AS RNUM, A.*
            FROM TBL_BOARD A
         WHERE ROWNUM <= 10 
         
         <trim prefix="WHERE" prefixOverrides="AND|OR">
			<if test='searchType=="title" and keyword != null and keyword != "" '>
				AND TITLE like CONCAT(CONCAT('%', #{keyword, jdbcType=VARCHAR}), '%')
			</if>
			<if test='searchType=="content" and keyword != null and keyword != "" '>
				AND CONTENT like CONCAT(CONCAT('%', #{keyword, jdbcType=VARCHAR}), '%')
			</if>
			<if test='searchType=="reg_id" and keyword != null and keyword != "" '>
				AND reg_id like CONCAT(CONCAT('%', #{keyword, jdbcType=VARCHAR}), '%')
			</if>	
		</trim>
      )
 WHERE RNUM >= 1
			
]]>
; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: ORA-00907: missing right parenthesis

	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
	org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:655)
	org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
0
  • 답변 2

  • 장쭌
    91
    2021-09-14 16:57:47

    <![CDATA[ 선언이 모든 쿼리를 감싸고 있어 조건부의 < 도 문자열로 인식하여 발생한 오류 같습니다.

    조건부를 제외한 < 가 들어가는 부분만 <![CDATA[ 를 사용하는것이 올바른 문법입니다.

    SELECT * 
      FROM(
            SELECT ROWNUM AS RNUM, A.*
                FROM TBL_BOARD A
             WHERE  <![CDATA[ ROWNUM <= 10 ]]>
             
             <trim prefix="WHERE" prefixOverrides="AND|OR">
    			<if test='searchType=="title" and keyword != null and keyword != "" '>
    				AND TITLE like CONCAT(CONCAT('%', #{keyword, jdbcType=VARCHAR}), '%')
    			</if>
    			<if test='searchType=="content" and keyword != null and keyword != "" '>
    				AND CONTENT like CONCAT(CONCAT('%', #{keyword, jdbcType=VARCHAR}), '%')
    			</if>
    			<if test='searchType=="reg_id" and keyword != null and keyword != "" '>
    				AND reg_id like CONCAT(CONCAT('%', #{keyword, jdbcType=VARCHAR}), '%')
    			</if>	
    		</trim>
          )
     WHERE <![CDATA[ RNUM >= 1 ]]>
  • 왕초보벗어나자
    207
    2021-09-14 17:11:52

    너무 감사합니다.^^

  • 로그인을 하시면 답변을 등록할 수 있습니다.