#include

#include

#include

using namespace std;

#include

#include

using namespace oracle::occi;

/*

void selectDemo()

{

Environment      *pEnv   =    NULL; //定义执行环境对象

Connection       *pConn =    NULL; //定义链接对象

Statement        *pStmt =    NULL; //定义执行语句对象

ResultSet        *pRs    =    NULL; //定义结果集对象

const string szUserName   = "demo"; //设置用户名

const string szUserPwd    = "demo"; //设置密码

const string szConnection = "icss"; //设置要链接的数据库,"icss"是数据库名

try

{

pEnv = Environment::createEnvironment(); //创建了一个执行环境

pConn = pEnv->createConnection(szUserName, szUserPwd, szConnection);

//创建了一个链接,有三个参数。

if ( NULL == pConn) //如果链接创建失败,执行以下代码

{

cout << "Connection Failure" << endl;

return;

}

pStmt = pConn->createStatement(); //通过connection对象创建一个statement对象

string strSql = "select * from test1";

pStmt -> setSQL(strSql); //设置语句执行对象的属性

pRs = pStmt->executeQuery(); //执行调用,返回结果集对象

while ( pRs -> next())        //对结果集遍历,输出结果集里的数据

{

cout << pRs->getInt(1) << " " << pRs->getString(2) << endl;

}    //getInt()和getString()方法的使用取决于数据集里数据的类型。1和2指第一、第二个字段

}

catch ( SQLException ex)

{

cout << ex.getMessage() << endl;

}

pStmt -> closeResultSet(pRs);     //statement对象调用方法关闭数据集

pConn -> terminateStatement(pStmt); //connection对象调用terminateStatement()方法关闭statement对象

pEnv -> terminateConnection(pConn); //environment对象调用方法关闭connection对象

Environment::terminateEnvironment(pEnv); //关闭环境对象。

//return 0;

}

void procedureDemo()

{

Environment      *pEv   =   NULL;

Connection       *pConn =   NULL;

Statement        *pStmt =   NULL;

const   string username = "demo";

const   string password = "demo";

const   string database = "icss";

try

{

pEv   =   Environment::createEnvironment();

pConn =   pEv->createConnection(username, password, database);

if ( NULL == pConn)

{

cout << "Connection Failure!" << endl;

return;

}

pStmt = pConn->createStatement("BEGIN sp_selectspecial(:1, :2, :3); end;");

//执行存储过程与执行SQL语句的不同:执行sql语句时,createstatement的参数是select参数。而执行存储过程时

//createstatement的参数是“BEGIN SPNAME(PARAM1, PARAM2 …); end;”。

pStmt -> setInt(1, 43);

pStmt -> registerOutParam(2, OCCISTRING, 30, "");

pStmt -> registerOutParam(3, OCCISTRING, 30, "");

//pStmt -> registerOutParam(4, OCCINUMBER, 10, "");

//pStmt -> registerOutParam(5, );

int updateCount = pStmt->execute();

cout << pStmt->getString(2) << " " << pStmt->getString(3) << endl;

pConn->terminateStatement(pStmt);

pEv->terminateConnection(pConn);

Environment::terminateEnvironment(pEv);

}

catch ( SQLException ex)

{

cout << ex.getMessage() << endl;

}

}

void functionDemo()

{

Environment *pEvn =   NULL;

Connection   *pConn =   NULL;

Statement    *pStmt =   NULL;

const     string username = "demo";

const     string password = "demo";

const     string database = "icss";

try

{

pEvn = Environment::createEnvironment();

pConn = pEvn->createConnection(username, password, database);

if ( NULL == pConn)

{

cout << "Connection Failure!" << endl;

return;

}

pStmt = pConn->createStatement(" BEGIN :1:=fun_GetSalary(:2); END; ");

pStmt->registerOutParam(1, OCCIINT,30,"");

//try

//{

pStmt->setInt(2,2);

//}

//catch ( SQLException ex)

//{

// cout << ex.getMessage() << endl;

//}

pStmt->executeUpdate();

cout << pStmt->getInt(1) << endl;

}

catch ( SQLException ex)

{

cout << ex.getMessage() << endl;

}

}

*/

void cursorDemo()

{

Environment      *pEv   =   NULL;

Connection       *pConn =   NULL;

Statement        *pStmt =   NULL;

ResultSet        *pRs   =   NULL;

const   string username = "demo";

const   string password = "demo";

const   string database = "icss";

try

{

pEv   =   Environment::createEnvironment();

pConn =   pEv->createConnection(username, password, database);

if ( NULL == pConn)

{

cout << "Connection Failure!" << endl;

return;

}

pStmt = pConn->createStatement("BEGIN sp_GetSpecialByID(:1, :2, :3, :4, :5); end;");

//执行存储过程与执行SQL语句的不同:执行sql语句时,createstatement的参数是select参数。而执行存储过程时

//createstatement的参数是“BEGIN SPNAME(PARAM1, PARAM2 …); end;”。

pStmt -> setInt(1, 12);

pStmt -> setString(2, "");

pStmt -> setString(3, "");

pStmt -> setInt(4, -1);

pStmt -> registerOutParam(5, OCCICURSOR);

int updateCount = pStmt->execute();

pRs = pStmt->getCursor(5);

pRs->next();

cout << pRs->getString(2) << endl;

pStmt->closeResultSet(pRs);

pConn->terminateStatement(pStmt);

pEv->terminateConnection(pConn);

Environment::terminateEnvironment(pEv);

}

catch ( SQLException ex)

{

cout << ex.getMessage() << endl;

}

}

int main(int argc, char* argv[]) { //procedureDemo(); //selectDemo(); //functionDemo(); cursorDemo(); return 0; }

c++调用oracle存储过程,C++通过occi执行select语句、存储过程、函数,取cursor值示例...相关推荐

  1. oracle中执行动态sql语句吗,oracle中有没有可动态执行sql语句的函数

    oracle中有没有可动态执行sql语句的函数 关注:233  答案:2  手机版 解决时间 2021-03-05 15:53 提问者祗剩寂寞 2021-03-04 22:38 oracle中有没有可 ...

  2. Oracle 10g数据库基础之基本查询语句-中-函数

    Oracle 10g数据库基础之基本查询语句-中-函数 --资料参考:张烈 张建中<数据库管理员培训讲义> 函数: 使用函数的目的是为了操作数据 将输入的变量处理,返回一个结果. 变量可以 ...

  3. oracle只查询0点数据,Oracle 10g数据库基础之基本查询语句-中-函数

    Oracle 10g数据库基础之基本查询语句-中-函数 --资料参考:张烈 张建中<数据库管理员培训讲义> 函数: 使用函数的目的是为了操作数据 将输入的变量处理,返回一个结果. 变量可以 ...

  4. SQL 查询总是先执行SELECT语句吗?你们都错了!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 译者:无明 链接:infoq.cn/article/Oke8hgi ...

  5. SQL 查询总是先执行SELECT语句吗?你们都错了!

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | infoq.cn/article/Oke8hg ...

  6. SQL 查询总是先执行SELECT语句吗?

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取近百本电子书入口 译者:无明 链接:22j.co/b8Un 很多 SQL 查 ...

  7. sqlserver 查询某个时间段执行sql语句_为什么 SQL 查询不是先执行SELECT语句?

    作者:Julia Evans    译者:无明    链接:infoq.cn/article/Oke8hgilga3PTZ3gWvbg 很多 SQL 查询都是以 SELECT 开始的.不过,最近我跟别 ...

  8. MySQL导入selectclass文件_MySQL执行Select语句将结果导出到文件的方法 – 疯狂的蚂蚁...

    然而也会遇到的场景是,需要执行一个SQL语句,然后将SQL语句的结果输出到文件: 方法一:使用MySQL的select * into outfile '/tmp/rs.txt' from tb_nam ...

  9. oracle dml触发器 获取当前执行sql语句,Oracle DML触发器

    DML触发器的要点 DML触发器是定义在表上的触发器,由DML事件引发.编写DML触发器的要素是: * 确定触发的表,即在其上定义触发器的表. * 确定触发的事件,DML触发器的触发事件有INSERT ...

最新文章

  1. Windows批处理
  2. 02 面向对象之:类空间问题以及类之间的关系
  3. Netiler annotation 用法
  4. Django实战(1):需求分析和设计
  5. python拦截广告弹窗_你会如何使用Python进行广告拦截?
  6. 2013 Multi-University Training Contest 4 部分解题报告
  7. 使用Java语言开发微信公众平台(五)——获取access_token
  8. ubuntu 把软件源修改为国内源和更新(转载)
  9. 1.Yii2 -- Controller, Request, Response, Cookie, Session
  10. 【转载】SI 9000 及阻抗匹配学习笔记(一)
  11. Scala中的fold和reduce理解
  12. 裸辞指的是什么?裸辞到底好不好?
  13. 台式计算机连不上网怎么办,台式电脑插了网卡连不上网怎么办?几个方面介绍及解决方法...
  14. 【从Java转C#】第八章:委托、lambda、事件
  15. 2021年电工(初级)考试题库及电工(初级)模拟考试
  16. python中摄氏度的符号咋打_linux下怎么方便的输入度数符号 °
  17. 习题7-5 找鞍点 (20分)(函数调用解法:先找最大值后比较是否为最小值)
  18. 【使用 arm-poky-linux-gnueabi-gcc -v 指令可以查看 gcc 版本时报错】
  19. 基于Arria10的H.264 4K高性能编解码器模块视频演示
  20. 基础项目(10)BCD转二进制程序设计讲解

热门文章

  1. vue关闭页面时停止计数器
  2. ubuntu16.04 安装 lnmp 及php 多线程 初级版本
  3. 创建一个新类Gerbil
  4. 意大利高级珠宝品牌宝曼兰朵上海恒隆精品店开业,姚晨剪彩
  5. android盒子开发招聘,[原创]Android沙盒开发之系统libc库定制修改
  6. java镂空图案,Java 镂空菱形的输出解决思路
  7. 使用tez引擎出现内存溢出问题
  8. 计算机学院学生会会徽设计,计算机学院院徽和学会会徽设计大赛.doc
  9. java 获得当前日期字符串
  10. 手机写python脚本_python可以写手机脚本么作者老田