请问在DELPHI中怎么调用ORACLE的存储过程返回数据集!!急!!另有50分相送!没完呢,怎么没人里了! (50分)

  • 主题发起人 主题发起人 dae
  • 开始时间 开始时间
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1321421
 
哇,原来有这么多资料啊,谢谢 沉香屑 了。
不过还有个问题啊,就是上面的程序,
就是我怎么才能把数据处理后再以记录的形式返回呢!可以吗?

 
呵呵 兄弟你也遇到这个问题了?
按照 沉香屑 大虾说的没错! 那是我以前的帖子。 [:)]
多亏了大虾的帮助才搞定的。

你用TADODataSet就可以将查询到的数据返回了!

这是服务端部分代码:-------
with ADODataSet do
begin
Close;
Connection:=ADOConnection;
CommandText:='{call SUBJECT_QUERY.SUBJECT_SELECT}';
CommandType:=cmdText;
Open;
end;

if ADODataSet.RecordCount<>0 then
begin
Subject_Array:=VarArrayCreate([0,ADODataSet.RecordCount-1],varVariant);
for i:=0 to ADODataSet.RecordCount-1 do
begin
//+--------------------------------------+
//| VarArrayOf生成二维数组,传递参数。 |
//+--------------------------------------+
Subject_Array:=VarArrayOf([ADODataSet['Code'],ADODataSet['Name']]); //VarArrayOf学科的名字
ADODataSet.Next;
end;
end;

我的实际操作中返回客户端的记录量是很少的,还不到20条。
 
恩,我知道是怎么用了。
****不过还有问题就是我想用的是返回处理后的数据!!!
****可以吗???
 
你的意思是回传给客户端吗? 可定义Variant数组。
这是服务端部分代码:-------
with ADODataSet do
begin
Close;
Connection:=ADOConnection;
CommandText:='{call SUBJECT_QUERY.SUBJECT_SELECT}';
CommandType:=cmdText;
Open;
end;

if ADODataSet.RecordCount<>0 then
begin
Subject_Array:=VarArrayCreate([0,ADODataSet.RecordCount-1],varVariant);
for i:=0 to ADODataSet.RecordCount-1 do
begin
//+--------------------------------------+
//| VarArrayOf生成二维数组,传递参数。 |
//+--------------------------------------+
Subject_Array:=VarArrayOf([ADODataSet['Code'],ADODataSet['Name']]); //VarArrayOf学科的名字
ADODataSet.Next;
end;
end;

我的实际操作中返回客户端的记录量是很少的,还不到20条。
 
哦,不是,不是,是我没说明白,请看我上面的过程(PROCEDURE BOMDETIAL),
就是我想在过程中把表中的数据取出来,然后有个计算方法,
比如说把取出的数加减乘除一下,然后在通过过程返回。
不知道可不可以这样处理。
 
兄弟,这你就在存储过程中处理就行了啊。
用PL/SQL 或用纯粹的SQL语句处理,等处理完毕得到你想要的结果再返回即可。
 
可是我要返回的还是结果集啊!
就是说在存储过程中要进行下面这些操作:
1。取出表的一条记录。
2。对取出的数据进行加工处理。
3。返回处理后的记录数据。
要求是在一个存储过程中取出表中的每一条记录,再返回每一条记录,不想生成临时表。
可以吗??
 
我已经明白怎么用ADO调用存储过程了,可是我想实现的目的是在存储过程中把每条数据
都处理一下,再以游标的方式返回,而不是只是一个select 语句。
我要实现的是下面这段程序的内容,不过我不知道怎么才能让他以数据集的形式返回。
CREATE OR REPLACE PROCEDURE BOMDETIAL(
ChildCode IN OUT varchar2,
ItemPro IN OUT varchar2,
EndAdd IN OUT varchar2
) IS
tCode varchar2(40);
tDept varchar2(10);
tProcess varchar2(40);
tEndadd varchar2(10);
Cursor SeleStruct is
select child_code from item_struct ;
Cursor SeleProcess is
select Dept_id from item_process where item_code = tCode;
BEGIN
OPEN SeleStruct ;
LOOP
FETCH SeleStruct INTO tCode;
EXIT WHEN SeleStruct %NOTFOUND;

BEGIN
tDept := '';
tProcess := '';
OPEN SeleProcess ;
LOOP
FETCH SeleProcess INTO tDept;
EXIT WHEN SeleProcess %NOTFOUND;
tProcess := tProcess || '-' || tDept;
END LOOP;
CLOSE SeleProcess ;
select end_address into tEndadd from item_process
where item_code = tCode and end_address is not null;
exception when no_data_found then
tEndadd := '-';
END;
ChildCode := tCode;
ItemPro := tProcess;
EndAdd := tEndadd;
END LOOP;
CLOSE SeleStruct ;
END;
/
或者是又什么其他的方式,我的目的就是在后台处理,提高速度,不想生成临时表。
 
没有办法的,oracle 不能返回一个结果集的,他返回结果集只能是view table,
oracle store procedure 和sybase ,SQL Server 不一样的!
你还是建立一张临时表,这个session 连上的时候创建,session 断开的时候删除就可以了 !
在你要这个结果集的时候多做一步,先执行proc 在打开#temptable
 
真的没解了?
我在过程中返回TABLE类型,可是delphi说不认识这个。
 
看来是没解了,散分!
先每人10分!
不够的请到http://www.delphibbs.com/delphibbs/dispq.asp?lid=1505389,还有50分!
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部