“银行帐户监管系统”编程心得(一) - 编程点滴 - 李安迪

(这条文章已经被阅读了 26 次) 时间:2001-12-15 03:42:18 来源:李安迪 (cn) 原创-IT

企业帐户监管系统cp程序编写

sybase的cp函数与oracle的pc函数的语法区别:
1、要于文件开头处加入语句:
EXEC SQL INCLUDE SQLCA ; (用于传出esql的返回码等信息)
EXEC SQL WHENEVER SQLERROR continue ;
EXEC SQL WHENEVER ;SQLWARNING continue ;
EXEC SQL WHENEVER NOT FOUND continue ;
后三句用于设定在esqlc遇到ERROR、WARNING和REC_NOT_FOUND时忽略错误,继续往下执行,由下面的程序对之进行处理。如果没有这三句,预编译时会报warning。
2、host 变量要于文件开头处定义(不像oracle,可以于每个函数中各自定义),如果在每个cp函数中各自定义host变量,则会提示host变量重复定义
EXEC SQL BEGIN DECLARE SECTION ;
定义host 变量
EXEC SQL END DECLARE SECTION ;
3、其他如 C变量定义、字符串变量初始化VC_INIT、host变量赋值VC_SETH、C结构变量赋值VC_SETC等都与oracle的pc做法一样
4、esqlc的语法与oracle大致一样,
如insert 、update 、select、declare cursor 、open cursor、close cursor等的语法与oracle的sqlc一样
5、sybase esqlc的部分sql函数与oracle 不同。
如取当前系统时间的函数是getdate();日期、字符、数值型的数据的转换都不能用隐式转换,要通过convert()函数转换等。
6、另外要注意将cp文件编译成.o文件时有些语法错误会检查不出来,只在上层程序编译成可执行程序,再执行时才会出现错误。(具体有哪些情况已经记不起了)
7、sybase的错误代码与oracle不同,下面是已发现的错误代码:
100 :record not found
– 2601:duplicate key
– 16843032:cursor被 重复打开
– 16843026:cursor未被declare 就进行open操作
– 33620273:cursor未open 就进行fetch 或 close操作
8、cp文件中调用err_set_info()、err_append_info()函数
由于报错函数简化,该两个函数不支持 ( … , “format : %s ….” , parameter )的格式,具体参见已有cp文件中的用法或参见报错函数设计文档
9、编译cp文件前将cpre.mk ,cpre.awk文件拷到$HOME/src目录下,然后写好cp文件的make文件才能预编译和编译(请参考 /home/ljw/src/cpre.mk /home/ljw/src/cpre.awk /home/ljw/src/ams/db/ams_db.mk )
10、头文件:
ams_tab_struc.h 现最新版本 :/home/ljw/include/ams/ams_tab_struc.h
ams_tab_fieldsz.h :/home/ljw/include/ams/ams_tab_fieldsz.h
arch_sql.h :/home/ljw/include/arch/arch_sql.h
其他公共头文件 :/home/amsdev/include/arch/*.h
11、例子:
/home/ljw/src/ams/db/*.cp
/home/ljw/src/ams/db/driver/* (测试程序)
/home/ljw/include/ams/db/*.h