esql开发总结
1 定义或者声明方法
int method(char *arg1,char* arg2...);
实现方法
int method(char *arg1,char* arg2...)
EXEC SQL BEGIN DECLARE SECTION;
char *arg1;
char* arg2;
EXEC SQL END DECLARE SECTION;
{
EXEC SQL BEGIN DECLARE SECTION;
定义自己的变量,只有此处定义的局部变量可以在sql中直接使用。
EXEC SQL END DECLARE SECTION;
初始化变量
memset(sqlbuf,0x00,sizeof(sqlbuf));
strncpy(from,to);
deccvdbl(0,&decimal类型变量);
return 0;
}
2 在.h中定义结构体
如头文件test.h 内容如下:
...
EXEC SQL BEGIN DECLARE SECTION;
typedef struct LYNAME{
decimal x ;
char y[1+1];
char z[1+1];
int u;
}x;
EXEC SQL END DECLARE SECTION;
...
正确引用结构体LYNAME,需使用下边的引入方式
EXEC SQL include 相对路径/test.h;
而不是
#include<test.h>
3 常用的打印日志方法
printf("[%s][%d] GetTaxData start\n",__FILE__, __LINE__);
txlog(LOG_INFO,"current ywrq[%s] =%s\n",__FILE__, __LINE__,x,y);
#define etxlog(loglevel,format,args...) txlog(loglevel,format,__FILE__,__LINE__,##args);txlogflush()
#define eetxlog(loglevel,format) txlog(loglevel,format,__FILE__,__LINE__);txlogflush()
eetxlog(LOG_INFO,"INFO:SSNjbbzlZCZRDZ end.FAILED");
sprintf(pOutbuf,"FAILED:SELECT NJGRJH.jhbh[%s]qybh[%s]grbh[%s]sqlcode[%d]"
,tb_njdl.jhbh,tb_njdl.qybh,val[0],sqlca.sqlcode);
etxlog(LOG_ERROR,"%s",pOutbuf);
fprintf(fpLog,"%s|%d|%d|%s|%d|%s\n",strSerial,tb_njdl.clcs,nErrNum++,"数据库错误",nLineCnt,"数据库错误");
4 打印decimal公共方法
void PrintDecimalToString(ptr_val,desc)
EXEC SQL BEGIN DECLARE SECTION;
decimal *ptr_val;
char *desc;
EXEC SQL END DECLARE SECTION;
{
char decimalResult[30];
memset(decimalResult,0x00,sizeof(decimalResult));
dectoasc(ptr_val,decimalResult,29,8);//将decmail值变成asc码
txlog(LOG_INFO,"%s = [%s]\n",__FILE__, __LINE__,desc,decimalResult);
printf("[%s][%d] %s=[%s] \n",__FILE__, __LINE__,desc,decimalResult);
}