【发布时间】:2012-01-10 16:03:04
【问题描述】:
我在以下场景中运行,这让我很头疼,因为我找不到我所看到的行为的确切解释。我声明了以下内容:
struct test_struct
{
long testv1;
char testv2[51];
long testv3;
};
以及Oracle 10g中对应的表:
CREATE TABLE test_table
(
testv1 NUMBER(10, 0),
testv2 VARCHAR(50),
testv3 NUMBER(4, 0)
);
要访问此表中的数据,我有一个函数:
bool getTestData(long test_var1, struct test_struct *outStruct)
在这里我看到了我需要解释但不能解释的差异。如果函数体如下所示:
EXEC SQL BEGIN DECLARE SECTION;
long testvar1_param = test_var1;
struct test_struct *resStruct = outStruct;
EXEC SQL END DECLARE SECTION;
EXEC SQL SELECT testv1, testv2, testv3
INTO :resStruct
FROM test_table
WHERE testv1 = :testvar1_param;
如果函数的主体看起来像这样,我会得到较慢的性能:
EXEC SQL BEGIN DECLARE SECTION;
long testvar1_param = test_var1;
long *testv1_res = &(outStruct->testv1);
char *testv2_res = outStruct->testv2;
long *testv3_res = &(outStruct->testv3);
EXEC SQL END DECLARE SECTION;
EXEC SQL SELECT testv1, testv2, testv3
INTO :testv1_res, :testv2_res, :testv3_res
FROM test_table
WHERE testv1 = :testvar1_param;
第二次的表现相差很大。
有谁知道什么可以解释这种行为?
【问题讨论】:
标签: c++ c oracle oracle10g oracle-pro-c