Re: C datatypes VS Oracle datatypes

From: Jan H. Malmberg <jan.h.malmberg_at_softwind.se>
Date: 1996/02/17
Message-ID: <3125B8AE.3CF2_at_softwind.se>#1/1


Tomas Zakrzewski wrote:
>
> Hi!
>
> I am new to Oracle.
>
> I am programming in C using PRO*C.
> I have problem to handle data retrieved from Oracle.
> Example:
> datatype in Oracle of the field is varchar2[5].
>
> Retrieved data from Oracle are 5 characters long therefore they takes the
> whole space of the array. If I declare array size of 6 bytes then I can manipulate array with C library functions, but I can not update or
 insert back to Oracl
> that array. If I declare array of five bytes there is no problem with Oracle, but
> the string in C is not terminated by NULL.
>
> How this problem is handled. Do I have to maintain two copies of each string in case I want to
> update the Oracle. (one of the same size and second 1 byte larger for NULL use in C).
>
> Please share with your experience.
>
> Thanks.
>
> Tom Z.
>
> .
> The host variable should be declared one pos. longer then the database
field.

	Table
	EMP
	ename	varchar(10)

	C
	varchar		ename[11];  This is actually a structure and
                                    pro*c will declare arr and len as
                                    members of structure ename.
                 
				    Take a look in the .c-file
				    produced by pro*c.

	select ename into :ename from emp;

	ename.arr[ename.len] = '\0';

	Now the hostvariable is nullterminated and can be used in C.

	strcpy(ename.arr,"FRED");
	ename.len = strlen(ename.arr);

	The length of the string has to be calculated before the string
	is used in a SQL statment	

	insert into emp (ename) values (:ename);

In C the strings has to be nullterminated. Oracle looks for the length of the string when inserting/updating.

/JanH Received on Sat Feb 17 1996 - 00:00:00 CET

Original text of this message