【发布时间】:2015-06-30 13:55:36
【问题描述】:
有没有办法声明一个具有所需大小的 varchar2 常量?
例如我希望有以下定义,而不必在括号中明确声明大小:
c_my_string constant varchar2(3) := 'abc';
有没有办法做类似的事情:
c_my_string constant varchar2(sizeof('abc')) := 'abc';
除此之外,我当然可以将常量定义为原始常量,然后使用 UTL_RAW.CAST_TO_VARCHAR2(my_raw); 即时将其转换为 varchar2
【问题讨论】:
-
这并不比你的第一行更短/更简单......为什么你想让声明比它真正需要的更复杂?
-
只有当常量与表列相关时,才可以设置最大大小,不能设置实际大小。为什么对硬编码字符串的长度进行硬编码是个问题?
-
这会很懒,但你可以使用
c_my_string long := 'abc';。请注意,PL/SQL 中的long只是varchar2(32760)的简写。 -
该引用似乎已被删除最新的 11g 文档和 12c 文档。 This might be useful though; 似乎这不再是 11gR2 的问题,而且您不会在示例中“浪费”这 9 个字节。不过测试结果可能很有趣。
-
您是否有内存/性能测试用例表明这是您的应用程序中的一个问题? PL/SQL 是一种相当高级的语言,AFAIK PL/SQL 编译器/运行时会自动处理所有内存预留。