cud(编译单元数据)数组值的意义是什么?

时间:2012-05-06 17:56:04

标签: c++ oracle

(编译单元)数组值的意义是什么?

如何确定我的程序需要什么价值?

我正在使用Linux 5和Oracle 11g。

请解释如下:

/*  (compilation unit ) array */
static const short sql0[] =
{12,4130,1,0,0,
5,0,0,1,0,0,273,111,0,0,1,1,0,1,0,1,9,0,0,
24,0,0,2,0,0,273,136,0,0,1,1,0,1,0,1,9,0,0,
43,0,0,3,0,0,273,161,0,0,1,1,0,1,0,1,9,0,0,
62,0,0,4,0,0,273,184,0,0,1,1,0,1,0,1,9,0,0,
81,0,0,5,0,0,273,212,0,0,1,1,0,1,0,1,9,0,0,
100,0,0,6,0,0,273,238,0,0,1,1,0,1,0,1,9,0,0,
119,0,0,7,0,0,273,262,0,0,1,1,0,1,0,1,9,0,0,
138,0,0,1,0,0,301,302,0,0,2,2,0,1,0,1,9,0,0,1,9,0,0,
161,0,0,1,0,0,269,306,0,0,1,0,0,1,0,2,9,0,0,
180,0,0,2,0,0,301,343,0,0,1,1,0,1,0,1,9,0,0,
199,0,0,2,0,0,269,348,0,0,2,0,0,1,0,2,9,0,0,2,9,0,0,
222,0,0,3,0,0,277,394,0,0,2,2,0,1,0,1,9,0,0,1,9,0,0,
245,0,0,3,0,0,277,419,0,0,1,1,0,1,0,1,9,0,0,
264,0,0,5,0,0,277,455,0,0,3,3,0,1,0,1,9,0,0,1,9,0,0,1,9,0,0,
291,0,0,6,0,0,277,493,0,0,3,3,0,1,0,1,9,0,0,1,9,0,0,1,9,0,0,
318,0,0,7,0,0,301,524,0,0,1,1,0,1,0,1,9,0,0,
337,0,0,7,0,0,269,525,0,0,1,0,0,1,0,2,9,0,0,
};

2 个答案:

答案 0 :(得分:0)

注释仅表明数组具有内部链接(在此上下文中为static表示内部链接),这意味着它只能在当前转换(编译)单元中访问。从定义来看,这有点令人厌恶,但我想这意味着明确表示它是有意的。这是一个注释,因此它对编译器没有意义。

答案 1 :(得分:0)

我知道这是一篇很老的帖子,但我为我对Oracle CUD的分析感到自豪,并且无法展示它!

CUD是一个很大的整数数组,用于描述使用Pro * C编译的文件中嵌入式SQL语句的各个方面。通过实验,我对这些数据的结构及其使用方式进行了有根据的猜测。请记住,我已经使用Oracle 11完成了对Solaris的研究,并且我使用的CUD数据看起来与您在此处略有不同,因此数据值的位置可能不同。这是您数据中的随机行:

138,0,0,1,0,0,301,302,0,0,2,2,0,1,0,1,9,0,0,1,9,0,0,

CUD的每一行(除了前6个值)都以全局偏移开始。在这种情况下,它是138(索引0)。第一个(索引3)可能代表查询的类型(选择,获取,打开游标,关闭游标,连接等)。 301(索引6)很可能是查询语句字符串本身的长度。 302(索引7)引用Pro * C在代码中插入的pragma语句。在我的系统上,我会在我的代码中搜索“#line 302”,以查看CUD这一行的查询。索引10指的是与此查询关联的绑定变量数量(在这种情况下仅为2)。绑定变量本身的数据从索引15开始,每个变量有4个数据元素(在这种情况下都有1,9,0,0)。这些值中的第一个确定如何使用绑定变量。值为1表示该变量用于where子句。 A 2表示选择/获取的变量。第二个值(在本例中为9)是指变量的类型(整数,字符等)。

我决定学习有关CUD的这些信息,这样我就可以输入一些自定义日志代码,这些代码会在我的应用程序中输出查询。