我在PLSQL中有一个函数,它使用字符串操作并返回VARCHAR2类型。
此功能中的一个变量是
result_key VARCHAR2 (4000) := '';
当它处理大量数据时,我会收到ORA-06502: PL/SQL: numeric or value error: character string buffer too small
错误。
好像我必须扩展我的result_key
变量。我看到的唯一解决方案是将result_key
声明为
result_key VARCHAR2 (8000) := '';
我想知道我是否可以在不声明result_key
的固定大小的情况下执行此操作。
答案 0 :(得分:4)
PL / SQL允许FruitModel.prototype = {
getFruit: function(fruit_id,callback) {
$.getJSON(this._api + fruit_id, function(data){
callback(data);
});
}
}
$(function(){
var fruits = new FruitModel("/fruit/");
fruits.getFruit(123, function(data){
console.log(data);
});
});
类型最多包含32,767个字节(请参阅here)。这可能足以满足您的需求。请注意,Oracle表中存储的数据限制为4,000(请参阅here)。 (在我看来,不同的长度似乎是一个残酷的恶作剧,虽然我理解其根本原因。)
通常,较长字符串的类型为varchar2()
- 字符较大的二进制对象。这些行为很像char / varchar,它们可以存储在表和PL / SQL变量中。一个缺点是,查看该值的最简单方法是将它们复制到PL / SQL中的CLOB
。
答案 1 :(得分:2)
对于PL / SQL中的varchar2变量,您必须声明其长度。请注意,它的实际长度始终是真实长度,因为它们只使用所需的空间。例如
result_key VARCHAR2 (4000) := 'test';
的长度为4,而不是4000.所以,如果你要使用大字符串并且不确定它们的大小(但确定它们没有达到极限) - 尽可能使用戈登已经提到的32767。但请记住,PL / SQL可以处理比SQL更大的字符串(4000),因此在尝试混合时应小心,例如将变量插入表中。如果您不确定他们的最大尺寸,并且他们可能会超过这个数量 - 请使用CLOB。
但是当使用CLOBS并将它们复制到varchar2时,为了避免您已经知道的错误,请始终使用dbms_lob.substr(),例如:
dbms_lob.substr(clob_name, [limit], [offset]);
dbms_lob.substr(clob_name, 4000, 1);
在此示例中- 从clob_name中提取前4000个字符