Just a note regarding the size of Oracle  NUMBERS will always return 22 as their "size".
This seems to be an Oracle feature. The rest of the documentation is in bug5156.(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)
oci_field_size — Retorna o tamanho do campo
   Retorna o tamanho da coluna informada em column.
  
statementUm identificador de instrução OCI válido.
columnPode ser o índice do campo (baseado em 1) ou o nome.
   Retorna o tamanho de column em bytes, ou false em caso de falha
  
Exemplo #1 Exemplo de oci_field_size()
<?php
// Crie a tabela com:
//   CREATE TABLE mytab (number_col NUMBER, varchar2_col varchar2(1),
//                       clob_col CLOB, date_col DATE);
$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 se não estiver buscando linhas
echo "<table border=\"1\">\n";
echo "<tr>";
echo "<th>Nome</th>";
echo "<th>Tipo</th>";
echo "<th>Comprimento</th>";
echo "</tr>\n";
$ncols = oci_num_fields($stid);
for ($i = 1; $i <= $ncols; $i++) {
    $column_name  = oci_field_name($stid, $i);
    $column_type  = oci_field_type($stid, $i);
    $column_size  = oci_field_size($stid, $i);
    echo "<tr>";
    echo "<td>$column_name</td>";
    echo "<td>$column_type</td>";
    echo "<td>$column_size</td>";
    echo "</tr>\n";
}
echo "</table>\n";
// Resultado:
//    Nome           Tipo       Comprimento
//    NUMBER_COL    NUMBER        22
//    VARCHAR2_COL  VARCHAR2       1
//    CLOB_COL      CLOB        4000
//    DATE_COL      DATE           7
oci_free_statement($stid);
oci_close($conn);
?>
Just a note regarding the size of Oracle  NUMBERS will always return 22 as their "size".
This seems to be an Oracle feature. The rest of the documentation is in bug5156.