Linux操作系统下PRO*C和OCI程序设计分析与比较

时间:2022-09-21 07:51:39

Linux操作系统下PRO*C和OCI程序设计分析与比较

摘要:Linux操作系统具备了Unix系统的稳定性,又具有成本低廉,高扩展性与可维护性好的优点,使其越来越成为服务器操作系统的首选。本文主要介绍PRO*C和OCI程序设计Linux操作系统上的运用和实现,具有一定的参考价值。

关键词:Linux;PRO*C;OCI;程序设计;分析;比较

中图分类号:TP311.1文献标识码:A文章编号:1007-9599 (2010) 06-0000-00

PRO*C&OCI Program Analysis and Comparison under Linux Operating System

Wang Yong

(Liaohe Oilfield Chinese Oil Industrial Company of China Petroleum,Panjin124010,China)

Abstract:Linux operating system with a Unix system stability,but also has low-cost,high scalability and maintainability good advantage,it has increasingly become the preferred server operating system.In this paper, application and implementation of PRO*C and OCI Programming Linux operating system,with some reference value.

Keywords:Linux;PRO*C;OCI;Programming design;Analysis;Comparison

Linux下目前比较常用的接口访问方式有pro*c/c++,OCI二种方式,每种方式各有优缺点;这两者的强强联合也必具有较高的性能,在实际中有广泛的运用。这就是PRO*C和OCI程序设计。

一、pro*c程序设计

pro*c是一种预编译语言,使用c语言作为其宿主语言,内嵌SQL语句来访问Oracle数据库。利用第三代高级语言内嵌入SQL语句来开发应用程序

二、OCI(OCCI)程序设计

OCI是Oracle公司开发的一套完整的底层API,使用C语言或C++语言直接操控数据库。OCI访问数据库的大致流程为:C源文件经过编译得到目标文件,通过链接程序调用OCI库最后得到可执行的应用程序来操作Oracle数据库服务器。其应用程序的创建步骤如图1所示。OCI程序的SQL语句处理步骤如图2所示。

图1 OCI的程序结构图 图2 OCI程序的SQL语句处理步骤

三、二者的比较

PRO*C的好处就是学习难度低,开发效率高,对于数组类型的宿主变量绑定也很方便,如果都使用批量执行的话,性能也是很高的。PRO*C在C/C++代码中嵌入SQL,然后proc预编译器将pc文件翻译成c或cpp文件,再由GCC编译成目标文件。微软近几年推出了LINQ,相比ORACLE多年前推出的PRO*C,这又是照虎画猫的伎俩。本质上来说,proc预编译器只是一个代码生成工具,RPO*C中对数据库的操作最终还是转换成了对OCI的调用。

PRO*C不好的地方在于其语法和原生的C/C++语法有冲突,如果不熟悉,常常就会发生使用proc无法编译通过的现象。而且很多特殊的场合,需要很多技巧来绕过proc编译器,在GCC编译器的层面又要绕一次。对于高级开发方面,PRO*C就完全无能为力了,毕竟PRO*C提供的语法有限,功能有限。

OCI应该说是ORACLE最基本最底层的调用接口,相信其他的所有ORACLE客户端工具都是调用OCI的API来实现的(比如sqlplus,sql*loader,pl/sql developer,Pro*C, for Oracle等)。OCI使用C风格的函数提供接口,洋洋洒洒的成百上千个函数中覆盖了ORACLE数据库操作的方方面面。

OCI的学习难度高,开发效率也不高,执行效率方面,由于没有任何的封装,理论上来说是最高的,但是执行效率和使用者的水平有很大关系,使用不当,很容易开发出糟糕的ORACLE应用。高级开发方面,最吸引我的莫过于批量执行和直接路径加载,其他的高级功能也都包含在OCI库中。

然而,OCI的开发难度可以通过封装来降低。封装一个好用的OCI库非常有意义:封装采用的是原生的C/C++语法,不是PRO*C这样的怪异语法,相比之下编译期遇到的问题容易解决,并且在配合template等高级技巧方面也容易得多。(PRO*C在开发的时候都小心翼翼的,唯恐加多了代码编译不过去)。甚至,可以自己开发一个代码生成工具,通过映射数据库的Schema来自动生成对表的CRUD代码,这样的话,OCI的开发效率就可以与PRO*C媲美了。对于批量执行,直接路径加载等功能也进行封装的话,使用这些高级功能更能大大提高执行效率,这点是PRO*C望尘莫及的。

Pro*C和Pro*C++是不同的,主要在预编译器proc的命令行参数上体现区别

个人的感觉是Pro*C的检查语法要严格一些,比如变量一定要写在DECLARE SECTION里面,否则就编译不过,而PRO*C++只需要把需要绑定的变量写在DECLARE SECTION里面就行了。

在绑定宿主变量方面,PRO*C要比PRO*C++好些,用了PRO*C++后,特别是绑定结构体的时候,结构体识别不了。Pro*C对PL/SQL语法的支持是有限的,典型的就是不支持INNER JOIN,LEFT OUTER JOIN等语法,还有不支持WITH等语法。因此对于一些新奇的语法,最好先写个小例子程序来试试能不能编译过,

总结

对于小的、要求快速开发完成的、软件生命周期短,且不需要什么高级功能的ORACLE应用,PRO*C还是相当不错的,学习难度低,开发效率高。对于高性能、高稳定性、对结构要求清晰,且时间执行的服务器软件等,用OCI更好(当然是封装后的OCI,不封装简直等于自找苦吃)。代码的清晰性,高级功能等方面,OCI更加灵活和方便。

参考文献:

[1]弓岱伟,孙德敏,孟祥荣.基于Solaris的DCS内嵌式先进控制与优化软件的设计和应用[J].小型微型计算机系统,2008,(08)

[2]Solaris10:名副其实的行业里程碑[J].中国计算机用户,2004,(47)

[3]范延军.强大的微机UNIX平台―Solaris[J].软件世界,1996,(04)

上一篇:我院预约挂号系统的开发与应用 下一篇:新形势下高校计算机文化基础课程分类教学的探...