oracle - 在 Oracle 中何时使用 vsize 函数而不是 length 函数的有用示例?

标签 oracle plsql

似乎 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

最佳答案

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

关于oracle - 在 Oracle 中何时使用 vsize 函数而不是 length 函数的有用示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/398664/

相关文章:

oracle - 我可以从 Oracle 中的 UPDATE 中获取结果消息吗?

mysql - 从 Oracle 到 MS-Access 再到 Mysql

oracle - Oracle中可变长度时空数据的动态数据库设计(需要架构设计)

oracle - 带有基于行类型的集合的 ANYDATA

sql - 正则表达式以任何顺序匹配字符串标记?

oracle - pl/sql 中的嵌套 PIPELINED 函数

sql - 在 SQL 中使用 AND 操作的多列数据集

oracle - 为什么我的 PL/SQL 中的 VARCHAR2 被转换为 LONG?

plsql - Oracle PL/SQL where 条件 : not equal to 0 or null

Oracle 序列 nextval 和 currval 令人困惑