我酷下载
您的位置:首页-> 技术文章-> -> 数据库类-> VC调用存储过程的通用方法(ORACLE篇)

阅读排行




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

作者未知 来源未知 加入时间:2006-12-29 人气:208
调用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的存储过程的调用了。



相关文章

相关软件

联系我们 广告服务 友情链接 版权说明 软件发布 下载帮助

CopyRight
2005-2016 www.5qcn.net All Rights Reserved 版权所有 【我酷】下载