5,386
社区成员
发帖
与我相关
我的任务
分享
原来是这样的
begin
AdoQuery2.Close ;
AdoQuery2.Parameters.Clear ;
AdoQuery2.SQL.Clear ;
AdoQuery2.SQL.Add('{call sp_test1(:c)}') ;
adoquery2.Parameters.ParamValues['c']:='1';
AdoQuery2.Open ;
end;
adoquery不经常用,你也可以使用ADODataSet1替换它
ADODataSet1.Close;
ADODataSet1.CommandType:= cmdStoredProc;
ADODataSet1.CommandText:='sp_test1';
ADODataSet1.Parameters.CreateParameter('c',ftString,pdInput,100,'1');
ADODataSet1.Open;
--测试数据
create table t1(c1 varchar2(100),c2 varchar2(100));
insert into t1 select '1','1' from dual union all select '2','1' from dual;
--测试存储过程oracle 9i 中可以使用sys_refcursor ,更低版本需要定义包在包中定义动态游标
create or replace procedure sp_test1(c t1.c2%type,rst out sys_refcursor) is
begin
open rst for select * from t1 where c2=c;
end;
--delphi测试
--使用ADOCommand1执行存储过程并将返回的结果集赋予ADOQuery1
ADOCommand1.CommandType:= cmdStoredProc;
ADOCommand1.CommandText:= 'sp_test1';
ADOCommand1.Parameters.CreateParameter('c',ftString,pdInput,100,'1');
ADOQuery1.Recordset:=ADOCommand1.Execute;