Xplatform2020. 5. 22. 08:44

xplatform을 사용하다 보니, 굉장히 불편한 것들 중에 하나가 null값을 체크하는 것이다.

매핑 되어있는 값이 null 값이면 undefined 값을 가져와서 dataset에서 값을 가져올 경우 따로 예외처리를

해야 하는 경우가 굉장히 많다.

 

var a = ds_init.getColumn(0, "a");

 

이와 같이 a값이 없으면 null로 가져오게 되는데 이걸 가지고 값을 사용하게 되면 undefined로 표시된다.

이걸 해결하기 위해서 따로 null인지 체크해서 empty값으로 변경 하는 경우를 많이 하게 된다.

 

Tobe소프트에 문의해도 이게 기본이라, 따로 처리 해야한다는 답변 뿐이다.

 

그래서 따로 함수를 만들어서 쓰는 경우가 많다.

 

function fn_isNull( sValue) {

    if( ("x"+sValue == "xNaN") && ( new String(sValue.length).valueOf() == "undefined")) return true;

    if (sValue == null) return true;

    var v_ChkStr = new String(sValue);

    if (v_ChkStr == null) return true;

    if (v_ChkStr.toString().length == 0 ) return true;

    return false;

}

위와 같이 null값인지를 체크해서 null이면 true, 아니면 false 를 리턴하는 함수이다.

또 막상 이 함수만 쓰려니, 예외 처리로

 

if(fn_isNull(a)) {

    a = "";

}

이런식으로 따로 처리를 해줘야 한다. 이것도 매번 하다보니, 너무 귀찮아져서..

 

function fn_NullToEmpty(sValue)
{
    if( utlf_isNull(sValue) )
    {
        return "";
    }
    return sValue;
}

이런식으로  null일 경우에는 ""으로 바로 처리되게끔 사용한다.

 

 

Posted by 달려라곰간지
DB2020. 5. 21. 17:27

대용량 테이블에서 특정 설명 컬럼에서 값을 조회할 때 사용되는 index다.

 

create index 인덱

스명 on 테이블명(컬럼명) indextype is ctxsys.context;

위와 같은 식으로  text 인덱스를 사용한다.

 

데이터 건수가 엄청 많은 테이블에서 text 내용을 검색할 때 유리하다.

 

총 3400만건의 데이터에서 Dox라는 검색어로 조회를 하니

19초 가량이 걸렸다.

 

contains 함수를 이용하여, Dox 검색어를 조회하니. 0.7초의 조회 결과가 나온다.

생각보다 괜찮은 것 같다.

 

결과값이 달라서 확인해보니, contains 함수는 대소문자 구분없이 검색을 하는 듯 하다.

위에 쿼리에 upper 함수를 사용해서 조회를 해보니 245760이 나왔는데.

시간은 36초 걸렸다.

 

단 요즘에, 18c 오라클에서 같은 트랜잭션 내에서 서로 다른 DB 업데이트를 하는 경우가 있을 때

text index가 설정된 곳에서 분산트랜잭션 오류가 발생하는 경우가 많이 있다.

 

DBA에게 문의도 해보고 하지만 아직 확실한 결과를 얻지 못했다.

대용량 텍스트 검색에서 사용하면 유용할 듯 싶다.

 

'DB' 카테고리의 다른 글

오라클 instr, substr을 이용한 특정문자열 자르기.  (0) 2020.05.21
오라클 merge  (0) 2020.05.21
두 날짜 시간의 차 구하기..  (0) 2013.07.30
오라클 Outer 조인시 주의점.  (0) 2013.07.09
Posted by 달려라곰간지
DB2020. 5. 21. 10:56

일을 하다보니. 특정 항목이 varchar형이라, 숫자만이 아니라, 숫자(문자) 형식으로 들어오는 경우가 종종 있다.

 

예를 들어 아기 몸무게 항목 값에

g)   1200,  1400,  1500 이런식으로 대부분 입력이 되지만

업무하는 부서 특성상 1200(+30) 이런식으로 증가값을 더 입력해서

업무적으로 눈에 띄게끔 하는 부서들이 가끔 있다.

 

몸무게를 kg으로 변환해서 연동하는 경우에. 오류가 발생한다.

1200(+30)이 문자열이기에 발생한다.

 

이런 경우가 생길 때, 1200(+30) 에서 1200의 값만 잘라야 하는 경우가 생긴다.

 

이런경우에 instr, substr을 이용해서, 데이터를 잘라낼 수 있다.

 

select substr('1200(+30)', 0, instr('1200(+30)', '(') -1)
  dual

;

 

instr함수를 이용해서 '(' 문자열의 위치를 찾아

substr함수로 처음부터 찾은 위치 이전까지의 문자를 잘라, 1200의 값만 가져온다.

'DB' 카테고리의 다른 글

text index, contains  (0) 2020.05.21
오라클 merge  (0) 2020.05.21
두 날짜 시간의 차 구하기..  (0) 2013.07.30
오라클 Outer 조인시 주의점.  (0) 2013.07.09
Posted by 달려라곰간지