一直没有写原创的习惯,每次都是从别的贴子拷贝过来。实在是不好意思。最近想把自己做的一个项目中所解决的问题和大家共享一下。希望对遇见这种情况的朋友有所帮助。
      程序中要用到VB调用ORACLE的存储过程,存储过程返回的是多记录集。要是在C#中这种情况很好解决。但是到了VB中。情况就不一样了。在CSDN上也查了。都没有人说出完整的解决的解决方案。经过几天的摸索。终于搞定。下面是存储过程和相应的VB调用代码。
      存储过程如下:大家只需关心返回的记录集

存储过程
 1CREATE OR REPLACE PACKAGE BODY REPORT AS
 2  PROCEDURE  p_Report_Yysc_Zyq(strDate in date,v_result1 out t_cursor,v_result2 out t_cursor)
 3 is
 4     nCount   int;
 5     d_date    date;
 6 begin 
 7   
 8  open v_result1 for SELECT SSDW,sum(nvl(ZJS,0)) ZJS,sum(nvl(KJS,0)) KJS,sum(nvl(RCY,0)) RCY,sum(nvl(RC_Y,0)) RC_Y,sum(nvl(YLBH,0)) YLBH,sum(nvl(Y_LBH,0)) Y_LBH,sum(nvl(YCYL,0)) YCYL,sum(nvl(NCYL,0)) NCYL,round((1- (sum(nvl(RC_Y,0))/0.823/sum(nvl(RCY,0)))),3)*100 HS  FROM   REPORT_YYSC_ZYQ where TRUNC(rq)=TRUNC(d_date) and HZLX='1' group by SSDW;
 9  open v_result2 for select * from REPORT_YYSC_ZYQ where trunc(RQ)=trunc(strDate) and HZLX='1';
10 end p_Report_Yysc_Zyq;  

VB调用的代码如下:用下面的两种方式都可以调用:

VB调用存储过程1
 2Public Function ExecProcByODBC()Function ExecProcByODBC(ByVal ProcName As String, ByVal sDate As Date) As Variant
 3Dim mycmd As ADODB.Command
 4Set mycmd = New ADODB.Command
 5Dim rs As New ADODB.Recordset
 8mycmd.CommandText = "{call " + ProcName + "(?,{resultset 1, v_result1,v_result2})}"
 9 
10Set param = mycmd.CreateParameter("sDate", adDate, adParamInput, 16, sDate)
11mycmd.Parameters.Append param
14mycmd.CommandType = adCmdText
15
16rs.CursorType = adOpenStatic
17rs.LockType = adLockReadOnly
18
19Set mycmd.ActiveConnection = MyCnt
20Set rs.Source = mycmd
21rs.Open
22Set ExecProcByODBC = rs
23Set rs = Nothing
24Set mycmd = Nothing
25End Function
VB调用存储过程2
 2Public Function ExecProc()Function ExecProc(ByVal ProcName As String, ByVal sDate As Date) As Variant
 3Dim mycmd As ADODB.Command
 4Set mycmd = New ADODB.Command
 5Dim rs As New ADODB.Recordset
 6Dim rs1 As New ADODB.Recordset
 7Set mycmd.ActiveConnection = MyCnt
 8mycmd.CommandType = adCmdStoredProc
 9mycmd.CommandText = ProcName
10mycmd.Parameters.Append mycmd.CreateParameter("sDate", adDate, adParamInput, 16, sDate)
13Set rs = mycmd.Execute
25Set ExecProc = rs
26Set rs = Nothing
27Set mycmd = Nothing
28End Function

最后还要强调一点的时候,在写连接字符串的时候。务必如下。否则在用VB的NEXTRECORDSET会调用不成功。
strCnt = "Provider=OraOLEDB.Oracle.1;Password=1;Persist Security Info=True;User ID=1;Data Source=ORA92;PLSQLRSet=1"

转载于:https://www.cnblogs.com/chinhr/archive/2007/05/21/754040.html

VB调用ORACLE存储过程返回多记录集相关推荐

  1. VB6:通过ADO访问Oracle存储过程返回的结果集

    微软的MDAC中oledb for oracle 驱动--对过程参数:估计:位置绑定 该驱动最新支持到Oracle8i的水平,且不再更新了 使用该驱动.只能使用ODBC的存储过程调用方式: " ...

  2. Java(CallableStatement)调用Oracle存储过程返回结果集(ResultSet)

     一:无返回值的存储过程调用 存储过程: CREATE OR REPLACE PROCEDURE PRO_1(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS BEGIN ...

  3. C#调用ORACLE存储过程返回结果集及函数

    ORACLE段: 首先在ORACLE建立PACKAGE和PACKAGE BODY,将在这里面定义函数和存储过程返回结果集. 1:建立PACKAGE: CREATE OR REPLACE package ...

  4. vb.net调用oracle存储过程,今天搞好了VB.NET调用Oracle存储过程返回游标的问题

    代码: Public Function GetData(ByVal procDate As String) As ArrayListTry Dim conn As New Oracle.DataAcc ...

  5. Java 调用 Oracle 存储过程返回结果集

    1. 建立 ref cursor 类型和过程 Sql代码 CREATE OR REPLACE PACKAGE types AS TYPE ref_cursor IS REF CURSOR; END; ...

  6. Oracle 9i 返回一个记录集的方法

    1.首先要创建一个包 Codecreate or replace package listdata is type MyCURSOR is REF CURSOR; PROCEDURE GetList( ...

  7. java调用ORACLE 存储过程返回值22

    存储过程代码如下:     create   or   replace   package   mysp   is         type   refcursor   is   ref   curs ...

  8. spring+springMvc+mybatis 调用oracle 存储过程

    最近在项目中遇到在mybatis中调用oracle存储过程的问题,网上各种查询,最终解决了问题,在我们项目中我只需要oracle 的存储过程返回一个字符串用来存入数据库作为表数据的主键, 接下来整理代 ...

  9. oracle java存储过程返回值_java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)...

    java程序调用Oracle 存储过程 获取返回值(无返回,非结 果集,结果集) oracle中procedure是不能有返回值的,要想返回值,就得有 输出参数,同样要想返回记录集,可以把游标类型作为 ...

最新文章

  1. 文件分布式存储实现例程
  2. linux安装并管理mysql数据库
  3. 【Flutter】Flutter 混合开发 ( Flutter 与 Native 通信 | 在 Flutter 端实现 EventChannel 通信 )
  4. android线程间通信的几种方法_Android 技能图谱学习路线
  5. python中rgb_python - 图像的RGB矩阵
  6. java 日期 年数_关于java:为什么不赞成使用“新日期(整数年,整数月,整数日)”?...
  7. 桌面虚拟化之应用程序的整合
  8. linux不能上网问题
  9. Springmvc与jasperreport结合生成报表的一种方法
  10. QT 播放器之VideoWidget
  11. 5V升压充电12.6V锂电池方案
  12. 晶振知识,及晶振振荡电路
  13. gcd euclid_使用EUCLID的算法找到两个数字的GCD(最大公约数)
  14. 灵媒阅读开始自学通灵
  15. 【安全知识分享】工程项目夏季、雨季、夜间、防汛施工安全培训教育(附下载)
  16. 完爆面试官!黑马学java学费多少
  17. IPv6进阶:IPv6 过渡技术之 NAT64(IPv6 节点主动访问 IPv4 节点-地址池方式)
  18. 图像设定阈值二值matlab,“图像类型转换II——使用“导入、导出和转换”中的“阈值法”转换为二值图像”,MATLABImageProcessingToolbox,入门教程,七,之...
  19. Linux网络配置后无法正常上网
  20. mac m1 prometheus安装与启动

热门文章

  1. PNG in IE - 1 - pngfix.js
  2. git统计每个人的代码行数_程序员实用工具,推荐一款代码统计神器GitStats
  3. Arcgis Javascript那些事儿(二)--要素画图编辑
  4. VBA中数组(Array)与随机数(Rnd)的使用
  5. golang控制台颜色输出(for windows)
  6. Eclipse智能感知功能优化
  7. DataSet运用DES加解密到Xml
  8. VueRouter基础知识记录1
  9. html的table效果,html的table用法(让网页的视觉效果显示出来)
  10. pythonjs设置_在节点js中设置env变量并在python脚本中使用