从 ESQLC 移植到 PROC
本文档讲述数据库嵌入式 SQL/C 语言程序从 ESQLC 向 PROC 移植过程
中所进行的分析、移植过程,并讲述如何编写可通用的嵌入式 SQL/C 语言程序。
作者:余军,
2007年5月9日,初版,完成差异性分析,移植步骤、通用程序说明。
2007年5月21日,修订,对差异性分析增加数据类型的说明,并增加编写了详细的程序代码及
Makefile 文件。
第一部分:ESQLC,PROC 差异性分析
一.基本语法
1.语法字符
ESQLC 中既支持„$‟数据库语法,同时也支持“EXEC SQL”,„:‟数据库语法
PROC 中只支持“EXEC SQL”,„:‟数据库语法
2.数据库变量定义
ESQLC 中支持3种表达方法
方法1,
$int nValue;
$char strValue[20];
方法2(会有警告,但不影响编译及运行结果),
EXEC SQL int nValue;
EXEC SQL char strValue[20];
方法3,
EXEC SQL BEGIN DECLARE SECTION;
int nValue;
char strValue[20];
EXEC SQL END DECLARE SECTION;
PROC 中支持2种表达方法
方法1,不加任何修饰,即与非数据库变量的定义相同
方法2,
EXEC SQL BEGIN DECLARE SECTION;
int nValue;
char strValue[20];
EXEC SQL END DECLARE SECTION;
3.数据库变量的使用
ESQLC 中对„$‟,„:‟均能支持
PROC 中只能用„:‟
4.基本的 SQL 语句(查询、插入、删除、修改)
ESQLC,sql 语句中可以用数据库变量,也可以用常量,如 where name= '
张三'
PROC,sql 语句中只能用数据库变量,如 where name= :m_name ??
5.数据库变量的数据类型
ESQLC 中不支持 unsigned 类型,对 typedef 支持也不是很好,虽然在
sys/types.h 中已经有类型定义,但还是要在程序中再次定义,且必须定义在
BEGIN DECLARE/END DECLARE 之间
PROC 中能够支持 unsigned 类型,也支持 typedef,即在 sys/types.h 中定
义的都能够使用
二.高级 SQL 操作(游标等)
1.数据库打开、关闭操作
ESQLC 中打开数据库使用 database 数据库名,关闭数据库使用 database
close
PROC 中打开数据库使用 CONNECT :username IDENTIFIED
BY :password,不用关闭
2.事务操作
ESQLC 中语法
打开事务,begin work;
提交事务,commit work;
回滚事务,rollback work;
PROC 中语法
打开事务,不写
提交事务,commit work;
回滚事务,rollback;
3.游标操作
游标基本语法
定义游标,declare cur 名称 cursor for sql 语句
打开游标,open cur_1或 open cur_1 using :con1,:con2
Fetch 游标,fetch cur_1或 fetch cur_1 into :val1,:val2
关闭游标,close cur_1
释放游标,free cur_1
两平台区别:
sql 语句区别同基本 sql 语句,PROC 中不能用用常值(where name= '张三'),
只能用数据库变量(where name= :m_name)。
PROC 中不能释放游标,而 ESQLC 中要求释放游标。
三.数据库操作运行结果
1.表达符
ESQLC 中一般采用 SQLCODE,也可采用 sqlca.sqlcode
PROC 中只能用 sqlca.sqlcode。
2.常用数值含义
开发阶段
含义
Informix,ESQL/C
Oracle,PROC
插入时列数不匹配
-236
(待查)
字段不存在
-217
(待查)
运行阶段
含义
Informix,ESQL/C
Oracle,PROC
找到数据
0
0
找不到数据
100
1403
插入时重复
-239
-1
找到记录不唯一
(待查)
(待查)
范围超限
(待查)
1480
找到值为 NULL
(待查)
-1405
其他(待续)
评论0