【转载】用BATOOL进行Pro*C程序制造的一点心得

来源:互联网 发布:巴菲特 知乎 编辑:程序博客网 时间:2024/05/22 11:07
1、注意各处的语法是C还是Oracle。可以通过查看生成pc文件来确认。
2、定义char[]类型时,长度要比数据库中多一位,用来存放空字符'\0'。
3、用SELECT取出表中字段的值时,尽量使用NVL函数对空值进行判断。
4、日期按天数运算,可直接在SELECT语句中对日期型字段进行加减运算。
5、日期在年中的周数:SELECT TO_CHAR(SYSDATE, 'WW') FROM DUAL;
6、日期在周中的顺序:SELECT TO_CHAR(SYSDATE, 'D') FROM DUAL;星期日返回1。
7、根据日期选择不同的字段可使用结构数组实现。
8、判断某周是否跨月:通过判断该周最后一天与该周第一天的年月是否相同。
9、字符串变量的初始化不要通过设定初期值来实现。
10、字符串变量的初期化:memset(var_name, '\0', sizeof(var_name));
11、字符串赋值方法1:memset(var_name1, var_name2, sizeof(var_name1) - 1);
12、字符串赋值方法2:strncpy(var_name1, var_name2, sizeof(var_name1) - 1);
13、字符串赋值尽量不使用strcpy函数,用strncpy函数代替。
14、字符串比较方法1:memcmp(var_name1, var_name2, sizeof(var_name1) - 1);相同返回0。
15、字符串比较方法2:strncmp(var_name1, var_name2, sizeof(var_name1) - 1);相同返回0。
16、字符串比较尽量不使用strcmp函数,用strncmp函数代替。
17、字符串求长度方法1:strlen(var_name);长度不包含最后的空字符。
18、字符串求长度方法2:sizeof(var_name);长度包含最后的空字符。实际为字节数。
19、用C函数实现数据类型转换:atoi串转整、atol串转长整、atof串转浮点。
20、日期按月进行运算:SELECT ADD_MONTHS(SYSDATE, n) FROM DUAL;n为加减的月。
21、Free记述中,引用的变量前应该加冒号。
22、EXEC SQL SELECT ……等语句的最后是一个分号。
23、注意程序中非注释部分不要有全角空格,Free记述中的括号匹配,分号与冒号不要混淆。
24、取得下一个曜日的日期:SELECT NEXT_DAY(SYSDATE, '月曜日') FROM DUAL;
25、取得某月最后一天的日期:SELECT LAST_DAY(SYSDATE) FROM DUAL;
26、组合字符串:sprintf(var_name1, "%s%d\0", var_name2, var_name3);
27、在UNTIL控件中指定的是循环执行的条件,生成pc文件时会转为while(! <条件>)格式。
28、尽量将从DB驱动表取出的值保存到中间变数中再使用。
29、新的类型的定义写到中间变数定义窗口的型宣言中。
30、新的类型的定义须写到EXEC SQL BEGIN DELCARE SETION;...END...;语句中间。
31、不要定义字符串数组,因为是一维以上的数组。可以定义一个类型,使用类型数组。
32、在SQL文中引用指针变量时,要加前缀冒号,而不加星号。
33、所谓的宿主变量就是除指示器变量以外的SQL变量。
34、Pro*C不支持指针数组,也不支持一维以上的数组。
35、Varchar类型的变量包含两个成员:len长度、arr字符串。
36、调用共同部品时,需要传送地址的地方应该在变数前加地址符&。字符串不用。
37、'\0'为零值字符,也就是值为零的字符,可用于简化语句。
38、在给变量赋新值之前,最好先用初期化的方法清除其数据。
39、DEBUG控件中的内容是注释,不被执行。生成详细设计书时会列到详细处理中。
40、直接转记的出力内容在生成详细设计书时会被自动生成,可以不用填写。
41、SQL文中可以使用带下标的变量。
42、SELECT-INTO控件中,可以查询"COUNT(*)",但尽量用COUNT(<字段名>)代替。
43、在生成pc文件时,每两个\生成一个\。
44、CASE控件下的每一个OF只能写一个值,生成pc文件时会转化成if语句。
45、字符可以直接用等号==判断,字符串不行,需要使用比较函数。
46、出力处理时,处理条件中作为判断条件的列应该从“表”页的对应的表中选取。
47、对于char*类型的变量,不要使用sizeof()函数。
48、文件驱动在一个程序中只打开关闭一次,每读一次都会向下走一条记录。与SELECT-INTO不同。
49、直接转记不能转记成功的字段,可使用处理式转记,将字段拖到处理式转记框中。
50、取得main中引数的方法:
if (argc == 2) {
memcpy(..., argv[1], ...); //argv[n]为引数值
}else{
exit(1);
}
51、字符串连接方法:strcat用strncat函数代替
if (strlen(a) + strlen(b) < sizeof(a)) {
strncat(a, b, sizeof(a) - strlen(a) - 1);
}
52、添加自定义函数的方法:在JOBSTEP处的階下层追加以下控件
Global前记述:用于写函数声明。
Global后记述:用于写函数定义。
在Global階下层先添加Free记述控件,在该控件处可添加其它控件。
0 0
原创粉丝点击