ID: 41917 Updated by: [EMAIL PROTECTED] Reported By: nobleclem+phpbugs at gmail dot com Status: Open Bug Type: OCI8 related Operating System: Solaris PHP Version: 5.2.3 New Comment:
A new test has been merged and old tests updated. They will cause diffs until Tony merges the code change. The suggested fix is: --- php_oci8_int.h 29 Mar 2007 02:33:03 -0700 1.11.2.6.2.18 +++ php_oci8_int.h 06 Jul 2007 15:53:44 -0700 @@ -215,8 +215,8 @@ php_oci_define *define; /* define handle */ int piecewise; /* column is fetched piece-by-piece */ ub4 cb_retlen; /* */ - ub2 scale; /* column scale */ - ub2 precision; /* column precision */ + sb1 scale; /* column scale */ + sb2 precision; /* column precision */ ub1 charset_form; /* charset form, required for NCLOBs */ ub2 charset_id; /* charset ID */ } php_oci_out_column; /* }}} */ Previous Comments: ------------------------------------------------------------------------ [2007-07-06 22:12:51] [EMAIL PROTECTED] Although I can't reproduce the given testcase on Linux there is a bug here that stops other testcases working for me, and may cause a port specific difference in behavior for nobleclem's testcase. The datatypes of the scale and precision fields in php_oci_out_column (php_oci8_int.h) should be sb1 and s2 respectively. At the moment they are both ub2. This, for example, prevents the scale for a FLOAT column being displayed as -127. See table 6.8 in Oracle's OCI manual: http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14250/oci06des.htm#sthref949 @nobleclem, the scale and precision values returned by the OCI8 extension and Oracle's OCI library are the programmatic definitions of scale and precision, which are different to the user-level values given in the all_tab_columns table. @tony2001, I will commit a new testcase to PHP5 and 6, but will let you evaluate and merge the datatype fix. ------------------------------------------------------------------------ [2007-07-06 18:53:11] [EMAIL PROTECTED] PHP/OCI8 returns exactly what it got from OCIAttrGet(.., OCI_DTYPE_PARAM, .., .., OCI_ATTR_SCALE, ). If Oracle Client returns wrong information, we can't change or fix that. ------------------------------------------------------------------------ [2007-07-06 18:40:17] nobleclem+phpbugs at gmail dot com Description: ------------ When using oci_field_scale to obtain the value stored in all_tab_columns.data_scale in oracle for a field the value returned is that in all_tab_columns.data_scale multiplied by 256. Reproduce code: --------------- Assumptions: - field #2 is of type NUMBER(12,2) - all_tab_columns.data_precision is 12 - all_tab_columns.data_scale value is 2 Code: $conn = oci_connect('username', 'password'); $stmt = oci_parse($conn, "SELECT * FROM fees"); oci_execute($stmt); $field_number = 2; $scale = oci_field_scale( $stmt, $field_number ); Expected result: ---------------- $scale should be assigned the value of 2. Actual result: -------------- $scale is assigned the value of 512. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=41917&edit=1