OraStoredProc,ORA-06502,ORA-06512,buffer too small 解决办法
我的解决思路,可供你参考
//一个参数有返回值
function TStoreProOCI.GetOneParam(FuncName: string; Param, Value: string):
string;
var
OraStoredProc1 : TOraStoredProc;
Str : string;
begin
OraStoredProc1 := TOraStoredProc.Create(nil);
try
OraStoredProc1.Session := FMyComDBConn.FSession;
OraStoredProc1.SQL.Add('begin');
Str := Format(':RESULT :=%s(:%s);', [FuncName, Param]);
OraStoredProc1.SQL.Add('end;');
OraStoredProc1.StoredProcName := FuncName;
OraStoredProc1.Params.CreateParam(ftString, 'Result', ptResult);
OraStoredProc1.Params.CreateParam(ftString, Param, ptInput);
OraStoredProc1.ParamByName(Param).Value := Value;
OraStoredProc1.Execute;
Result := OraStoredProc1.ParamByName('Result').AsString;
OraStoredProc1.Close;
finally
OraStoredProc1.Free;
end;
end;
当Result返回值,太长了,如超过8000,就会出现ORA-06502:PL/SQL:numeric or value error
ORA-06512,字符缓冲太小buffer too small
修改
OraStoredProc1.Params.CreateParam(ftString, 'Result', ptResult);
改为
OraStoredProc1.Params.CreateParam(ftMemo, 'Result', ptResult);
解决问题
//一个参数有返回值
function TStoreProOCI.GetOneParam(FuncName: string; Param, Value: string):
string;
var
OraStoredProc1 : TOraStoredProc;
Str : string;
begin
OraStoredProc1 := TOraStoredProc.Create(nil);
try
OraStoredProc1.Session := FMyComDBConn.FSession;
OraStoredProc1.SQL.Add('begin');
Str := Format(':RESULT :=%s(:%s);', [FuncName, Param]);
OraStoredProc1.SQL.Add('end;');
OraStoredProc1.StoredProcName := FuncName;
OraStoredProc1.Params.CreateParam(ftString, 'Result', ptResult);
OraStoredProc1.Params.CreateParam(ftString, Param, ptInput);
OraStoredProc1.ParamByName(Param).Value := Value;
OraStoredProc1.Execute;
Result := OraStoredProc1.ParamByName('Result').AsString;
OraStoredProc1.Close;
finally
OraStoredProc1.Free;
end;
end;
当Result返回值,太长了,如超过8000,就会出现ORA-06502:PL/SQL:numeric or value error
ORA-06512,字符缓冲太小buffer too small
修改
OraStoredProc1.Params.CreateParam(ftString, 'Result', ptResult);
改为
OraStoredProc1.Params.CreateParam(ftMemo, 'Result', ptResult);
解决问题