我有一个MFC对话框程序通过ADO访问oracle数据库,数据库里面有一张product表,里面有id,name,price三个字段,对话框界面上面也有个列表,有三列,ID,名字,价格
我原来是通过ado执行select * from product,通过结果集指针来获取到查询的结果,然后插入到列表当中的
但是我现在有个需求就是我想把select * from product这句话放到存储过程当中,然后用ado来执行存储过程,来获取结果集,从而提取记录吧信息显示到对话框的列表当中
现在就遇到这个问题
1.这个存储过程该怎么写?
2.ADO该怎么调用执行这个存储过程并获取结果集?
我原来是通过ado执行select * from product,通过结果集指针来获取到查询的结果,然后插入到列表当中的
但是我现在有个需求就是我想把select * from product这句话放到存储过程当中,然后用ado来执行存储过程,来获取结果集,从而提取记录吧信息显示到对话框的列表当中
现在就遇到这个问题
1.这个存储过程该怎么写?
2.ADO该怎么调用执行这个存储过程并获取结果集?
存储过程设置一个out参数,在程序里面直接接收输出的参数
如果是9i以前的版本没有sys_refcursor,需要自己定义一个游标的类型。
具体示例如下:CREATE OR REPLACE Procedure sp_GetData(x_mycursor out sys_refcursor)
is
Begin
Open x_mycursor for Select * From Sys_User;
End sp_GetData;
_ConnectionPtr m_pConnection;(假设已经连接好了数据库)
_RecordsetPtr m_pRecordset;
_CommandPtr m_pCommand;
这三个智能指针
我按照你说的,准备好sql语句
CString strSql = "call sp_GetData(x_mycursor)";
然后通过
m_pRecordset->Open(strSql, (IDisatch*)m_pConnection, adOpenDynamic, adLockOptimistic, adCmdText);
来执行调用数据库中的存储过程,可是我该怎么来获取这条语句返回出的x_mycursor的游标呢?x_mycursor这个可是一个字符串啊没法接收从数据库出来的数据啊
第一个编译通过
create or replace procedure sp_test
(ref_cursor out sys_refcursor)
as
begin
open ref_cursor for select * from products;
end sp_test;第二个存储过程调用第一个的可是编译出现问题
create or replace procedure call_sp
as
ref_cursor sys_refcursor;
begin
call sp_test(ref_cursor);
end call_sp;编译时说"PLS-00103:出现符号"SP_TEST"在需要下列之一时::=.(@%;符号":="被替换为"SP_TEST"后继续"
我用的是PL/SQL Developer软件,一下不知道这该怎么解决了