返回首页

gbase数据、南大通用产品文档:GBase8s事务处理

更新日期:2024年09月11日


GBase 8s ODBC Driver 程序员指南
南大通用数据技术股份有限公司
- 26 -
事务隔离级别和事务模式的 GBase 8s ODBC Driver 实现与这些特性的 Microsoft™
ODBC 实现略有不同。
下列主题描述 GBase 8s ODBC Driver 中事务隔离级别和事务模式的实现。
事务隔离级别
GBase 8s ODBC Driver 支持 GBase 8s 数据库服务器的三个事务隔离级别。
对于 GBase 8s 数据库服务器,下表罗列 GBase 8s ODBC Driver 支持的事务隔离级别。

数据库服务器
事务隔离级别
GBase 8s

SQL_TXN_READ_COMMITTED

SQL_TXN_READ_UNCOMMITTED

SQL_TXN_SERIALIZABLE
缺省的事务隔离级别为 SQL_TXN_READ_COMMITTED。要更改事务隔离级别,请以
SQL_TXN_ISOLATION 的 fOption 值来调用 SQLSetConnectOption()。
要获取关于事务隔离级别的更多信息,请参阅《GBase 8s ODBC Driver 程序员指南》中
的 SQL_DEFAULT_TXN_ISOLATION 和 SQL_TXN_ISOLATION_OPTION 描述。
更改事务模式
您可将事务模式从它缺省的 auto-commit 更改为 manual commit。
要将事务模式更改为 manual commit,请:
1.
为数据库服务器启用事务日志记录。
要获取关于事务日志记录的信息,请参阅 GBase 8s 管理员指南。
2.
调用 SQLSetConnectOption(),将 SQL_AUTOCOMMIT 设置为
SQL_AUTOCOMMIT_OFF。

dectoasc() 函数将 decimal 类型数值转换为 C char 类型值。
语法
mint dectoasc(dec_val, strng_val, len, right)
dec_t *dec_val;
char *strng_val;
mint len;
mint right;
dec_val
指向 dectoasc() 将其值转换为文本字符串的 decimal 结构的指针。
strng_val
指向 dectoasc() 函数放置文本字符串所在的字符缓冲区的第一个字节的指针。
len
以字节计的 strng_val 的大小,对于空终止符,为负 1。
right
指示小数点右边小数位的数目的整数。

用法
如果 right = -1,dec_val 的小数确定小数位的数目。

如果 decimal 数目不适于长度 len 的字符串,则 dectoasc()() 将该数值转换为指数
表示方法。如果该数目仍不适合,则 dectoasc() 以星号填充该字符串。如果该数目比字符
串段,则 dectoasc() 左向调整该数值,并以空格补在右边。

由于 dectoasc()() 返回的字符串不是以空结尾的,因此,在您打印它之前,您的程序
必须将空字符添加到该字符串。


GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 658 -

返回代码
0
转换成功。
-1
转换失败。

示例

demo 目录中的文件 dectoasc.ec 包含下列样例程序。
/*
* dectoasc.ec *

The following program converts DECIMAL numbers to strings of varying sizes.
*/

#include

EXEC SQL include decimal;

#define END sizeof(result)

char string1[] = "-12345.038782";
char string2[] = "480";
char result[40];

main()
{
mint x;
dec_t num1, num2;

printf("DECTOASC Sample ESQL Program running.\n\n");


GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 659 -

printf("String Decimal Value 1 = %s\n", string1);
if (x = deccvasc(string1, strlen(string1), &num1))
{
printf("Error %d in converting string1 to DECIMAL\n", x);
exit(1);
}
printf("String Decimal Value 2 = %s\n", string2);
if (x = deccvasc(string2, strlen(string2), &num2))
{
printf("Error %d in converting string2 to DECIMAL\n", x);
exit(1);
}

printf("\nConverting Decimal back to ASCII\n");
printf(" Executing: dectoasc(&num1, result, 5, -1)\n");
if (x = dectoasc(&num1, result, 5, -1))
printf("\tError %d in converting DECIMAL1 to string\n", x);
else
{
result[5] = '\0'; /* null terminate */
printf("\tResult ='%s'\n", result);
}

printf("Executing: dectoasc(&num1, result, 10, -1)\n");
if (x = dectoasc(&num1, result, 10, -1))
printf("Error %d in converting DECIMAL1 to string\n", x);
else
{
result[10] = '\0'; /* null terminate */
printf("\tResult = '%s'\n", result);
}

printf("Executing: dectoasc(&num2, result, END, 3)\n");

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 660 -

if (x = dectoasc(&num2, result, END, 3))
printf("\tError %d in converting DECIMAL2 to string\n", x);
else
{
result[END-1] = '\0'; /* null terminate */
printf("\tResult = '%s'\n", result);
}

printf("\nDECTOASC Sample Program over.\n\n")
}
输出

DECTOASC Sample ESQL Program running.

String Decimal Value 1 = -12345.038782
String Decimal Value 2 = 480

Converting Decimal back to ASCII
Executing: dectoasc(&num1, result, 5, -1)
Error -1 in converting decimal1 to string
Executing: dectoasc(&num1, result, 10, -1)
Result = '-12345.039'
Executing: dectoasc(&num2, result, END, 3)
Result = '480.000'
DECTOASC Sample Program over.

allocate_mem_cost
参数说明:
设置优化器计算Hash Join创建Hash表开辟内存空间所需的开销,
供Hash join
估算不准时调优使用。
该参数属于USERSET 类型参数,请参考表15-1 中对应设置方法进行设置。
取值范围:浮点型,0~DBL_MAX。
默认值:0