碧波液压网 欢迎你,游客。 登录 注册

基于C_C++与ORACLE9i的嵌入式SQL编程技术

版权信息:站内文章仅供学习与参考,如触及到您的版权信息,请与本站联系。

  1 概述

  SQL语言是作为独立语言在终端交互方式下使用的,它是面向集合的描述性语言,是非过程性的,即大多数语句都是独立执行,与上下文无关的。而许多事务处理应用都是过程性的,需要根据不同的条件来执行不同的任务,因此单纯用SQL语言是很难实现这类应用的。

  为了解决这一问题,将SQL语言嵌入到某种高级语言(例如C/C++)中使用,利用高级语言的过程性结构来弥补SQL语言实现复杂应用方面的不足。这种方式下使用的SQL语言称为嵌入式SQL(Embedded SQL),而嵌入SQL的高级语言称为主语言或宿主语言。

  2 针对ORACLE9i和C/C++的嵌入式SQL的形式

  对宿主型数据库语言SQL,DBMS(数据库管理系统)可采用两种方法处理,一种是预编译,另一种是修改和扩充主语言使之能处理SQL语句。我们采用的是ORACLE9i预编译方法,由DBMS的预处理程序(PRO*C程序)对源程序进行扫描,识别出SQL语句,把它们转换成宿主语言(C/C++) 调用语句,以使宿主语言编译程序能识别它,最后由宿主语言的编译程序(我们用的是VC++编译程序)将整个源程序编译成目标代码,连接后形成可执行文件。

  在嵌入式SQL中,为了能够区分SQL语句与宿主语言语句,所有SQL语句都必须加前缀EXEC SQL。SQL语句的结束标志则随宿主语言的不同而不同,C/C++语言中以分号(;)结束。例如一条交互形式的SQL语句:DROP TABLE emp;嵌入到C/C++程序中,应写作EXEC SQL DROP TABLE emp;

  在宿主C/C++语言程序中,任何允许出现可执行的语句的地方,都可以写可执行SQL语句;任何允许出现说明性的语句的地方,都可以写说明性SQL语句;

  3 嵌入式SQL语句与C/C++宿主语言之间的通信

  将SQL嵌入到C/C++语言中混合编程,SQL语句负责操纵ORACLE9i数据库,C/C++语句负责控制程序流程。这时程序中会含有两种不同的计算模型的语句,一种是描述性的面向集合的SQL语句,一种是过程性的C/C++语言语句,它们之间如何通信呢?

  (1) SQL通信区

  ORACLE数据库管理系统提供了两个通讯区:SQL通信区(SQLCA)和ORACLE通信区(ORACA)。说明SQL通信区,用以记录执行每一个嵌入SQL语句的状态信息。

  EXEC SQL INCLUDE Sqlca;SQLCA是一个结构类型的变量,它是ORACLE9i和应用程序的一个接口,该结构变量是为诊断错误和事件处理而设置的。在执行PRO*C程序时,ORACLE9i把每一个嵌入SQL语句执行的状态信息存入SQLCA中。

  SQLCA组成中含有sqlerrm,其是个子结构,它又包括sqlerrmc:保留与sqlcode中的错误代码相对应的错误信息文本。Sqlcode是一个整型变量,用于保留最近执行的SQL语句的状态码。

你没有登陆,无法阅读全文内容

您需要 登录 才可以查看,没有帐号? 立即注册

标签:
点赞   收藏

相关文章

发表评论

请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。

用户名: 验证码:

最新评论