I did not test well before posting previous code. This if statement works and the other does not.
if( ocicolumnscale($R, $i ) != 129 )
{
$int_decimal = ocicolumnscale($R, $i );
$int_length = ocicolumnprecision($R, $i) - $int_decimal;
}
(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)
oci_field_precision — Indica la precisión de un campo
Devuelve la precisión del campo dado por field
.
Para columnas FLOAT, la precisión no es cero y la escala es -127. Si la precisión es cero, entonces la columna es NUMBER. Otro número indica NUMBER(precisión, precisión).
statement
Un identificador de sentencia de OCI válido.
field
Puede ser un índice de campo (basado en 1) o un nombre.
Devuelve la precisión como un entero, o false
en caso de error.
Ejemplo #1 Ejemplo de oci_field_precision()
<?php
// Crear la tabla con:
// CREATE TABLE mytab (c1 NUMBER, c2 FLOAT, c3 NUMBER(4), c4 NUMBER(5,3));
$conn = oci_connect("hr", "hrpwd", "localhost/XE");
if (!$conn) {
$m = oci_error();
trigger_error(htmlentities($m['message']), E_USER_ERROR);
}
$stid = oci_parse($conn, "SELECT * FROM mytab");
oci_execute($stid, OCI_DESCRIBE_ONLY); // Use OCI_DESCRIBE_ONLY if not fetching rows
$ncols = oci_num_fields($stid);
for ($i = 1; $i <= $ncols; $i++) {
echo oci_field_name($stid, $i) . " "
. oci_field_precision($stid, $i) . " "
. oci_field_scale($stid, $i) . "<br>\n";
}
// Salidas:
// C1 0 -127
// C2 126 -127
// C3 4 0
// C4 5 3
oci_free_statement($stid);
oci_close($conn);
?>
Nota:
En versiones de PHP anteriores a la 5.0.0 se debe usar ocicolumnprecision() en su lugar. Este nombre aún se puede usar; se dejó como un alias de oci_field_precision() por razones de retrocompatibilidad. Sin embargo, este nombre es obsoleto y no se recomienda.
I did not test well before posting previous code. This if statement works and the other does not.
if( ocicolumnscale($R, $i ) != 129 )
{
$int_decimal = ocicolumnscale($R, $i );
$int_length = ocicolumnprecision($R, $i) - $int_decimal;
}
I've found that when using ocicolumnprecision or oci_field_precision it will not show you the decimal places if you are are reading from tables with decimals. You can use ocicolumnscale or oci_field_scale to find the decimal.
if( ocicolumnscale($R, $i ) > 0 )
{
$int_decimal = ocicolumnscale($R, $i );
$int_length = ocicolumnprecision($R, $i) - $int_decimal;
}