PROCEDURE proc_testLong( psSql long,Re_CURSOR OUT T_CURSOR) is
vssql varchar2(5000);
BEGIN
/*insert into t (t1)values(psSql);*/
vssql:='select * from t ';
open Re_CURSOR FOR vsSQL;
end proc_testLong;
上面是我写的 一个 测试 存储过程。给pssql传得值大于 32767 时 就报 “ORA-01460换请求无法实现或不合理” 错误,请问大家 怎么解决 ??是我数据库的问题吗?
vssql varchar2(5000);
BEGIN
/*insert into t (t1)values(psSql);*/
vssql:='select * from t ';
open Re_CURSOR FOR vsSQL;
end proc_testLong;
上面是我写的 一个 测试 存储过程。给pssql传得值大于 32767 时 就报 “ORA-01460换请求无法实现或不合理” 错误,请问大家 怎么解决 ??是我数据库的问题吗?
那是BLOB CLOB
Long就是varchar2(32767)
http://wsqwsq000.iteye.com/blog/1120667在这里面我看到了这样一句话:
“4、很多工具,包括SQL*Plus,处理LONG 数据类型都是很困难的。 ”
先说下1G的相关概念:
1K=1024bytes(字节)
1M=1K*1024=1024 *1024bytes(字节)
1G=1M*1024=1024*1024 *1024bytes(字节)那么2G=2*1024*1024 *1024bytes=2147483648 bytes(字节)
也就是说一个LONG类型的变量最多可以存储 2147483648个字节。
PROCEDURE proc_testLong( psSql long) is
vssql varchar2(5000);
BEGIN
vssql:='select * from t ';
end proc_testLong;报同样的错!
你的SQL 字符长度超过了32767报错,有什么不对的吗?
还是你觉得2G字节应该等于1G长度的varchar2?
莫非你一个字符占用64字节
没可能这么大啊
You use the LONG datatype to store variable-length character strings. The LONG datatype is like the VARCHAR2 datatype, except that the maximum size of a LONG value is 32760 bytes.You use the LONG RAW datatype to store binary data or byte strings. LONG RAW data is like LONG data, except that LONG RAW data is not interpreted by PL/SQL. The maximum size of a LONG RAW value is 32760 bytes.You can insert any LONG value into a LONG database column because the maximum width of a LONG column is 2147483648 bytes or two gigabytes. However, you cannot retrieve a value longer than 32760 bytes from a LONG column into a LONG variable.Likewise, you can insert any LONG RAW value into a LONG RAW database column because the maximum width of a LONG RAW column is 2147483648 bytes. However, you cannot retrieve a value longer than 32760 bytes from a LONG RAW column into a LONG RAW variable.
这个应该说的很明白,虽然long的容量很大,但是使用变量进行操作时,只能分段处理,每次最多处理32760个字节
” 谢谢。