본문 바로가기

IT50

오라클에서 길이가 없는 문자열은 null 이다. 오라클에서 길이가 없는 문자열(aka empty string, white space, blank)은 null 로 취급된다. 즉, 필드에 들어있는 값이나 '' 문자 또는 함수가 반환하는 값이 길이가 없는 문자열이라면 null 로 취급된다는 것이다. 이러한 특징은 여타 DBMS 와 다른 특징이므로 매우 주의해야 할 점이다. 몇가지 예를 통해 오라클에서 길이가 없는 문자열을 null 로 취급하고 있음을 확인해보자. 1. NVL NVL(expr1, expr2) 함수는 expr1이 null 이 아니면 expr1을 그대로 반환하고, null 이면 expr2을 반환한다. NVL 을 이용해 null 이면 길이가 없는 문자열을 반환하도록 다음과 같이 쿼리를 작성하고 테스트해보면 SELECT NVL(null, '') FR.. 2011. 7. 1.
두 문자열의 유사도 측정방법 뜻이 정반대인 "I love you" 라는 문자열과 "I hate you" 라는 문자열의 유사도는 어떻게 구할까? 스펠링검사, 표절검사 같은 분야에 사용되어지는 Levenshtein distance algorithm (A.K.A edit distance)을 이용하여 문자열의 유사도를 측정해보자. 1. 원리는 간단하다. 비교 대상이 되는 두 문자열을 각 a, b 라 할 때, a를 b로 수정하는데 필요한 문자의 추가, 삭제, 수정 횟수를 덧셈하면 그것이 곧 유사도가 된다.. 즉, "I love you"가 "I hate you"가 되기 위해선 I love you ↓↓↓ I hate you "lov" 세글자가 "hat" 로 수정되야 한다. 문자바뀜횟수는 3회이고 따라서 레벤시테인 거리 알고리즘에 의한 유사도는 .. 2011. 3. 9.
[iBATIS 2.x] insert 성공 여부 판단 1. insert 전에는 추가할 레코드의 기본키가 무엇이 될 지 모르는 경우 selectKey 를 이용해 추가된 레코드의 기본키를 반환 받아 확인한다. iBATIS 2.x 의 insert 메서드는 selectKey 와 함께 쓰일 경우 기본키 객체에 추가된 레코드의 기본키를 넣어 반환한다. ProductDao.java public class ProductDao { SqlMapClient sqlMapClient; public boolean insertProduct(Product product) { Integer id = (Integer) sqlMapClient.insert(“insertProduct”, product); return id > 0; // product.productId 에도 같은 값이 저장됨 .. 2010. 11. 18.
[iBATIS 2.x] 트랜잭션 동시성 문제 있을까? A, B 두개의 작업이 있다. 두 작업은 같은 SqlMapClient 객체를 통해 DB에 엑세스 한다. A 는 10000개의 insert를 일괄처리하고, B 는 1개의 insert를 처리하는데, 만일 A가 트랜잭션중일때 B가 실행되어 예외가 발생한다면 A 작업이 롤백 될까? 다음은 테스트코드다. import iMonES.Daemon.Main.CiMonESMain; import java.sql.SQLException; import com.ibatis.sqlmap.client.SqlMapClient; import common.manager.DBConnection; public class Test { private SqlMapClient sqlMapClient = DBConnection.getSqlMapCli.. 2010. 11. 16.