调用Oracle存储过程返回参数的问题

marcw 2008-01-10 03:15:33
需要在D7下用BDE的TStoredProc控件调用 Oracle 下的一个存储过程,存储过程返回一个varchar2型的参数 。

如下面的存储过程:
CREATE OR REPLACE PROCEDURE p_sync_get_change_detail(p_note_sql OUT VARCHAR2) AS
BEGIN
p_note_sql := 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
EXCEPTION
WHEN OTHERS THEN
p_note_sql := '';
END p_sync_get_change_detail;

现在出现的现象是如果 p_note_sql 返回的字符串小于等于 256节符时 D7下调用是正常的,如果 返回字符串大于 256 时则调用存储过程 跳到EXCEPTION节返回空字符串,而在PL/SQL 调用 存储过程返回都是正常的。

D7的调用代码 :
var
ANotSQL: string;
begin
with StoredProc1 do
try
StoredProcName := 'P_SYNC_GET_CHANGE_DETAIL';
Prepare;
ExecProc;
ANotSQL := ParamByName('p_note_sql').AsString;
ShowMessage(ANotSQL);
except
on E: Exception do
begin
Application.MessageBox(PChar('出错!' + e.Message), PChar(Application.Title), MB_OK + MB_ICONSTOP);
end;
end;
end;
这种现象怎么样来处理?

...全文
141 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
kshuangshuzhen 2008-01-11
  • 打赏
  • 举报
回复
同意3楼的
hongqi162 2008-01-11
  • 打赏
  • 举报
回复
如果你的字符串太大了,你可以使用clob来存储
hhnick 2008-01-10
  • 打赏
  • 举报
回复
看你的工程文件的option->complier->有一个Huge strings选项,它会限制string变量的长度,此选项选中,string变量是AnsiString,没有选中,是shortstring,长度只有255,还可以通过编译开关{$H}来控制
阿三 2008-01-10
  • 打赏
  • 举报
回复
用WideString
hsmserver 2008-01-10
  • 打赏
  • 举报
回复
用WideString

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧