对于特定于 GBase 8s 的给定错误编号,rgetlmsg() 函数检索相应的错误消息。
rgetlmsg() 函数允许在 long 整数范围内的错误编号。
语法
mint rgetlmsg(msgnum, msgstr, lenmsgstr, msglen)
int4 msgnum;
char *msgstr;
mint lenmsgstr;
mint *msglen;
GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 879 -
msgnum
错误编号。该四字节参数提供特定于 GBase 8s 的错误编号的完整范围。
msgstr
指向接收消息字符串的缓冲区(输出缓冲区)的指针。
lenmsgstr
msgstr 输出缓冲区的大小。使得此值为您期望检索的最大消息的大小。
msglen
指向包含 rgetlmsg() 返回的消息的实际大小的 mint 的指针。
用法
msgnum 错误编号通常是 SQLCODE
(或 sqlca.sqlcode)
的值。
您还可检索 ISAM 错
误的消息文本
(在 sqlca.sqlerrd[1] 中)
。
对于错误消息文本,
rgetlmsg() 函数使用 GBase
8s 错误消息文件(在 $GBASEDBTDIR/msg 目录中)。
rgetlmsg() 函数在第四个参数 msglen 中返回您请求的消息的实际大小。您可使用此
值来调整消息区域的大小,如果它太小的话。如果返回的消息比您提供的缓冲区还长,则
该函数截断该消息。
您还可使用 msglen 值来仅显示包含错误文本的 msgstr 消息缓冲区的
一部分。
返回代码
0
转换成功。
-1227
未找到消息文件。
-1228
在消息文件中未找到消息编号。
-1231
在消息文件中不可搜寻。
-1232
消息缓冲区太小。
示例
GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 880 -
此样例程序在 demo 目录中的 rgetlmsg.ec 文件中。
/*
* rgetlmsg.ec *
*
* The following program demonstrates the usage of rgetlmsg() function.
* It displays an error message after trying to create a table that already exists.
*/
EXEC SQL include sqlca; /* this include is optional */
main()
{
mint msg_len;
char errmsg[400];
printf("\nRGETLMSG Sample ESQL Program running.\n");
EXEC SQL connect to 'stores7';
EXEC SQL create table customer (name char(20));
if(SQLCODE != 0)
{
rgetlmsg(SQLCODE, errmsg, sizeof(errmsg), &msg_len);
printf("\nError %d: ", SQLCODE);
printf(errmsg, sqlca.sqlerrm);
}
printf("\nRGETLMSG Sample Program over.\n\n");
}
此示例使用 sqlca.sqlerrm 中的错误消息参数来显示表的名称。sqlca.sqlerrm 的此种
用法是有效的,因为该错误消息包含 printf() 认识的格式参数。如果错误消息不包含该格
式参数,则不会导致错误。
输出
GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 881 -
RGETLMSG Sample ESQL Program running.
Error -310: Table (gbasedbt.customer) already exists in database.
RGETLMSG Sample Program over.