[ myBatis.oracle.sql.CLOB@  결과 오류시 ]



 

오라클 함수중 WM_CONCAT()  함수를 사용하면 기본적으로 VARCHAR type으로 return한다.
그런데,  결과값이 너무 길 경우 오라클은 CLOB type으로 return하게 되고,
myBatis, JAVA에서는 CLOB type이 없기 때문에 최종결과는 "oracle.sql.CLOB@  ..."와 
같은 오류값이 RETURN 된다.

해결방법 : 원래 clob type을 string으로 변환하는 Mybatis 구문이 있지만 이상하게 
                 WM_CONCAT()함수 결과 컬럼에 대해서는 적용되지 않는다.
                그래서 TO_CHAR( WB_CONCAT(. ... ) ) 와 같아 . TO_CHAT()함수로 묶어 준다.
                문약, TO_CHAR()함로도 안되면  TO_CHAR(SUBSTR(컬럼명, 1, 2000)) AS 컬럼명
                과 같이 SUBSTR(0함수도 사용하면 된다.

<sqlMap namespace="BPPA0080">
    <
select id="selectShopList"  parameterClass="java.util.HashMapresultClass="java.util.HashMap" >
        SELECT /* BPPA0080.shopList */
              AREA2_CLS_CD
            , AREA2_CLS_NM
            , SHOP_CLS_NM
            , TO_CHAR(SUBSTR(BEF_YY_LIST, 1, 4000)) AS BEF_YY_LIST
            , TO_CHAR(SUBSTR(NEXT_YY_OPEN_LIST, 1, 2000)) AS NEXT_YY_OPEN_LIST
          FROM TABLE_NAME
    </
select>
</
sqlMap>

 


'Web. 기타 언어 > myBatis' 카테고리의 다른 글

myBatis. if. case 문  (0) 2017.12.05
myBatis에서 foreach 사용하기  (0) 2017.06.09
myBatis.CLOB Column type  (0) 2017.01.31
myBatis.SQL문 안에서 <, > 사용  (0) 2017.01.31
myBatis.xml Tag  (0) 2017.01.31
Posted by 농부지기
,

[ myBatis.CLOB Column type ]


 

 
 

/* --------------------------------------------------------------------------------------------- */
/*  Mybatis에서는 조회SQL 문장에서 CLOB 컬럼을 조회하면 이 CLOB TYPE에 대한 형(type)이 없다.     */
/*  그래서 CLOB TYPE에 대한 컬럼 결과를 String 형(type)으로 변환하는 구문이 필요하다.            */
/* --------------------------------------------------------------------------------------------- */

<
sqlMap namespace="CMLO0040">

    <
resultMap id="clobHashMapclass="java.util.HashMap">   
        <
result property="SQL_FULLTEXTcolumn="SQL_FULLTEXTjdbcType="CLOBjavaType="java.lang.String"/>
    </
resultMap>

    <
select id="selectSqlparameterClass="java.util.HashMap" resultMap="clobHashMap" >
        SELECT /* CMLO0040.selectSql */
               SQL_FULLTEXT
          FROM TCM_LOG_DB
         WHERE NO = #NO#
    </
select>
       
</
sqlMap>


'Web. 기타 언어 > myBatis' 카테고리의 다른 글

myBatis에서 foreach 사용하기  (0) 2017.06.09
myBatis.oracle.sql.CLOB@ 결과 오류시  (0) 2017.01.31
myBatis.SQL문 안에서 <, > 사용  (0) 2017.01.31
myBatis.xml Tag  (0) 2017.01.31
myBatis XML 기본 문법  (2) 2017.01.31
Posted by 농부지기
,

[ myBatis.SQL문 안에서 <, > 사용 ]



 

 

SQL문 안에서 <, > 사용할때 정상적으로 처리는 된것 같은데, dataset을 리턴받아서 처리를 못할수 있습니다.
  
이때  <를 〈로 >를 〉로 바꿔서 쓰시면 정상적으로 작동합니다.(ascii)
 
SQL문장안에 <, >을 사용한 경우이고 db에 있는데 데이터를 가져올때는 해당되지 않습니다.
 
select '신한법인카드<-엘지법인카드'
from dual


'Web. 기타 언어 > myBatis' 카테고리의 다른 글

myBatis에서 foreach 사용하기  (0) 2017.06.09
myBatis.oracle.sql.CLOB@ 결과 오류시  (0) 2017.01.31
myBatis.CLOB Column type  (0) 2017.01.31
myBatis.xml Tag  (0) 2017.01.31
myBatis XML 기본 문법  (2) 2017.01.31
Posted by 농부지기
,

[ myBatis.xml Tag ]


 

 

정의 : sql 문장을 만들경우 java단에서 값을 넘겨서 ibatis framework에서 받아 주는 구문
 
1. java단에서 넘긴 값 받기 (##)
   - 정의방법   : 
WHERE COMP_CD = #compCd# 
   - 최종실행문 : 
WHERE COMP_CD = '101'
   - 설명 : ##으로 받은 argument는 String으로 인식하여 (')single quote를 양쪽으로 붙여 준다.
   - 사용 : Table column type이 String일 경우에 사용함. (숫자 type도 가능함)
 
2. java단에서 넘긴 값 받기 ($$)
   - 정의방법    : 
SELECT $COL_LIST$
                                    ...

                        
WHERE COMP_CD IN ($compCd$)
                           
OR EMP_ID IN ($compCd$)
   - 최종실행문 : 
SELECT COMP_CD, COMP_NM, EMP_ID, EMP_NM, SALARY
                                    ...
                        
WHERE COMP_CD IN ('101', '103', '104')
                           
OR EMP_ID IN (1301, 55401, 4421)
   - 설명 : $$로 받은 argument는 java단에서 넘겨 받은 값을 그대로 넣어 준다.
   - 사용 : Table column type이 number일 경우에 사용
   -       sql 문장중 in 구문에 사용
   -       컬럼 LIST를 dynamic하게 사용하고 싶을 경우에 사용
   -       sql 문장을  dynamic하게 사용하고 싶을 경우에 사용

3. 조건절에 대소 비교(<>)가 존재 시
    - <
![CDATA[ AND RETIRE_YN <> 'Y'   ]]>   
    - <
![CDATA[ AND B.ACCT_CD >= #csSAcctCd_edtCode# ]]>  


4. 값이 null이면 해당 sql 문장 skip
   - 정의 : <
isNotNull property="cmbSlpmCtg" >
               </
isNotNull>

               <
isNull property="cmbSlpmCtg" >
               </
isNull>

5. if 문장
   - 정의 : <
isNotEqual property='rdoApvYn' compareValue='0'>
               AND A.APPR_DT IS NULL
            </
isNotEqual>
           
            <
isEqual property='rdoApvYn' compareValue='1'>
            </
isEqual>

 

 

  

 

'Web. 기타 언어 > myBatis' 카테고리의 다른 글

myBatis에서 foreach 사용하기  (0) 2017.06.09
myBatis.oracle.sql.CLOB@ 결과 오류시  (0) 2017.01.31
myBatis.CLOB Column type  (0) 2017.01.31
myBatis.SQL문 안에서 <, > 사용  (0) 2017.01.31
myBatis XML 기본 문법  (2) 2017.01.31
Posted by 농부지기
,

[ ◎ myBatis XML 기본 문법 ]     


1. xml 정의

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">
        

2. 주석

 


    참고 : 이때 '-'를 여러개 정의하면 오류 발생 (예, '-----------------------')
        <!--
            SQL File Name : BPSL0060_SQL.xml
            Description   : 판매수수료율 계획 관리
            ==개정이력========================================
            수정일         수정자     Version    Query Id
            ========== ======= =========   ===================
            2013.12.18 김용학    1.0         최초 생성
        -->    

    

3. sqlMap Tag 시작

 

<sqlMap namespace="BPSL0060">

4. xml tag중 Alias 정의

 


  parameterClass등의 값을 정의 시 이 Alias를 사용해서 가능한다.

     <
typeAlias alias="BPMap" type="java.util.HashMap"/>
     <
typeAlias alias="CVo"   type="kr.co.descentekorea.common.vo.CommonVO"/>
     <
select id="selectSeasonList"  parameterClass="BPMap" resultClass="BPMap" >
              ....
     </
select>
 

5. select 문장

 


 id : 해당 select구문 id
 parameterClass : sql select 구문 작성시 argument로 받은 상수들에 대한 Object type정의
 resulClass       : sql select 결과를 어떤 Object type로 return할지에 대한 정의

  <
select id="selectSeasonList"  parameterClass="java.util.HashMap" resultClass="java.util.HashMap" >
      ...
  </
select>
 

6. select 문장

 


 remapResults :
   iBatis는 하나의 SELECT절에 대해서 첫 번째 조회 시 Column List와 Column Type등을 메모리에
   가지고 있다. 두 번째 부터는 이 컬럼목록 과 타입을 이용해서 처리 된다.
   이로 인해 다시 컬럼목록과 타입을 재 분석하는 속도를 향상시킬 수 있다.

   문제는, PIVOT함수나 Dynamic SQL 문장등으로 조회할 때 마다 컬럼목록이 매번 달라지거나 컬럼 타입등이
   변경된다면 첫 번재 조회된 컬럼목록과 타입으로 처리 되므로 client단에서 자료를 받아서 사용할 때 문제점
   이 발생 된다.

   해결방안은 
remapResults="true" 을 사용하여 매번 SELECT 할 때마나 컬럼목록과 타입을 재 분석하여
   사용하게 된다.

   <
select id="selectCommissionList"  parameterClass="java.util.HashMap" resultClass="java.util.HashMap"
                                 
remapResults="true" >
            .............

   </select>

7. insert 문장

 


 - MERGE 문장도 이곳에 구현 가능하다.

   <
insert id="saveCommission" parameterClass="java.util.HashMap">
         ....
   </
insert>
 

8. Update 문장

 


   <
update id="deleteCommission" parameterClass="java.util.HashMap">
           ............
   </
update>

9. Procedure 문장 호출

 

- parameterMap id="cVO"  는 아래 procedure Tag의 parameterMap="cVO" 과 동일 해야 된다.
- javaType : ㄱ. java단에서는 Object, 또는 String으로 넘기면  
             ㄴ. ibatis는  java.lang.String 으로 모두 받는다.
             ㄷ. 그런후 Procedure에서는 해당 인자를 받는다.
                 이때 ibatis에서 String으로 넘겨도 Procedure 에서는 VARCHAR2 또는 NUMBER 로 
                 정의 해도 모두 수용한다.
- mode : IN, OUT (input, return)정의
- procedure id="planCopy"   이 id를 가지고 java단에서 호출함

   <
parameterMap id="cVO" class="kr.co.descentekorea.common.vo.CommonVO">
       <
parameter property="map.gv_compCd"   javaType="java.lang.String" jdbcType="VARCHAR" mode="IN" />
       <
parameter property="map.ORG_PLAN_YY" javaType="java.lang.String" jdbcType="VARCHAR" mode="IN" />
       <
parameter property="map.ORG_PLAN_CD" javaType="java.lang.String" jdbcType="VARCHAR" mode="IN" />
       <
parameter property="errorFlag"       javaType="java.lang.String" jdbcType="VARCHAR" mode="OUT" />
       <
parameter property="errorMessage"    javaType="java.lang.String" jdbcType="VARCHAR" mode="OUT" />

   </
parameterMap>
   <
procedure id="planCopy" parameterMap="cVO">
          { CALL /* BPCM.사업계획 차수 복사  */ 
                   SP_BP_PLAN_COPY(?,?,?,?     ,?,?,?    ,?,?,?,?)
           }
   </
procedure>
   


  

'Web. 기타 언어 > myBatis' 카테고리의 다른 글

myBatis에서 foreach 사용하기  (0) 2017.06.09
myBatis.oracle.sql.CLOB@ 결과 오류시  (0) 2017.01.31
myBatis.CLOB Column type  (0) 2017.01.31
myBatis.SQL문 안에서 <, > 사용  (0) 2017.01.31
myBatis.xml Tag  (0) 2017.01.31
Posted by 농부지기
,

[ Nexacro - Array.초기화 ]


var aColId = ["11", "222", "333"];

'Nexacro-이론 및 튜닝 > 기본문법' 카테고리의 다른 글

Nexacro-튜닝포인트  (0) 2017.09.28
Nexacro-Null  (0) 2017.02.13
Nexacro 문법 - do while  (0) 2017.01.22
Nexacro 기본문법.Array2  (0) 2017.01.22
Nexacro 기본문법 - Array  (0) 2017.01.22
Posted by 농부지기
,

[ Android.editText 하단라인 보이기.안보이게 하기 ]

 

1. 정의

    - EditText의 기본은 전체 4각형 Box에 하단 라인이 기본적으로 보이게 된다.

    - focus가 위치하는 EditText의 하단라인은 핑크색

    - focus를 잃었은 EditText의 하단라인은 진한회색

 

2. 하단라인 없애기

    - [ android:background="??" ] 속성을 기술하면 하단라인이 보이지 않는다.

    - [ android:background="??" ] 속성을 기술하지 않으면 하단라인이 보인다.

 

3. 화면

    - 왼쪽     화면은 하단 라인이 보이기

       . background 속성을 기술하지 않았음.

       . focus가 위치하는 EditText의 하단라인은 핑크색

       . focus를 잃었은 EditText의 하단라인은 진한회색

    - 오른쪽 화면은 하단 라인 안보이게 하기

       . 아이디 입력 EditText는  [ android:background="@null" ] 으로 처리

       . 비밀번호 입력 EditText는  [ android:background="#d7d5d7" ](회색) 으로 처리

      

   

 

 

 

 

'[Android] - 위젯 > EditText' 카테고리의 다른 글

키보드 보이게 하기  (0) 2017.01.02
Focus 막기. Editting 안되게 하기  (0) 2017.01.02
포커스 주기  (0) 2017.01.02
숫자 관련  (0) 2017.01.01
Posted by 농부지기
,

[ Android.Activity Title bar 제거 ]

 

1. 정의

    - Android App의 Title bar제거

 

2. Title bar 화면

    - 왼쪽     화면은 Title bar가 존재

    - 오른쪽 화면은 Title bar가 제거된 상태

   

 

3. Title bar 제거 방법 1

    - 기본 Activity에

       supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
      이 문장을 삽입한다.

      반드시 setContentView()보다 먼저 기술해야 됨

 

public class UserActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user);
    }
}

 

  - java단에서  'Activity'를 상속받은 경우에는 다음을 사용

    requestWindowFeature(Window.FEATURE_NO_TITLE);

 

   - java단에서  'AppCompatActivity'를 상속받은 경우에는 다음을 사용

     supportRequestWindowFeature(Window.FEATURE_NO_TITLE);

 

4. Title bar 제거 방법 2

     1. Menifest 파일에 다음 tag 등록

         - android:theme="@style/Theme.AppCompat.NoActionBar"


     2. Application 전체에서 제거하려면

 

 <application
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:allowBackup="true"
    android:supportsRtl="true"
    android:theme="@style/Theme.AppCompat.NoActionBar">
    <activity
        android:name=".user.UserActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

 

     3. Activity element만 제거하려면

 

<application
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:allowBackup="true"
    android:supportsRtl="true">
    <activity
        android:theme="@style/Theme.AppCompat.NoActionBar"
        android:name=".user.UserActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

 

Posted by 농부지기
,

[ Android.AppBarLayout - 개념 ]

 

1. class : android.support.design.widget.AppBarLayout

 

2. 사용가능모듈

    1. AppBarLayout을 사용하려면

      'com.android.support:design:25.1.0' 모듈이 필요

    2. 반드시 build.gradle파일에    'dependencies'부분에 추가 되어져 있어야 한다.

 

 

 

Posted by 농부지기
,

[ Android Studio - 모듈 추가하기 ]

 

1. 정의

    - Android Studio에서 모듈 추가하기

    - Android Studio에서 build.gradle 에  'dependencies'추가하기

 

2. 방법 1

    1. Files > Proejct Structure

    2. 왼쪽목록 : Moddules > app 선택

    3. [ Dependencies ] Tab 선택

    4. [ + ] 클릭

    5. [Library Dependencies] 선택

    6. 원하는 모듈명을 입력 하고   [OK]누르면  추가 됨

    7. 이 과정을 거치면 'build.gradle'파일에  ''dependencies'영역에 해당 모듈이 추가 된다.

 

3. 방법 2

     1. 단축키 : Ctrl + Alt + Shf + S 를 누르면 Project Struture 창이 뜸

     2. 이 다음부터는 위와 동일

 

4. 화면(과정)

 

 

 

 

 

Posted by 농부지기
,