pro*C/C++支持c++开发实例
Pro*C/C++同时支持C和C++,但是当预编译包含C++代码的PC源程序时,必须合理地设置相关的预编译选项。
代码:xx.pc
/*功能:演示了Pro*C/C++源程序生成C++源文件说明:Pro*C/C++支持C和C++。当预编译包含C++代码的PC源程序时,必须合理地设置相关的预编译选项。预编译选项应该设置为cpp_suffix=cpp code=cpp parse=none(或partial)code = ANSI_C, KR_C, CPPparse = NONE, PARTIAL, FULLcpp_suffix = c, cpp, cc*/#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>EXEC SQL BEGIN DECLARE SECTION; // 定义宿主变量struct empdat{varchar emp_name[10];float salary;float commission;}emprec;struct empind{short emp_name_ind;short sal_ind;short comm_ind;}emprec_ind;int eno;
EXEC SQL END DECLARE SECTION;class emp // 自定义类
{char ename[10];float salary;float commission;public:emp();emp(empdat &dat, empind &ind);void setvalues(empdat &dat, empind &ind);friend ostream& operator<<(ostream &s, emp &e); // 定义友元函数
};emp::emp()
{memset(ename, 0, sizeof(ename));salary = commission = 0.0;
}emp::emp(empdat &dat, empind &ind)
{strncpy(ename, (char*)dat.emp_name.arr, dat.emp_name.len);ename[dat.emp_name.len] = '\0';this->salary = dat.salary;this->commission = (ind.comm_ind < 0) ? 0 : dat.commission;
}void emp::setvalues(empdat &dat, empind &ind)
{strncpy(ename, (char*)dat.emp_name.arr, dat.emp_name.len);ename[dat.emp_name.len] = '\0';this->salary = dat.salary;this->commission = (ind.comm_ind < 0) ? 0 : dat.commission;
}ostream& operator <<(ostream &s, emp &e)
{return s<<"name: "<<e.ename<<", salary: "<<e.salary<<", comm: "<<e.commission<<endl<<endl;
}#include <sqlca.h>
#pragma comment(lib, "orasql10.lib")int connect();
void sql();
void sql_error();void main()
{ EXEC SQL WHENEVER SQLERROR DO sql_error(); // 安装错误处理句柄 if(connect() == 0) { sql(); EXEC SQL COMMIT WORK RELEASE; // 提交事务,断开连接 } else printf("连接失败\n");
} int connect() // connect to oracle database
{ EXEC SQL BEGIN DECLARE SECTION; // 定义宿主变量char username[10], password[10], server[10]; EXEC SQL END DECLARE SECTION;strcpy(username, "scott"); strcpy(password, "scott"); strcpy(server, "orcl"); EXEC SQL CONNECT :username IDENTIFIED BY :password USING :server;if(sqlca.sqlcode == 0) return 0; else return sqlca.sqlcode;
} void sql_error() // print error infomation
{ printf("%.*s\n", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);
} void sql()
{ emp e;while(1){cout<<"请输入雇员号(0:退出):";flush(cout);scanf("%d", &eno);fflush(stdin);if(eno == 0)return;EXEC SQL WHENEVER NOT FOUND goto notfound; // 游标数据提取完毕后退出循环EXEC SQL select ename, sal, comm into :emprec indicator :emprec_ind from emp where empno=:eno;e.setvalues(emprec, emprec_ind);cout<<e;continue;notfound:cout<<"无效雇员号"<<endl<<endl;}printf("sqlca.sqlerrd[2] = %d\n", sqlca.sqlerrd[2]); // sqlca.sqlerrd[2]存放着Select语句作用的行数
}
xx.pc文件对应的预编译选项如图:
pro*C/C++支持c++开发实例相关推荐
- Android音乐播放器的开发实例(2021新版-Java版)
Android音乐播放器的开发实例 介绍 该项目旨在引导喜爱 Android 开发爱好者入门教程实例,可以一步一步的跟着来完成属于自己的项目开发过程. 此项目为基于 Java 语言开发,使用 Recy ...
- Android AR开发实践之四:基于Sceneform的ARcore开发实例
Android AR开发实践之四:基于Sceneform的ARcore开发实例 一.设备配置 1.配置虚拟设备 2.配置真机 二.开发环境配置 1.首先添加sceneform的gradle插件到工程配 ...
- 安卓音乐播放器开发实例
本文将引导大家做一个音乐播放器,在做这个Android开发实例的过程中,能够帮助大家进一步熟悉和掌握学过的ListView和其他一些组件.为了有更好的学习效果,其中很多功能我们手动实现,例如音乐播放的 ...
- AgileEAS.NET平台开发实例-药店系统-报表开发(高级篇)
开篇 上篇我们讲述了报表开发的独立开发与基于平台的开发二种方式,相信大家已经对报表开发有了一定的了解,那么我们本篇将会巩固大家对报表开发的知识,我们这里提供一 个我们平时在项目中应用到的一些关于报表开 ...
- php 微信开发 菜单,微信公众号中个性化菜单的开发实例
微信公众号中个性化菜单的开发实例 个性化菜单让公众号的不同用户群体看到不一样的自定义菜单.该接口开放给已认证订阅号和已认证服务号,个性化菜单要求用户的微信客户端版本在iPhone6.2.2,Andro ...
- OpenCV android sdk配置OpenCV android NDK开发实例
OpenCV android sdk配置OpenCV android NDK开发实例 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/det ...
- RDIFramework.NET-.NET快速信息化系统开发整合框架 【开发实例 EasyUI】之产品管理(MVC版)...
RDIFramework.NET-.NET快速信息化系统开发整合框架 [开发实例 EasyUI]之产品管理(MVC版) RDIFramework.NET-.NET快速开发整合框架 [开发实例]之产品管 ...
- 2021爱智先行者—(2)零基础APP开发实例
[本文正在参与"2021爱智先行者-征文大赛"活动],活动链接:https://bbs.csdn.net/topics/602601454 欢迎关注 『Python小白的项目实战』 ...
- JAVA :RESTLET开发实例(一)基于JAX-RS的REST服务
本文转自http://www.cnblogs.com/redmondfan/p/3209290.html,所有权力归原作者所有. RESTLET介绍 Restlet项目为"建立REST概念与 ...
最新文章
- 洛谷乐多赛 yyy loves Maths VI (mode)
- 面试7 GC机制中如何判断一个对象是否任在使用
- Git的SourceTree添加授权添加用户名与密码
- 如何找到SAP CRM One Order节点ID对应的描述信息(名称)
- 你的 GNN,可能 99% 的参数都是冗余的
- Java-P:面向对象编程
- 【Spark】Spark cache 报错 Exception thrown in awaitResult
- win8卸载mysql数据库,彻底卸载win8自带的metro应用的方法
- 开发人员提升自己的四种方式
- 干货 | 大公司机器学习算法的面试经验
- mybatis学习笔记(10)-一对一查询
- 一个开源vue网站博客,nuxt开源网站,前后端分离项目
- xcode 可以打开xmind_思维导图,原来Xmind这么强大
- 从qire123上抓取bdhd下载地址的firefox extension
- java short 写法_Java数据类型short的使用方法
- 配对交易之统计套利配对:介绍
- echarts-liquidfill 水滴图/水位图/水球 下载地址
- ActiveX控件打包cab时INF文件的编写[转]
- Python - 文件基础操作
- nowcoder 高矮排列
热门文章
- plotly django_使用Plotly为Django HTML页面进行漂亮的可视化
- leetcode 697. 数组的度(hashmap)
- leetcode491. 递增子序列(回溯算法)
- leetcode851. 喧闹和富有(dfs)
- onclick判断组件调用_从子组件Onclick更新状态
- 上海区块链会议演讲ppt_所以您想参加会议演讲吗? 这是我的建议。
- 面试官面试前端_如何面试面试官
- 文本数据可视化_如何使用TextHero快速预处理和可视化文本数据
- 第一名数据科学工作冠状病毒医生
- mysql 索引及索引创建原则