用 ADOQuery 来执行Oracle的存储过程,怎么得到该存储过程的输出参数?

xhtbx 2004-12-07 10:18:53
各位,我不想用TADOStoredProc控件,希望可以用ADOQuery执行带有输出参数的Oracle存储过程.
也查看了相关的帖子,可是按照帖子上面的做法,总是出问题,比如说:

Oracle的过程名字为Proc_Test,输入参数为param1 Varchar2(20),输出参数为param2 Varchar2(20)。


我是这样调用的,
with qrySetInResult do
begin
Close;
SQL.Text := 'EXEC Proc_Test param1,:param2 output';

ExecSQL;//用Open也试过了
showmessage(Trim(Parameters.ParamByName('param2').Value));
end;

调试的时候,总是提示:‘不正常的定义参数对象.提供了不一致或是不完整的信息.’.
我的感觉,通过TADOStoredProc用'EXEC Proc_Test param1,:param2 output'这种方式调用带输出参数的过程,好像当数据库是SQLSERVER时可以,但是并不适合Oracle.

希望各位高手能够给予指点。再说明一下:不使用TADOStoredProc控件,用ADOQuery执行带有输出参数的Oracle存储过程,先谢过了大家了。


...全文
361 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xhtbx 2004-12-11
  • 打赏
  • 举报
回复
兄弟姐妹们,给个面子,走过,路过,留下来看看吧
ailibuli 2004-12-10
  • 打赏
  • 举报
回复
人有多大胆、地有多大産。hehe

君自己慢慢試試看、有了結果告俺一声、俺給君分分...
xhtbx 2004-12-10
  • 打赏
  • 举报
回复
ailibuli(愛理不理) ,我知道TADOStoredProc控件该如何使用,以前也一直用TADOStoredProc调用存储过程,无论是有输出参数的,还是没有输出参数的,都是没问题的。
只是现在不想用它,想用ADOQuery,大家可能认为我不知道TADOStoredProc的用法,这一点大家就误会了。

ailibuli 2004-12-10
  • 打赏
  • 举报
回复
再说明一下:不使用TADOStoredProc控件,用ADOQuery执行带有输出参数的Oracle存储过程
======================================================================================
我也说明一下:使用TADOStoredProc控件、就可得到Oracle存储过程的输出参数

//-- 在執行前、先加参数定義
ADOStoredProc1.Parameters.Clear; //清空参数列表
with ADOStoredProc1.Parameters.AddParameter do //追加入参数
begin
Name := 'param1';
DataType := ftString;
Direction := pdInput; //in
Size := 20;
end;
with ADOStoredProc1.Parameters.AddParameter do //追加出参数
begin
Name := 'param2';
DataType := ftString;
Direction := pdOutput; //out
Size := 20;
end;

with ADOStoredProc1 do
begin
Prepared := True;
Parameters.ParamByName('param1').Value := 'a'; //入参
ExecProc; //執行
ShowMessage(Parameters.ParamByName('param2').Value); //出参
end;
smiler007 2004-12-09
  • 打赏
  • 举报
回复
本来用ADO来访问Oracle就会出现一些怪怪的问题的.....
访问Oracle还是用BDE比ADO好些,当然最好是用ODAC了.....
postfxj 2004-12-09
  • 打赏
  • 举报
回复
沒做過這樣的,用TADOStoredProc很好的呀。
xhtbx 2004-12-09
  • 打赏
  • 举报
回复
不会没人知道吧!!!高手帮帮忙,万分感谢!
xhtbx 2004-12-08
  • 打赏
  • 举报
回复
ljyt(罗云) ,试过了,不行的
ljyt 2004-12-07
  • 打赏
  • 举报
回复
语句错了。
with qrySetInResult do
begin
Close;
SQL.Text := 'Proc_Test';
//添加2个(TParameter)
//第2个(TParameter)的Direction属性设置为pdOutput 才行
ExecSQL;//用Open也试过了
showmessage(Trim(Parameters.ParamByName('param2').Value));
end;

2,507

社区成员

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

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