0

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

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

我正在使用 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,
};
4

2 回答 2

1

该注释仅说明该数组具有内部链接(static在此上下文中表示内部链接),这意味着它只能在当前翻译(编译)单元中访问。从定义来看,这有点明显,但我想这意味着明确表示它是故意的。这是一个注释,所以它对编译器没有任何意义。

于 2012-05-06T19:08:29.320 回答
1

我知道这是一篇旧文章,但我为我对 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)。第一个 1(索引 3)可能代表查询的类型(选择、获取、打开游标、关闭游标、连接等)。301(索引 6)很可能是查询语句字符串本身的长度。302(索引 7)指的是 Pro*C 在代码中插入的 pragma 语句。在我的系统上,我会在我的代码中搜索“#line 302”以查看对 CUD 的这一行的查询。索引 10 指的是与此查询相关联的绑定变量的数量(在本例中只有 2 个)。绑定变量本身的数据从索引 15 开始,每个变量有 4 个数据元素(在本例中都有 1、9、0、0)。这些值中的第一个确定绑定变量的使用方式。值 1 表示变量用于 where 子句。2 表示正在选择/提取的变量。第二个值(本例中为 9)指的是变量的类型(整数、字符等)。

我决定了解有关 CUD 的这些信息,以便我可以放入一些自定义日志记录代码,这些代码将在我的应用程序发生查询时输出查询。

于 2013-11-12T17:43:46.483 回答