VB调用ORACLE存储过程返回多记录集
一直没有写原创的习惯,每次都是从别的贴子拷贝过来。实在是不好意思。最近想把自己做的一个项目中所解决的问题和大家共享一下。希望对遇见这种情况的朋友有所帮助。
程序中要用到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调用的代码如下:用下面的两种方式都可以调用:
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
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存储过程返回多记录集相关推荐
- VB6:通过ADO访问Oracle存储过程返回的结果集
微软的MDAC中oledb for oracle 驱动--对过程参数:估计:位置绑定 该驱动最新支持到Oracle8i的水平,且不再更新了 使用该驱动.只能使用ODBC的存储过程调用方式: " ...
- Java(CallableStatement)调用Oracle存储过程返回结果集(ResultSet)
一:无返回值的存储过程调用 存储过程: CREATE OR REPLACE PROCEDURE PRO_1(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS BEGIN ...
- C#调用ORACLE存储过程返回结果集及函数
ORACLE段: 首先在ORACLE建立PACKAGE和PACKAGE BODY,将在这里面定义函数和存储过程返回结果集. 1:建立PACKAGE: CREATE OR REPLACE package ...
- vb.net调用oracle存储过程,今天搞好了VB.NET调用Oracle存储过程返回游标的问题
代码: Public Function GetData(ByVal procDate As String) As ArrayListTry Dim conn As New Oracle.DataAcc ...
- Java 调用 Oracle 存储过程返回结果集
1. 建立 ref cursor 类型和过程 Sql代码 CREATE OR REPLACE PACKAGE types AS TYPE ref_cursor IS REF CURSOR; END; ...
- Oracle 9i 返回一个记录集的方法
1.首先要创建一个包 Codecreate or replace package listdata is type MyCURSOR is REF CURSOR; PROCEDURE GetList( ...
- java调用ORACLE 存储过程返回值22
存储过程代码如下: create or replace package mysp is type refcursor is ref curs ...
- spring+springMvc+mybatis 调用oracle 存储过程
最近在项目中遇到在mybatis中调用oracle存储过程的问题,网上各种查询,最终解决了问题,在我们项目中我只需要oracle 的存储过程返回一个字符串用来存入数据库作为表数据的主键, 接下来整理代 ...
- oracle java存储过程返回值_java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)...
java程序调用Oracle 存储过程 获取返回值(无返回,非结 果集,结果集) oracle中procedure是不能有返回值的,要想返回值,就得有 输出参数,同样要想返回记录集,可以把游标类型作为 ...
最新文章
- 文件分布式存储实现例程
- linux安装并管理mysql数据库
- 【Flutter】Flutter 混合开发 ( Flutter 与 Native 通信 | 在 Flutter 端实现 EventChannel 通信 )
- android线程间通信的几种方法_Android 技能图谱学习路线
- python中rgb_python - 图像的RGB矩阵
- java 日期 年数_关于java:为什么不赞成使用“新日期(整数年,整数月,整数日)”?...
- 桌面虚拟化之应用程序的整合
- linux不能上网问题
- Springmvc与jasperreport结合生成报表的一种方法
- QT 播放器之VideoWidget
- 5V升压充电12.6V锂电池方案
- 晶振知识,及晶振振荡电路
- gcd euclid_使用EUCLID的算法找到两个数字的GCD(最大公约数)
- 灵媒阅读开始自学通灵
- 【安全知识分享】工程项目夏季、雨季、夜间、防汛施工安全培训教育(附下载)
- 完爆面试官!黑马学java学费多少
- IPv6进阶:IPv6 过渡技术之 NAT64(IPv6 节点主动访问 IPv4 节点-地址池方式)
- 图像设定阈值二值matlab,“图像类型转换II——使用“导入、导出和转换”中的“阈值法”转换为二值图像”,MATLABImageProcessingToolbox,入门教程,七,之...
- Linux网络配置后无法正常上网
- mac m1 prometheus安装与启动
热门文章
- PNG in IE - 1 - pngfix.js
- git统计每个人的代码行数_程序员实用工具,推荐一款代码统计神器GitStats
- Arcgis Javascript那些事儿(二)--要素画图编辑
- VBA中数组(Array)与随机数(Rnd)的使用
- golang控制台颜色输出(for windows)
- Eclipse智能感知功能优化
- DataSet运用DES加解密到Xml
- VueRouter基础知识记录1
- html的table效果,html的table用法(让网页的视觉效果显示出来)
- pythonjs设置_在节点js中设置env变量并在python脚本中使用