Background Image
응용개발
2008.11.21 17:31

embedded sql 에서 char 사용시 주의 사항

조회 수 19007 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
embedded sql 에서 host variable 을 사용할 경우 char type 에 대하여 where 절에 사용시 주의하여야 합니다.
비교하고자 하는 대상의 정확한 length(스키마상의 length)를 알아내고 host variable 상의 실제 데이터의 length(strlen) 이 비교대상의 스키마상의 length 보다 작은 경우 나머지는 공백으로 채워주어야만 정확한 비교 결과를 만들어 냅니다.
즉, name char(10) 일 경우 where name = :name 에서 strcpy(name, ‘1234’) 는 결과가 없지만 strcpy(name, ‘1234      ‘) 는 결과가 나올 수 있게 됩니다.

아래는 테스트를 위한 SQL 입니다.
create class t ( name char(10), addr varchar(10))
insert into t values(''''1234'''', ''''1234'''')
name                  addr
============================================
''''1234      ''''          ''''1234''''

아래는 예제 C source 입니다.
#include <stdio.h>

main()
{
        exec sql begin declare section;
                char    c[10];
                VARCHAR vc[10];
                char    rtn[10];
        exec sql end declare section;

        uci_startup("test");
        exec sql connect ''''demodb'''';

        strcpy(c, "1234");
        exec sql declare c0 cursor for
                select name from t where name = :c;
        exec sql open c0;
        exec sql fetch c0 into :rtn;
        printf("0. where char=(%s) : result count=%dn", c, SQLERRD[2]);
        exec sql close c0;

        strcpy(c, "1234      ");
        exec sql declare c1 cursor for
                select name from t where name = :c;
        exec sql open c1;
        exec sql fetch c1 into :rtn;
        printf("1. where char=(%s) : result count=%dn", c, SQLERRD[2]);
        exec sqlx close c1;

        strcpy(c, "12");
        exec sqlx declare c2 cursor for
                select name from t where substr(name,1,2) = :c;
        exec sqlx open c2;
        exec sqlx fetch c2 into :rtn;
        printf("2. where substr(char,1,2)=(%s) : result count=%dn", c, SQLERRD[2]);
        exec sql close c2;

        strcpy(c, "12        ");
        exec sql declare c3 cursor for
                select name from t where substr(name,1,2) = :c;
        exec sql open c3;
        exec sql fetch c3 into :rtn;
        printf("3. where substr(char,1,2)=(%s) : result count=%dn", c, SQLERRD[2]);
        exec sql close c3;

        strcpy(vc.array, "1234");
        exec sql declare c4 cursor for
                select name from t where addr = :vc;
        exec sql open c4;
        exec sql fetch c4 into :rtn;
        printf("4. (NO vc.length) where varchar=(%s) : result count=%dn", vc.array, SQLERRD[2]);
        exec sql close c4;

        strcpy(vc.array, "1234");
        vc.length = strlen(vc.array);
        exec sql declare c5 cursor for
                select name from t where addr = :vc;
        exec sql open c5;
        exec sql fetch c5 into :rtn;
        printf("5. where varchar=(%s) : result count=%dn", vc.array, SQLERRD[2]);
        exec sql close c5;

        strcpy(vc.array, "1234      ");
        vc.length = strlen(vc.array);
        exec sql declare c6 cursor for
                select name from t where addr = :vc;
        exec sql open c6;
        exec sql fetch c6 into :rtn;
        printf("6. where varchar=(%s) : result count=%dn", vc.array, SQLERRD[2]);
        exec sql close c6;

        strcpy(vc.array, "12");
        exec sql declare c7 cursor for
                select name from t where substr(addr,1,2) = :vc;
        exec sql open c7;
        exec sql fetch c7 into :rtn;
        printf("7. where substr(varchar,1,2)=(%s) : result count=%dn", vc.array, SQLERRD[2]);
        exec sql close c7;

        exec sql disconnect;
}


아래는 실행결과입니다.
0. where char=(1234) : result count=0
1. where char=(1234      ) : result count=1
2. where substr(char,1,2)=(12) : result count=0
3. where substr(char,1,2)=(12        ) : result count=1
4. (NO vc.length) where varchar=(1234) : result count=1
5. where varchar=(1234) : result count=1
6. where varchar=(1234      ) : result count=1
7. where substr(varchar,1,2)=(12) : result count=1

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
36 응용개발 PHP에서 Prepared statement 사용시 NULL 값을 바인딩 하는 방법 1 Prototype 2009.11.27 19719
35 응용개발 CUBRID R3.0부터 JDBC를 사용하는 응용에서 charset 설정 방법이 변경되었네요. 손승일 2010.12.02 19631
34 응용개발 ODBC 드라이버를 이용한 Prepare 사용하기. seongjoon 2009.06.16 19587
33 응용개발 CUBRID2008 Java Stored Procedure 등록 방법 cubebridge 2010.02.24 19559
32 응용개발 PHP PEAR extension 을 이용한 DB Time 추적 웁쓰 2009.07.01 19182
31 응용개발 JDBC 커넥션 스트링에 UTF-8 명시하는법 Prototype 2009.07.03 19016
» 응용개발 embedded sql 에서 char 사용시 주의 사항 admin 2008.11.21 19007
29 응용개발 CUBRID에서 제약조건(PK,FK,UNIQUE),index 설정 시 주의 사항 cubebridge 2009.11.26 18884
28 응용개발 MySQL의 Blob타입을 CUBRID로 변환하기 cubebridge 2009.11.18 18849
27 응용개발 그루비로 큐브리드 함수(or 프로시저) 만들기 by 행복개발자(cyberuls) 시난 2009.07.14 18753
26 응용개발 cubrid_fetch_all() php 함수로 만들어 사용하기 file 시난 2009.06.30 18619
25 응용개발 패키지 형태로 생성된 JAVA class를 JAVA SP에서 사용하기 손승일 2010.02.26 18371
24 응용개발 Java Data Type의 CUBRID Data Type으로의 변경 Tip cubebridge 2009.06.16 18026
23 응용개발 JAVA SP를 통해 다른 데이터베이스 연결하는 경우 잊지 말자. 손승일 2009.12.16 17975
22 응용개발 PHP 성능 최적화를 위한 고려 사항 웁쓰 2009.07.01 17410
21 응용개발 CUBRID-PHP-Driver 연동가이드 file cubebridge 2012.11.13 17135
20 응용개발 PHP PEAR extension Cache-Lite 를 이용한 응용 프로그램 최적화 file 웁쓰 2009.07.01 17038
19 응용개발 CUBRID의 Statement pooling기능 cubebridge 2009.11.06 16940
18 응용개발 오라클 to CUBRID로 마이그레이션 수행 시 주의사항 cubebridge 2012.11.12 16636
17 응용개발 PHP에 CUBRID 모듈 추가시 모듈이 로드되지 않는 문제에 대한 해결 방안 하나입니다 남재우 2010.07.01 16556
Board Pagination Prev 1 2 3 Next
/ 3

Contact Cubrid

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