大虾救命啊:如何在存储过程中返回大于255的字符串?(150分)

  • 主题发起人 主题发起人 base1
  • 开始时间 开始时间
B

base1

Unregistered / Unconfirmed
GUEST, unregistred user!
我在存储过程中定义:
( userid in number,
positionstring out varchar2,
finish out varchar2
)
其中positionstring返回的字符串长度大于255,
我用SQL Navigator测试存储过程运行正常
但是用DELPHI程序调用时却发现positionstring的返回参数为空!
后来发现原来storeproc的参数返回小于255长度的字符串时完全正常,
<p><font color=red>大虾救命啊:如何在存储过程中返回大于255的字符串?</font></p>
我的storeproc参数设置如下:
p1:=Tparam.Create(params, ptinput);
Params[0].Name:='userid';
Params[0].DataType:=ftfloat;
Params[0].ParamType:=ptinput;
p2:=Tparam.Create(Params, Ptoutput);
Params[1].Name:='positionString';
Params[1].DataType:=ftString;
Params[1].ParamType:=ptoutput;
p3:=Tparam.Create(Params, Ptoutput);
Params[2].Name:='finish';
Params[2].DataType:=ftString;
Params[2].ParamType:=ptoutput;
Params[0].asinteger:=userid;
Execproc;
 
定义多个返回参数,依次截取255长度字符串返回
 
但是返回的字串长度是不定的呀!
所以我就不可能知道应该定义多少个输出参数...

我听说在delphi中用param[1].asmemo可以返回超过255字节的字串
但是试了一下,传出来的也为空,不知存储过程里是否也要作相应修改?
另外,如果字串长度超过四千呢?

我的数据库用的是oracle8
 
能大致说说程序怎么写吗?
 
用动态数组如何?
Var
DynArr: Array of Char;
 
动态数组我也曾经想过,实在没折就只好用这个.
但是这会使我的程序变得复杂,而且以前想的好多
相关联的方案也得重新调整
拜托各位大虾还有什么更好的良方吗?
 
:(
看来只好这样了
哪位大虾有知道解决方法的一定要告诉我呀
e-mail: wangrb@cattsoft.com
 
多人接受答案了。
 
后退
顶部