4

似乎 vsize() 和 length() 返回相同的结果。有谁知道何时使用 vsize 而不是长度的实际示例?

select vsize(object_name), length(object_name) from user_objects

结果:

/468ba408_LDAPHelper    20  20
/de807749_LDAPHelper    20  20
A4201_A4201_UK  14  14
A4201_PGM_FK_I  14  14
A4201_PHC_FK_I  14  14
4

2 回答 2

7

嗯,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 在理解数据的内部存储需求方面确实很有用。

于 2008-12-30T14:30:51.320 回答
2

请参阅:http ://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1897591221788

于 2008-12-29T21:28:01.883 回答