调用带参数的存储过程,并返回结果集--oracle
2010-11-23 00:29
591 查看
调用插入数据的存储过程:
其中连数据库的函数为:
在vc中调用这个包中的存储过程,调用方法:包名.存储过程名(参数1, 参数2, ...):
通过CRecordSet的Open()方法可以返回结果集,再进行遍历。这里用到了一些自定义的函数,因为相对简单,所以未给出。这里的调用是adCmdText,而不是adCmdStoredProc
// 调用存储过程来插入一条记录 BOOL CDBTestAppDlg::InsertRecord() { CAdoParameter param1, param2, param3; CAdoCommand comm; if(ConnTODB()) { comm.SetConnection(m_pConnection); param1.SetSize(20); param1.SetName("C_Name"); param1.SetDirection(adParamInput); param1.SetType(adVarChar); // varchar2 param1.SetValue((CString)"hello113"); // 这里必须用类型转换,默认的参数类型为bool,所以转换会出错 comm.Append(param1.GetParameter()); param2.SetName("C_Age"); param2.SetDirection(adParamInput); param2.SetType(adInteger); // Integer param2.SetValue(21); comm.Append(param2.GetParameter()); param3.SetName("C_ExeTime"); param3.SetDirection(adParamInput); param3.SetType(adVarChar); // varchar2 param3.SetValue((CString)"2010-1-10"); comm.Append(param3.GetParameter()); comm.SetCommandText("Proc_Insert"); comm.SetCommandType(adCmdStoredProc); try { comm.Execute(); MessageBox("Procedure execute success!", "执行成功", MB_OK | MB_ICONINFORMATION); return TRUE; } catch (CException* e) { char errorMessage[256]; e->GetErrorMessage(errorMessage, 255); MessageBox(errorMessage); } } return FALSE; }
其中连数据库的函数为:
为了返回结果集,首先要建立一个包,再建立一个包体,代码如下: CREATE OR REPLACE Package pkg_GetResult as Type myResult is REF CURSOR; -- 定义返回值类型 Procedure getResult(age number, pResult out myResult); -- 声明pResult为输出的结果集变量 end pkg_GetResult; / CREATE OR REPLACE Package Body pkg_GetResult as Procedure getResult(age number, pResult out myResult) IS sqlstr varchar2(200); begin if age = 0 then open pResult for Select C_ID, C_Name, C_Age, C_InTime, C_Salary, C_ExeTime from T_Test; else sqlstr := 'Select C_ID, C_Name, C_Age, C_InTime, C_Salary, C_ExeTime from T_Test where C_Age=:w_age'; open pResult for sqlstr using age; end if; end getResult; end pkg_GetResult;
在vc中调用这个包中的存储过程,调用方法:包名.存储过程名(参数1, 参数2, ...):
BOOL CDBTestAppDlg::GetResult(CString ProcName, int age) { if(ConnTODB()) { try { CString sql; sql.Format("{call %s(%d)}", ProcName, age); // 调用包中的存储过程:packageName.procedureName(参数1,参数2...) TRACE(sql + "\n"); m_pRecordSet.Open(sql, adCmdText, adOpenStatic, adLockReadOnly); TRACE("Procedure execute success!"); while(!m_pRecordSet.IsEOF()) { CString name, age; m_pRecordSet.GetCollect("C_Name", name); m_pRecordSet.GetCollect("C_Age", age); MessageBox("name = " + name + ", age = " + age); // TRACE("name = " + name + ", age = " + age); m_pRecordSet.MoveNext(); } return TRUE; } catch (CException* e) { char errorMessage[256]; e->GetErrorMessage(errorMessage, 255); MessageBox(errorMessage); return FALSE; } } return FALSE; }
通过CRecordSet的Open()方法可以返回结果集,再进行遍历。这里用到了一些自定义的函数,因为相对简单,所以未给出。这里的调用是adCmdText,而不是adCmdStoredProc
相关文章推荐
- 最完整的:JAVA调用ORACLE的存储过程、函数的返回结果集例子
- JAVA调用ORACLE带数组输入参数和返回游标结果集的存储过程
- Java调用SQL Server存储过程同时返回参数和结果集
- SQLServer和ORACLE 存储过程的调用(返回结果集)
- mybatis 调用oracle 存储过程并返回结果集
- mybatis 调用 oracle 返回结果集 存储过程
- Oracle 存储过程调用 返回结果集 实现分页
- Java调用SQL Server存储过程同时返回参数和结果集
- IBatis调用ORACLE的存储过程、函数的返回结果集例子
- java调用存储过程同时获取[返回参数]和[结果集]
- JAVA调用ORACLE的存储过程、函数的返回结果集例子
- oracle中存储过程调用存储过程(带有返回结果集)
- Oracle中调用带有返回参数的存储过程
- Oracle存储过程中执行查询返回的结果集,并使用java代码调用【转】
- 最完整的:JAVA调用ORACLE的存储过程、函数的返回结果集例子
- oracle 调用存储过程和函数返回结果集
- 使用VB调用Oracle程序包内的存储过程返回结果集
- 【Mybatis】MyBatis调用带有返回结果、output参数的存储过程上与ibatis的区别
- Oracle中存储过程中赋值和传参及程序调用返回DS
- MyCat1.6带返回参数存储过程调用示例