oracle数据块调用存储过程,VC调用存储过程的通用方法(ORACLE篇)
先对上一篇调用SQLServer的存储过程作一点补充,就是如果存储过程里有Insert,update,delete等操作,最后返回结果集,按示例代码有可能得不到数据,因为返回的数据有可能不在第一个结果集,需要进行遍历:
long lngRec = 0;
_RecordsetPtr Rs = m_Rs; //m_Rs为调用存储过程返回的结果集
while(Rs)
{
//结果集的处理,有无数据的判断,数据处理等
while(!m_Rs->EndOfFile)
{
//...
}
Rs = Rs->NextRecordset((VARIANT *)lngRec);
}
调用Oracle的存储过程,vc的调用代码不需要变动,但需要对Oracle的存储过程和调用的SQL语句进行一些调整。
首先,连接字符串不能用ODBC,即连接字符串不能是
"Driver={Microsoft ODBC for Oracle};Server=OracleServer.world;Uid=Username;Pwd=asdasd;"
这种形式,而应该是类似:
"Provider=MSDAORA.1;Password=asdasd;User ID=Username;Data Source=world;Persist Security Info=True"
然后是存储过程的调整,Oracle存储过程怎么返回结果集网上的文章已经很多了,需要用到包,随便摘录一个:
CREATE OR REPLACE PACKAGE pkg_test
AS
TYPE myrctype IS REF CURSOR;
PROCEDURE get (p_id NUMBER, p_rc OUT myrctype);
END pkg_test;
/
CREATE OR REPLACE PACKAGE BODY pkg_test
AS
PROCEDURE get (p_id NUMBER, p_rc OUT myrctype)
IS
sqlstr VARCHAR2 (500);
BEGIN
IF p_id = 0 THEN
OPEN p_rc FOR
SELECT ID, NAME, sex, address, postcode, birthday
FROM student;
ELSE
sqlstr :=
"select id,name,sex,address,postcode,birthday
from student where id=:w_id";
OPEN p_rc FOR sqlstr USING p_id;
END IF;
END get;
END pkg_test;
/
其实不用包也可以,直接创建get,只需要把最后一个参数p_rc的类型改为sys_refcursor就可以了。
最后是SQL语句的调整,SQLServer是直接get 0就可以,Oracle必须这样调用:
{call get(0)}
即执行:
m_Rs->Open("{call get(0)}",(IDispatch*)(m_Conn->m_Conn),adOpenStatic, adLockReadOnly,adCmdText);
get虽然有两个参数,但是SQL语句里这个最后的输出参数是可以不用写的。
{call 存储过程名(输入参数1,输入参数2,...)}这样的SQL语句在SQLServer和Oracle是都能得到返回结果集的,因此只要把SQL语句改成这种形式,程序代码不需要修改,就可以同时支持SQLServer和Oracle的存储过程的调用了。
oracle数据块调用存储过程,VC调用存储过程的通用方法(ORACLE篇)相关推荐
- oracle itl解析,oracle数据块dump文件中ITL详解
oracle数据块dump文件中ITL详解 dump出Oracle block后,可以看到事物槽,包含有事物槽号(ITL),XID,UBA,FLAG,LCK,SCN. 本文主要讨论FLAG标记的规则, ...
- Oracle数据块损坏的恢复实例
测试环境:11.2.0.4 1.构建数据块损坏的测试环境 2.有备份:常规恢复坏块 3.无备份:跳过坏块 1.构建数据块损坏的测试环境 1.1 创建测试表 --Create Table t_test ...
- Oracle的逻辑结构(表空间、段、区间、块)——Oracle数据块(一)
Oracle 的逻辑结构 ( 表空间.段.区间.块 ) --块 Oracle 存储数据的最小单位是数据块.Oracle 管理 数据库 数据文件的存储空间被称为数据块,一个数据块是数据库使用的最小数据单 ...
- Oracle数据块原理深入剖析
数据块(Oracle Data Blocks),本文简称为"块",是Oracle最小的存储单位,Oracle数据存放在"块"中.一个块占用一定的磁盘空间.特别注 ...
- oracle数据块坏,Oracle数据块损坏解决办法
背景: 1.PDM(Windchill)系统 2.exp数据错误,没有rman备份数据 3.数据库trc文件报错 Dump file d:\oracle\admin\wind\udump\wind_o ...
- oracle数据块格式小结
Oracle数据块可分为三层 更细化 Cache layer--20字节,包含DBA.块类型.块格式.SCN:数据块被读取时进行完整性检查,确保没有损坏或fracture,即块更新信息只有部分被写入 ...
- ORA-01578: ORACLE 数据块损坏 之奇妙处理 DBV
下午接到研发人员报告: ORA-01578: ORACLE 数据块损坏 根据网上诸多仁兄的处理方案,具体采用下面检查: ORA-01578: ORACLE 数据块损坏 (文件号 6, 块号 20) O ...
- oracle数据块损坏后的修复方法
关于oracle数据块损坏的解决方法,相关链接网址在: http://blog.csdn.net/dlinger/archive/2004/08/24/83911.aspx http://www.it ...
- Oracle 数据块损坏与恢复具体解释
1.什么是块损坏: 所谓损坏的数据块,是指块没有採用可识别的 Oracle 格式,或者其内容在内部不一致. 通常情况下,损坏是由硬件故障或操作系统问题引起的.Oracle 数据库将损坏的块标识为&qu ...
最新文章
- HOJ 2678 Stars
- 前端—每天5道面试题(1)
- 划重点!2019年这类程序员非常稀缺,年薪超平均水平10倍
- html菜鸟ruby,ruby的基础语法
- 内存表与 InnoDB表对比
- 我为什么建议你发年终奖前跳槽?
- JAVA四行代码制作简单的翻译软件(傻瓜式教程)
- Jmeter下载安装详细步骤(2021)
- 2020软件测试报告模板
- matlab仿真下载,MATLAB仿真 关于MATLAB建模仿真源程序 - 下载 - 搜珍网
- 大数据Hadoop之——数据同步工具DataX
- 论文解读:Structural Optimization Makes Graph Classification Simpler and Better
- 我的信念 -居里夫人
- 禅道linux客户端服务端,禅道11.0版本发布,主要集成禅道客户端
- 从认知动机理论看设计:如何读懂用户?
- 如何拼局域网所有ip_在windows命令行批量ping局域网内IP
- IDA反汇编工具使用详解
- mac word 2016中文输入问题解决
- php用代码写的三行情书,三行情书经典语录_最美的三行情书(两行泪,一段情)
- 单片机中存储器扩展位地址线怎么算_单片机片外数据存储器扩展设计技巧简介...
热门文章
- 论文浅尝 - IJCAI | Knowledge is NOT always you need: 外部知识注入预训练模型的利与弊...
- 李涓子 | 机器智能加速器:大数据环境下知识工程的机遇和挑战
- 记录对String.format(Formatter().format())方法的总结
- DeepMind最新研究:如何将「大语言模型」 训练到最优?
- HTML5崛起之时,Java桌面时代就已经终结了
- c# 常用数据库封装
- HDU 4431 Mahjong(模拟题)
- C# 5.0 CallerMemberName CallerFilePath CallerLineNumber 在.NET4中的使用
- 对css类名className的一些操作的函数
- 【原】StreamInsight 浅入浅出(四)—— 例子