Não, não é a mesma coisa.
- O comprimento da coluna é um metadado útil para desenvolvedores que criam telas.
- Ferramentas de consulta igualmente automáticas, como TOAD e SQL Developer, usam o comprimento da coluna ao renderizar resultados.
- O banco de dados usa o comprimento de uma variável ao alocar memória para coleções PL/SQL. À medida que a memória sai do PGA, o superdimensionamento da declaração da variável pode levar à falha de programas porque o servidor ficou sem memória.
- Existem problemas semelhantes com a declaração de variáveis únicas em programas PL/SQL, mas as coleções tendem a multiplicar o problema.
- Colunas superdimensionadas criam problemas para índices compostos. O seguinte está em um banco de dados com 8K blocos
....
SQL> create table t23 (col1 varchar2(4000), col2 varchar2(4000))
2 /
Table created.
SQL> create index t23_i on t23(col1,col2)
2 /
create index t23_i on t23(col1,col2)
*
ERROR at line 1:
ORA-01450: maximum key length (6398) exceeded
SQL>
Mas acima de tudo, os tamanhos das colunas são uma forma de verificação de erros. Se a coluna deve ter dez caracteres e algum processo autônomo está tentando carregar mil caracteres, algo está errado. O processo deve falhar, para que possamos investigar por que estamos carregando dados duff. A alternativa é um banco de dados cheio de lixo, e se era isso que se queria, deveríamos ter dado a todos o Excel e acabar com isso.
É verdade que alterar o tamanho da coluna quando subestimamos pode ser cansativo. Mas isso não acontece com muita frequência, e podemos mitigar muito da dor usando declarações %TYPE e SUBTYPE em nosso PL/SQL em vez de comprimentos variáveis de codificação.
Os números são diferentes. Para começar, o tamanho máximo de um número é muito menor que o equivalente em texto (38 dígitos de precisão garantida).
Mas a principal diferença é que o Oracle armazena valores numéricos em notação científica portanto, não há uma relação direta entre o tamanho aritmético do número e o espaço de armazenamento que ele consome.
SQL> select vsize(123456789012345678901) n1
2 , vsize(999999999999999999999999999999) n2
3 , vsize(0.000000000000000000001) n3
4 , vsize(1000000000000000000000000) n4
5 from dual
6 /
N1 N2 N3 N4
---------- ---------- ---------- ----------
12 16 2 2
SQL>
No entanto, continua sendo uma boa prática especificar escala e precisão sempre que possível, especialmente quando estamos lidando com números inteiros, digamos, ou dinheiro.