VC调用存储过程的通用方法(ORACLE篇)

甜咪公主2014

甜咪公主2014

2016-02-19 18:42

下面是个简单易学的VC调用存储过程的通用方法(ORACLE篇)教程,图老师小编详细图解介绍包你轻松学会,喜欢的朋友赶紧get起来吧!

VC调用ORACLE存储过程的通用方法

先对上一篇调用SQLServer的存储过程作一点补充,就是如果存储过程里有Insert,update,delete等操作,最后返回结果集,按示例代码有可能得不到数据,因为返回的数据有可能不在第一个结果集,需要进行遍历:

long lngRec = 0;
_RecordsetPtr Rs = m_Rs;   //m_Rs为调用存储过程返回的结果集

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

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就可以了。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

最后是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的存储过程的调用了。

展开更多 50%)
分享

猜你喜欢

VC调用存储过程的通用方法(ORACLE篇)

编程语言 网络编程
VC调用存储过程的通用方法(ORACLE篇)

VC调用存储过程的通用方法(SQLServer篇)

编程语言 网络编程
VC调用存储过程的通用方法(SQLServer篇)

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

ASP调用oracle存储过程

ASP
ASP调用oracle存储过程

用PHP调用Oracle存储过程

PHP
用PHP调用Oracle存储过程

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

oracle 存储过程加密的方法

编程语言 网络编程
oracle 存储过程加密的方法

ASP调用ORACLE存储过程并返回结果集

ASP
ASP调用ORACLE存储过程并返回结果集

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

网站构成的基本元素—网页布局

网站构成的基本元素—网页布局

我就是傻,找不到你,我就会哭得那么伤心.

我就是傻,找不到你,我就会哭得那么伤心.
下拉加载更多内容 ↓