嵌入式SQL(C)

本文详细介绍了在C语言中如何使用嵌入式SQL进行数据库编程,包括预编译过程、SQL语句的使用,如连接、断开、事务处理、标准SQL语句及动态SQL语句的操作,并探讨了单线程和多线程环境下嵌入式SQL的实现方法。
摘要由CSDN通过智能技术生成

C语言程序代码中直接嵌入SQL语句,使数据库编程变得非常简单明了,而且嵌入式SQL是一种标准,代码不需要很多的修改就能移植到支持嵌入式SQL的数据库系统上去,但这同时也是一个缺点,许多数据库系统不提供嵌入式SQL的预编译器。

1.1        编译

编译过程分为两步,第一步,对带有嵌入式SQLC代码程序(通常此程序以.pc结尾,简称PC代码)使用proc做一次预编译,将里面的嵌入式SQL转化为代表数据库功能调用的C代码。第二步,使用C编译器将C代码编译连接成可执行文件。

配置文件

proc首先读取$ORACLE_HOME/precomp/pcscfg.cfg,里面的选项与命令行选项作用完全相同,这样可以让proc使用变得简洁。但从减少系统配置步骤、保持应用迁移的灵活性的角度出发,建议对此文件不作修改,将各种选项写在程序的编译文件中。

命令行选项:

sys_include: 系统头文件目录,如/usr/include,/usr/lib/gcc-lib/i486-suse-linux/2.95.3/include, /usr/lib/gcc-lib/i386-redhat-linux/2.96/include ,$ORACLE_HOME/precomp/public,$(ORACLE_HOME)/rdbms/public -I$(ORACLE_HOME)/rdbms/demo,前3个通常在配置文件中已经写入

include:自定义的应用头文件目录

sqlcheck:SQL语句检查方式,语法(SYNTAX)和语义(SEMANTICS)。

语法:仅检查SQL语句的语法结构

语义:除语法检查外,还检验数据库对象和宿主变量的有效性

userid:访问数据库途径,在sqlcheck为语义检查时必须指定,如dbuser/oracle@oradb

iname:输入pc文件名

oname:输出c文件名

如果省略iname、oname,只需输入pc文件名,缺省转化成同名后缀为.cC文件。

threads:线程支持,yesno

例子

proc sqlcheck=semantic userid=dbuser/oracle threads=yes sys_include=$(ORACLE_HOME)/precomp/public sys_include=$(ORACLE_HOME)/rdbms/public sys_include=$(ORACLE_HOME)/rdbms/demo include=$IN threads=yes iname=emp.pc oname=emp.c  //$IN是自定义的应用文件目录

gcc -I$(ORACLE_HOME)/precomp/public -I$(ORACLE_HOME)/rdbms/public -I$(ORACLE_HOME)/rdbms/demo –g –c –o emp.o emp.c

参见proc/single/Makefile。

1.2        SQL语句

建议设立一个与表结构一一对应的结构定义,作为宿主结构,下面的所有例子几乎都会用到关于表emp的宿主结构(emp_t emp)。

参见proc/single/db.h中emp_t和emp建表脚本proc/single/emp.sql

1.2.1          内部类型与宿主类型对应

下面是最常用的内部数据类型和宿主变量类型的对应关系:

内部数据类型

宿主变量类型

char(n)

char[n+1]

varchar2(n)

char[n+1]

number(n<=6)

int

number(n>6)

double

number(m,n)

double

date

char[15]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值