C와 Oracle을 연동할때 Data길이를 어떻게 정하는지..

thisnome의 이미지

C -> Pro*C -> Oracle data
위에서 처럼 연동을 하게 되는데요..

문제는..
Data값의 최대 길이가 문자열로 16바이트라고 한다면, Oracle에서는 16자리로 넣고 (varchar2 (16)), C에서는 문자열 마지막의 Null을 포함해서 char[17] 로 잡을텐데, 중간 어디쯤에서 그걸 16으로 바꿔줄지가 의문입니다.

Pro*C에서

char c_data[17]; /* c로부터 입력받은 data */

EXEC SQL BEGIN DECLARE SECTION;
	VARCHAR	proc_data[16];
EXEC SQL END DECLARE SECTION;

strncpy((char *) proc_data.arr, c_data, 16);
proc_data.len = (unsigned short) strlen((char *)proc_data.arr);

위의 코드처럼 c에서 받은 c_data[17]을 proc_data[16]에 카피를 하는 경우 strncpy 에서는 넘어가더라도 strlen()에서 문제가 발생할 소지가 있기 때문에 이렇게 짜면 안될것 같구요..

그렇다면 Pro*C에서도 proc_data의 크기를 17로 잡아주어야 하는건지..
DB에서의 data 크기를 varchar2 (17)로 잡는것이 좋은지..

"정석적인 플레이" 를 알고 싶습니다.

ㅡ,.ㅡ;;의 이미지

thisnome wrote:
C -> Pro*C -> Oracle data
위에서 처럼 연동을 하게 되는데요..

문제는..
Data값의 최대 길이가 문자열로 16바이트라고 한다면, Oracle에서는 16자리로 넣고 (varchar2 (16)), C에서는 문자열 마지막의 Null을 포함해서 char[17] 로 잡을텐데, 중간 어디쯤에서 그걸 16으로 바꿔줄지가 의문입니다.

Pro*C에서

char c_data[17]; /* c로부터 입력받은 data */

EXEC SQL BEGIN DECLARE SECTION;
	VARCHAR	proc_data[16];
EXEC SQL END DECLARE SECTION;

strncpy((char *) proc_data.arr, c_data, 16);
proc_data.len = (unsigned short) strlen((char *)proc_data.arr);

위의 코드처럼 c에서 받은 c_data[17]을 proc_data[16]에 카피를 하는 경우 strncpy 에서는 넘어가더라도 strlen()에서 문제가 발생할 소지가 있기 때문에 이렇게 짜면 안될것 같구요..

그렇다면 Pro*C에서도 proc_data의 크기를 17로 잡아주어야 하는건지..
DB에서의 data 크기를 varchar2 (17)로 잡는것이 좋은지..

"정석적인 플레이" 를 알고 싶습니다.

varchar2 를 17로 잡으세요.
그러면 문제가 없습니다.
님이 코딩한것에서는

proc_data.len = (unsigned short) strlen(c_data);
로 하세요.

그러나.. varchar2에서 16으로 잡고한다는것은.. 스트링처리를 할수 없음으로
항상 메모리 자릿수를 생각하면서 해야합니다. 골치아프죠..


----------------------------------------------------------------------------

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.