如果我在PL/SQL存储过程中使用多个CLOB变量来存储许多长字符串,是否会出现性能问题?CLOB的长度也是可变的吗?相比使用varchar2和long,使用CLOB有哪些已知的限制和缺点?
CLOBs是长度可变的。上限取决于您使用的Oracle版本和数据库块大小。对于11G,限制为“4G * DB_BLOCK_SIZE参数的值”(来自11G PL/SQL语言参考)。在PL / SQL中,VARCHAR2值限制为32767字节。
我没有确切的关于CLOB与VARCHAR2在PL/SQL中相对性能的信息,简短的谷歌搜索也没有返回任何有用的结果。然而,我强烈怀疑VARCHAR2通常比CLOB表现更好(对于两者都可以存储的数据),因为它更简单。您可以很容易地设置一个测试来证明这一点,通过编写相同的简单程序一次使用VARCHAR2,一次使用CLOB,并运行每个1000次并比较总经过时间。Tom Kyte的Runstats实用程序在这里非常有帮助,并显示了Oracle资源方面的其他差异。注意:如果CLOB在所有字符数据大小方面都比VARCHAR2更好,Oracle可能会像他们对待LONG数据类型一样弃用VARCHAR2,但他们没有这样做。
CLOB变量基本上是指针,因此它们本身并不慢。问题在于访问CLOB的内容。根据我的经验:
dbms_lob
包是相当高效的。只需执行以下操作: