Ну, Length () принимает символьный аргумент (CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB или NCLOB), тогда как VSize () принимает практически любой тип данных, так что если вы передаете Length () тип данных нехарактерный быть неявным преобразованием.
Длина также чувствительна к наборам символов.
drop table daa_test;
create table daa_test as select sysdate dt from dual;
alter session set nls_date_format = 'YYYY-MM-DD';
select vsize(dt) from daa_test;
select length(dt) from daa_test;
alter session set nls_date_format = 'YYYY-MM-DD HH24:mi:ss';
select vsize(dt) from daa_test;
select length(dt) from daa_test;
... давая ...
drop table daa_test succeeded.
create table succeeded.
alter session set succeeded.
VSIZE(DT)
----------------------
7
1 rows selected
LENGTH(DT)
----------------------
10
1 rows selected
alter session set succeeded.
VSIZE(DT)
----------------------
7
1 rows selected
LENGTH(DT)
----------------------
19
1 rows selected
VSize действительно полезен IMHO для понимания требований к внутреннему хранилищу данных.