Re: Oracle8 and varchar

From: Date: Wed, 28 Jun 2000 13:11:46 +0000
Subject: Re: Oracle8 and varchar
References: 1 2 3 4 5  Groups: php.db 
Request: Send a blank email to php-db+get-691@lists.php.net to get a copy of this message
One last idea, in your ociexecute($stmt, OCI_DEFAULT); try using another OCI_xxx constant..... -Stathis. Olivier Lepretre wrote: > > Well ... > > I've tried the 3 options, my nls_language is set to american, the > ociFetchInto gives the same result and > when putting the optional parameter (size) in ocidefinebyname, it still > doest work ... > > Just to inform, I have the same problems with chars .... (ex CHAR(2) ) > > Thanks a lot > > If you have more ideas ... I'm looking for a solution since monday !! > > ----- Original Message ----- > From: "Rouvas Stathis" <rouvas@di.uoa.gr> > To: "Olivier Lepretre" <olivier.lepretre@afrilink.net> > Cc: <php-db@lists.php.net> > Sent: Wednesday, June 28, 2000 12:50 PM > Subject: Re: [PHP-DB] Oracle8 and varchar > > > Well, the code seems Ok to me. > > I have the following suggestions: > > > > 1) Check out the NLS_LANG env-var as suggested in previous posts. > > > > 2) Try the same using OCIFetchInto() call. As an example, here is a > > snippet of mine: > > $sel = "select portfname,usrtext,notify from afeportf where > > usrid=$usrid and portfid=$portfid and > > subportfid=$subportfid"; > > $stmt = ociparse($cone, $sel); @ociexecute($stmt); > > OCIFetchInto($stmt,&$result,OCI_NUM+OCI_RETURN_NULLS); > > $ui_portfname = decodestr($result[0]); > > $ui_usrtext = decodestr($result[1]); > > $ui_notify = decodestr($result[2]); > > > > 3) I think that the call to ocidefinebyname() takes a last argument of > > int. If you try it in PL/SQL stored procs you are obliged to also > > specify the length of the returning variable. > > From Ora manual > > > > <URL:http://aspasia.mm.di.uoa.gr/inet/orasupport/html804/server/a58241/ch10. > htm#5871>: > > > > <ora-manual> > > The following syntax is also supported for BIND_VARIABLE. The square > > brackets [] indicate an optional > > parameter for the BIND_VARIABLE function. > > > > DBMS_SQL.BIND_VARIABLE( > > c IN INTEGER, > > name IN VARCHAR2, > > value IN VARCHAR2 CHARACTER SET ANY_CS > > [,out_value_size IN INTEGER]); > > > > To bind CHAR, RAW, and ROWID data, you can use the following variations > > on the syntax: > > > > DBMS_SQL.BIND_VARIABLE_CHAR( > > c IN INTEGER, > > name IN VARCHAR2, > > value IN CHAR CHARACTER SET ANY_CS > > [,out_value_size IN INTEGER]); > > DBMS_SQL.BIND_VARIABLE_RAW( > > c IN INTEGER, > > name IN VARCHAR2, > > value IN RAW > > [,out_value_size IN INTEGER]); > > DBMS_SQL.BIND_VARIABLE_ROWID( > > c IN INTEGER, > > name IN VARCHAR2, > > value IN ROWID); > > </ora-manual> > > > > It seems strange to me that PHP does not require the same argument as it > > eventually calls OCI() functions. > > > > Hope that helps, > > -Stathis. > > > > > > Olivier Lepretre wrote: > > > > > > Hi Rouvas : > > > > > > This is the code. the column b.proc_desc is the varchar2(20) causing > problem (and all varchar2 fields are causing me the same problem). if the > value is for example GUIDE, the function strlen returns a size of 10 .... > but the real size is 5 .... After investigation, it appears that the string > is composed of G\0U\0I\0D\0E\0 .... strange isn't it ? > > > > > > The server is ORA/NT 8.0.5, client is on RH6.1 ORA8.0.x > > > > > > here is the source > > > > > > <?php > > > putenv("ORACLE_HOME=/app/oracle/product/8.0.5"); > > > putenv("ORACLE_SID=AFR1"); > > > > > > print "<HTML>\n"; > > > $conn = OCILogon("admafr1", "mypasswd","afr1"); > > > > > > $query= " select log_ldexec, log_lyproc, log_ldproc, > b.proc_desc \"DESC\" "; > > > $query.= " from afr_syslog a, afr_sysprocess b"; > > > $query.= " where a.proc_id=b.proc_id order by > log_ldexec"; > > > > > > $stmt = OCIParse($conn,$query); > > > > > > ocidefinebyname($stmt,"LOG_LDEXEC",&$vlog_ldexec); > > > ocidefinebyname($stmt,"LOG_LYPROC",&$vlog_lyproc); > > > ocidefinebyname($stmt,"LOG_LDPROC",&$vlog_ldproc); > > > ocidefinebyname($stmt,"DESC",&$vdesc); > > > > > > ociexecute($stmt, OCI_DEFAULT); > > > > > > print "<TABLE BORDER=\"0\" > > > Cellspacing=\"2\">"; > > > print "<TR bgcolor=\"DDDDDD\">"; > > > print "<TH> <FONT face=\"Arial\" > > > size=\"-1\"> &nbsp; > Execution Date &nbsp; </FONT></TH>"; > > > print "<TH> <FONT face=\"Arial\" > > > size=\"-1\"> &nbsp; > Process &nbsp; </FONT></TH>"; > > > print "<TH> <FONT face=\"Arial\" > > > size=\"-1\"> &nbsp; > size &nbsp; </FONT></TH>"; > > > print "<TH> <FONT face=\"Arial\" > > > size=\"-1\"> &nbsp; > Day processed &nbsp; </FONT></TH>"; > > > print "</TR>"; > > > print "<TR></TR>"; > > > > > > while (OCIFetch($stmt)) > > > { > > > print "<TR >"; > > > print "<TD align=\"center\"> <FONT > face=\"Arial\" size=\"-1\"> &nbsp; ".$vlog_ldexec." > </FONT></TD>\n"; > > > print "<TD> <FONT face=\"Arial\" > size=\"-1\">&nbsp;" .$vdesc."</FONT></TD>\n"; > > > print "<TD align=\"center\"> <FONT > face=\"Arial\" size=\"-1\">".strlen($vdesc)." > </FONT></TD>\n"; > > > print "<TD align=\"center\"> <FONT > face=\"Arial\" size=\"-1\"> ".$vlog_ldproc."</FONT> > </TD>\n"; > > > print "</TR>"; > > > } > > > OCIFreeStatement($stmt); > > > OCILogoff($conn); > > > print "</HTML>\n"; > > > ?> > > > > > > And the result is > > > > > > Execution Date Process size Day processed > > > > > > 23-JUN-00 Guide 10 174 > > > 23-JUN-00 Asr comp. 18 159 > > > 23-JUN-00 Asr comp. 18 160 > > > 23-JUN-00 Asr comp. 18 161 > > > 23-JUN-00 Asr comp. 18 162 > > > 23-JUN-00 CC Detecti 20 163 > > > 23-JUN-00 Asr comp. 18 164 > > > 23-JUN-00 Asr comp. 18 165 > > > 23-JUN-00 Asr comp. 18 166 > > > 23-JUN-00 Asr comp. 18 167 > > > 23-JUN-00 Asr comp. 18 168 > > > 23-JUN-00 Asr comp. 18 169 > > > 23-JUN-00 Asr comp. 18 170 > > > 23-JUN-00 Asr comp. 18 171 > > > 23-JUN-00 Asr comp. 18 172 > > > 23-JUN-00 Asr comp. 18 173 > > > 23-JUN-00 Asr comp. 18 174 > > > 24-JUN-00 Load 9F 14 175 > > > 24-JUN-00 Load 9F 14 175 > > > 24-JUN-00 Load 8A 14 173 > > > > > > If you have any idea ... > > > > > > thanks in advance. > > > > > > ----- Original Message ----- > > > From: "Rouvas Stathis" <rouvas@di.uoa.gr> > > > To: "Olivier Lepretre" <olivier.lepretre@afrilink.net> > > > Cc: <php-db@lists.php.net> > > > Sent: Wednesday, June 28, 2000 12:08 PM > > > Subject: Re: [PHP-DB] Oracle8 and varchar > > > > > > > What exaclty ar you doing? Some code would be useful. I haven't > > > > encoutered any problems so far. > > > > I've used NT/Ora8i, Solaris/Ora.8.0.xx and SuSE/Ora.8.0.xx so far with > > > > no problems. > > > > -Stathis. > > > > > > > > > > > > Olivier Lepretre wrote: > > > > > > > > > > When I fetch a column of type varchar2 with php3, php is returning > only the halfsize of the column, one caracter on two is a \0. The result is > always truncated to the size of the column, but including the \0s. > > > > > > > > > > Exemple : column toto is varchar2(10) containing ABCDEFGHIJ > > > > > > > > > > Php is returning : A\0B\0C\0D\0E\0 wich is print ABCDE ... It misses > the five last letters because Php had already count 10 chars .... > > > > > > > > > > Could anyone help me, I don't want to double the size of all my > varchars fields !!! > > > > > > > > > > Thanks a lot > > > > > > > > > > __________________ > > > > > Olivier Lepretre > > > > > Afrilink Belgium S.A. > > > > > IT Manager > > > > > > > > -- > > > > +-----------------------------+ > > > > |Rouvas Stathis | > > > > |University of Athens | > > > > |Department of Informatics | > > > > |http://www.di.uoa.gr/~rouvas | > > > > |rouvas@di.uoa.gr | > > > > +-----------------------------+ > > > > > > > > -- > > > > PHP Database Mailing List (http://www.php.net/) > > > > To unsubscribe, e-mail: php-db-unsubscribe@lists.php.net > > > > For additional commands, e-mail: php-db-help@lists.php.net > > > > To contact the list administrators, e-mail: > php-list-admin@lists.php.net > > > > > > > > -- > > +-----------------------------+ > > |Rouvas Stathis | > > |University of Athens | > > |Department of Informatics | > > |http://www.di.uoa.gr/~rouvas | > > |rouvas@di.uoa.gr | > > +-----------------------------+ > > > > -- > > PHP Database Mailing List (http://www.php.net/) > > To unsubscribe, e-mail: php-db-unsubscribe@lists.php.net > > For additional commands, e-mail: php-db-help@lists.php.net > > To contact the list administrators, e-mail: php-list-admin@lists.php.net > > -- +-----------------------------+ |Rouvas Stathis | |University of Athens | |Department of Informatics | |http://www.di.uoa.gr/~rouvas | |rouvas@di.uoa.gr | +-----------------------------+

« previous php.db (#691) next »