oracle clob参数类型的长度问题。
我写了一个function。返回一个clob类型的参数,然后在另一个存储过程里使用这个参数。当这个参数的长度在1万多的时候,没问题,但是超过1万3(大概)就会报错。ORA...
我写了一个function。返回一个clob 类型的参数, 然后在 另一个存储过程里使用这个参数。
当这个参数的长度在1万多的时候,没问题,但是超过1万3(大概)就会报错。
ORA—06502:PL?SQL 数字或值错误 这样的错误。请问是怎么回事?
/////////////////////////////////////////////////////////function ://///////////////////////////////////////////////////////////////
create or replace function Fun_GetRenerence(sqlwhere in nvarchar2) return CLOB
is
strsql CLOB;
strsql2 CLOB;
strsql3 CLOB;
type cur_type is ref cursor;
cur_test cur_type ;
begin
strsql := empty_clob();
strsql2 := empty_clob();
strsql3 := 'SELECT FormScores.Reference
FROM FormScores
JOIN ( SELECT Reference, MAX (CreateTime) AS beginCreateTime
FROM FormScores
GROUP BY Reference) b
ON (b.Reference = FormScores.Reference)
WHERE 1 = 1 '|| sqlwhere ;
dbms_output.put_line(strsql3);
open cur_test for TO_CHAR(strsql3);
loop
exit when cur_test % notfound ;
fetch cur_test into strsql2 ;
IF strsql2 is not null
then
begin
strsql := strsql ||''''|| strsql2||''',' ;
end;
end if;
end loop;
if strsql is not null
then
begin
strsql:=substr(strsql,0,LENGTH(strsql)-1);
end;
end if;
dbms_output.put_line(LENGTH(strsql));
return strsql ;
end ;
这是oracle定义的。没有办法 展开
当这个参数的长度在1万多的时候,没问题,但是超过1万3(大概)就会报错。
ORA—06502:PL?SQL 数字或值错误 这样的错误。请问是怎么回事?
/////////////////////////////////////////////////////////function ://///////////////////////////////////////////////////////////////
create or replace function Fun_GetRenerence(sqlwhere in nvarchar2) return CLOB
is
strsql CLOB;
strsql2 CLOB;
strsql3 CLOB;
type cur_type is ref cursor;
cur_test cur_type ;
begin
strsql := empty_clob();
strsql2 := empty_clob();
strsql3 := 'SELECT FormScores.Reference
FROM FormScores
JOIN ( SELECT Reference, MAX (CreateTime) AS beginCreateTime
FROM FormScores
GROUP BY Reference) b
ON (b.Reference = FormScores.Reference)
WHERE 1 = 1 '|| sqlwhere ;
dbms_output.put_line(strsql3);
open cur_test for TO_CHAR(strsql3);
loop
exit when cur_test % notfound ;
fetch cur_test into strsql2 ;
IF strsql2 is not null
then
begin
strsql := strsql ||''''|| strsql2||''',' ;
end;
end if;
end loop;
if strsql is not null
then
begin
strsql:=substr(strsql,0,LENGTH(strsql)-1);
end;
end if;
dbms_output.put_line(LENGTH(strsql));
return strsql ;
end ;
这是oracle定义的。没有办法 展开
2个回答
展开全部
错误的解释如下
$ oerr ora 6502
06502, 00000, "PL/SQL: numeric or value error%s"
// *Cause: An arithmetic, numeric, string, conversion, or constraint error
// occurred. For example, this error occurs if an attempt is made to
// assign the value NULL to a variable declared NOT NULL, or if an
// attempt is made to assign an integer larger than 99 to a variable
// declared NUMBER(2).
// *Action: Change the data, how it is manipulated, or how it is declared so
// that values do not violate constraints.
怀疑是你接收这个参数的过程所用的变量不能接受这么大的数值。
$ oerr ora 6502
06502, 00000, "PL/SQL: numeric or value error%s"
// *Cause: An arithmetic, numeric, string, conversion, or constraint error
// occurred. For example, this error occurs if an attempt is made to
// assign the value NULL to a variable declared NOT NULL, or if an
// attempt is made to assign an integer larger than 99 to a variable
// declared NUMBER(2).
// *Action: Change the data, how it is manipulated, or how it is declared so
// that values do not violate constraints.
怀疑是你接收这个参数的过程所用的变量不能接受这么大的数值。
追问
我也知道 不能接受。但是clob不是 号称4g的吗 ?为什么我才1万多长度就接受不了了呢?
追答
不是clob不能接受,是“另一个存储过程里使用这个参数”时不能接受,你的“另一个存储过程里使用这个参数”时是怎么用的?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询