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