返回首页

gbase数据、南大通用产品文档:GBase8a

更新日期:2024年09月11日

GBA-02BR-0040
错误码
错误标识
错误信息
GBA-02BR-0040

Catch error raise by process
错误出现原因
捕获进程抛出异常
分析与建议
检查日志,进一步确定进程错误

dececvt() 和 decfcvt() 函数相似,对于“UNIX(TM) 程序员手册”的第三部分中
ECVT(3) 之下的子例程。dececvt() 函数的工作方式与 ecvt(3) 函数相同,decfcvt() 函数的
工作方式与 fcvt(3) 函数相同。它们都将 decimal 类型数值转换为 C char 类型值。

语法
char *dececvt(dec_val, ndigit, decpt, sign)
dec_t *dec_val;
mint ndigit;
mint *decpt;
mint *sign;

char *decfcvt(dec_val, ndigit, decpt, sign)
dec_t *dec_val;
mint ndigit;
mint *decpt;

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

mint *sign;
dec_val
指向包含您想要这些函数来转换的 decimal 值的 decimal 结构的指针。
ndigit
dececvt() 的 ASCII 字符串的长度。它是 decfcvt() 的小数点右边的数字的数目。
decpt
指向一个整数的指针,该整数是小数点相对于字符串起点的位置。*decpt 的负值或零
意味着在返回的数字的左边。
sign
指向结果的符号的指针。 如果结果的符号为负,则 *sign 非零;否则,*sign 为零。


用法

dececvt() 函数将 np 指向的 decimal 值转换为 ndigit ASCII 数字的以空结尾的字符
串,并返回指向该字符串的指针。对此函数的后续调用重写该字符串。

dececvt() 函数对低位数字四舍五入。

decfcvt() 函数与 dececvt() 相同,除了 ndigit 指定小数点右边的数字的数目,而不是
数字的总数目之外。

让 dec_val 指向 12345.67 的 decimal 值,并阻止除了 ndigit 之外的所有参数。对
于四个不同的 ndigit 值,下表展示 dececvt() 函数返回的值。

ndigit 值
返回字符串
*decpt 值
*sign
4
"1235"
5
0
10
"1234567000"
5
0
1
"1"
5
0
3
"123"
5
0

要获取 dec_val 和 ndigit 值的更多示例,请参阅 dececvt() 的示例上
dececvt.ec 演示程序的样例输出。

重要:
当您编写线程安全 GBase
8s
ESQL/C 应用程序时,
请不要使用 dececvt()

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

或 decfcvt() 库函数。
反而,
请使用它们的线程安全等价的 ifx_dececvt() 和
ifx_decfcvt() 函数。

dececvt() 的示例

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

The following program converts a series of DECIMAL numbers to fixedm strings of 20
ASCII digits. For each conversion it displays the resulting string, the decimal position from
the beginning of the string and the sign value.
*/

#include

EXEC SQL include decimal;


char *strings[] =
{
"210203.204",
"4894",
"443.334899312",
"-12344455",
"12345.67",
".001234",
0
};

char result[40];

main()
{

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

mint x;
mint i = 0, f, sign;
dec_t num;
char *dp, *dececvt();

printf("DECECVT Sample ESQL Program running.\n\n");
while(strings[i])
{
if (x = deccvasc(strings[i], strlen(strings[i]), #))
{
printf("Error %d in converting string [%s] to DECIMAL\n",x, strings[i]);
break;
}
printf("\Input string[%d]: %s\n", i, strings[i]);

/* to 20-char ASCII string */

dp = dececvt(#, 20, &f, &sign);
printf(" Output of dececvt(#, 20, ...): %c%s decpt: %d sign: %d\n",
(sign ? '-' : '+'), dp, f, sign);

/* display result */

/* to 10-char ASCII string */

dp = dececvt(#, 10, &f, &sign);
printf(" Output of dececvt(#, 10, ...): %c%s decpt: %d sign: %d\n",(sign ? '-' : '+'),
dp, f, sign);

/* to 4-char ASCII string */

dp = dececvt(#, 4, &f, &sign);


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

/* display result */
printf(" Output of dececvt(#, 4, ...): %c%s decpt: %d
sign: %d\n",(sign ? '-' : '+'), dp, f, sign);

/* to 3-char ASCII string */
dp = dececvt(#, 3, &f, &sign);

/* display result */
printf(" Output of dececvt(#, 3, ...): %c%s decpt: %d sign: %d\n", (sign ? '-' : '+'),
dp, f, sign);

/* to 1-char ASCII string */
dp = dececvt(#, 1, &f, &sign);

/* display result */
printf(" Output of dececvt(#, 1, ...): %c%s decpt:
%d sign: %d\n",(sign ? '-' : '+'), dp, f, sign);

++i; /* next string */
}
printf("\nDECECVT Sample Program over.\n\n");
}
dececvt() 的输出
DECECVT Sample ESQL Program running.

Input string[0]: 210203.204
Output of dececvt: +2102 decpt: 6 sign: 0
Output of dececvt: +2102032040 decpt: 6 sign: 0
Output of dececvt: +2 decpt: 6 sign: 0
Output of dececvt: +210 decpt: 6 sign: 0

Input string[1]: 4894
Output of dececvt: +4894 decpt: 4 sign: 0

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

Output of dececvt: +4894000000 decpt: 4 sign: 0
Output of dececvt: +5 decpt: 4 sign: 0
Output of dececvt: +489 decpt: 4 sign: 0

Input string[2]: 443.334899312
Output of dececvt: +4433 decpt: 3 sign: 0
Output of dececvt: +4433348993 decpt: 3 sign: 0
Output of dececvt: +4 decpt: 3 sign: 0
Output of dececvt: +443 decpt: 3 sign: 0

Input string[3]: -12344455
Output of dececvt: -1234 decpt: 8 sign: 1
Output of dececvt: -1234445500 decpt: 8 sign: 1
Output of dececvt: -1 decpt: 8 sign: 1
Output of dececvt: -123 decpt: 8 sign: 1

Input string[4]: 12345.67
Output of dececvt: +1235 decpt: 5 sign: 0
Output of dececvt: +1234567000 decpt: 5 sign: 0
Output of dececvt: +1 decpt: 5 sign: 0
Output of dececvt: +123 decpt: 5 sign: 0

Input string[5]: .001234
Output of dececvt: +1234 decpt: -2 sign: 0
Output of dececvt: +1234000000 decpt: -2 sign: 0
Output of dececvt: +1 decpt: -2 sign: 0
Output of dececvt: +123 decpt: -2 sign: 0

DECECVT Sample Program over.

decfcvt() 的示例

demo 目录中的文件 decfcvt.ec 包含下列示例程序。

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

/*
* decfcvt.ec *
The following program converts a series of DECIMAL numbers to strings of ASCII
digits with 3 digits to the right of the decimal point. For each conversion it displays the
resulting string, the position of the decimal point from the beginning of the string and the sign
value. */

#include

EXEC SQL include decimal;

char *strings[] =
{
"210203.204",
"4894",
"443.334899312",
"-12344455",
0
};

main()
{
mint x;
dec_t num;
mint i = 0, f, sign;
char *dp, *decfcvt();

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

while(strings[i])
{
if (x = deccvasc(strings[i], strlen(strings[i]), #))
{
printf("Error %d in converting string [%s] to DECIMAL\n", x, strings[i]);

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

break;
}

dp = decfcvt(#, 3, &f, &sign); /* to ASCII string */

/* display result */
printf("Input string[%d]: %s\n", i, strings[i]);
printf(" Output of decfcvt: %c%*.*s.%s decpt: %d sign: %d\n\n", (sign ?
'-' : '+'), f, f, dp, dp+f, f, sign);
++i; /* next string */
}
printf("\nDECFCVT Sample Program over.\n\n");
}
decfcvt() 的输出

DECFCVT Sample ESQL Program running.

Input string[0]: 210203.204
Output of decfcvt: +210203.204 decpt: 6 sign: 0

Input string[1]: 4894
Output of decfcvt: +4894.000 decpt: 4 sign: 0

Input string[2]: 443.334899312
Output of decfcvt: +443.335 decpt: 3 sign: 0

Input string[3]: -12344455
Output of decfcvt: -12344455.000 decpt: 8 sign: 1
DECFCVT Sample Program over.

使用 USERMAPPING 配置参数来设置数据库服务器是否接受来自映射用户的连接。
缺省值
OFF

OFF = 仅在有登录服务的 GBase 8s 主机计算机 OS 中注册的那些用户可连接到数据库服
务器。在 GBase 8s 主机计算机上没有 OS 账号的外部认证的用户不可连接到数据库服务
器资源。
BASIC = 没有 OS 账户的用户可连接到 GBase 8s 。即使没有 OS 账户的用户映射到服务
器管理员用户或组 ID,该用户也不可在数据库服务器上执行有权限的用户操作。
ADMIN = 没有 OS 账户的用户可连接到 GBase 8s 。如果用户以一个有权限的用户身份得
到认证,且映射到正确的服务器管理员组 ID,则该用户可在数据库服务器上执行 DBSA、
DBSSO 或 AAO 的工作。
生效
编辑 onconfig 文件并重启数据库服务器之后。
当您通过运行 onmode -wf 命令在 onconfig 文件中动态地重置该值时。
当您通过运行 onmode -wm 命令重置内存中的该值时。
用法

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 169 -

当通过设置带有 BASIC 或 ADMIN 值的参数开启 USERMAPPING 时,在 GBase
8s 主机计算
机上没有操作系统
(OS)
账户的外部认证的用户可访问数据库服务器资源。
BASIC 或 ADMIN
的设置还确定映射用户能否获得管理权限。
重要:
在为映射的用户建立 GBase
8s 中,
将 USERMAPPING 配置参数从 OFF 更改为 ADMIN
或 BASIC 不是唯一的步骤。 要以适当的用户属性映射用户,您还必须使用诸如 CREATE
USER 和 ALTER
USER 这样的 DLL 语句,
在 SYSUSER 数据库的适当系统表中来注册这些值。

依赖于使用的 DDL 语句和定义的表映射,将更新或填入下列表:
l SYSINTAUTHUSERS
l SYSUSERMAP
l SYSSURORGATES
l SYSSURROGATEGROUPS