PHP Unconference Europe 2015

oci_field_precision

(PHP 5, PECL OCI8 >= 1.1.0)

oci_field_precisionIndica la precisión de un campo

Descripción

int oci_field_precision ( resource $statement , mixed $field )

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).

Parámetros

statement

Un identificador de sentencia de OCI válido.

field

Puede ser un índice de campo (basado en 1) o un nombre.

Valores devueltos

Devuelve la precisión como un entero, o FALSE en caso de error.

Ejemplos

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($stidOCI_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);

?>

Notas

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.

Ver también

add a note add a note

User Contributed Notes 2 notes

up
0
webmaster at smwebdesigns dot com
7 years ago
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;
}
up
0
webmaster at smwebdesigns dot com
7 years ago
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;
}
To Top