返回首页

gbase数据、南大通用产品文档:GBase8srstoi() 函数

更新日期:2024年09月11日

rstoi() 函数将以空终止的字符串转换为 short integer 值。

语法

mint rstoi(string, ival)
char *string;
mint *ival;
string
指向以空终止的字符串的指针。
ival
指向保存转换了的值的 mint 值的指针。

用法
值的合法范围为 -32767 - 32767。值 -32768 不是有效的,因为此值为指示空的保留
值。

如果 string 对应于空整数,则 ival 指向 SMALLINT 空的表示。要转换对应于 long
integer 的字符串,请使用 rstol()。该操作的失败可导致错误的数据表示。

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


返回代码
=0
转换成功。
!=0
转换失败。

示例

此样例程序在 demo 目录中的 rstoi.ec 文件中。
/*
* rstoi.ec *
The following program tries to convert three strings to integers. It displays the result of
each conversion.
*/

#include

EXEC SQL include sqltypes;

main()
{
mint err;
mint i;
short s;

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

i = 0;
printf("Converting String 'abc':\n");
if((err = rstoi("abc", &i)) == 0)
printf("\tResult = %d\n\n", i);
else

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

printf("\tError %d in conversion of string #1\n\n", err);

i = 0;
printf("Converting String '32766':\n");
if((err = rstoi("32766", &i)) == 0)
printf("\tResult = %d\n\n", i);
else
printf("\tError %d in conversion of string #2\n\n", err);

i = 0;
printf("Converting String '':\n");
if((err = rstoi("", &i)) == 0)
{
s = i; /* assign to a SHORT variable */
if (risnull(CSHORTTYPE, (char *) &s))
/* and then test for NULL */
printf("\tResult = NULL\n\n");
else
printf("\tResult = %d\n\n", i);
}
else
printf("\tError %d in conversion of string #3\n\n", err);

printf("\nRSTOI Sample Program over.\n\n");
}
输出
RSTOI Sample ESQL Program running.

Converting String 'abc':
Error -1213 in conversion of string #1

Converting String '32766':
Result = 32766

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


Converting String '':
Result = NULL

RSTOI Sample Program over.

如果通过循环来处理结果集,并且对每一行都执行了另一个查询,则可以通过移除循
环中的第二个查询,并使之成为第一个查询的子查询。普通的子查询对每个表进行评估,
相关子查询对每一行进行评估。

GBase 8s PL/SQL手册
南大通用数据技术股份有限公司
- 109 -

DECLARE
CURSOR c1 IS
SELECT t1.department_id, department_name, staff
FROM departments t1,
( SELECT department_id, COUNT(*) AS staff
FROM employees
GROUP BY department_id
) t2
WHERE (t1.department_id = t2.department_id) AND staff >= 5
ORDER BY staff;
BEGIN
FOR dept IN c1
LOOP
DBMS_OUTPUT.PUT_LINE ('Department = ' || dept.department_name || ', staff = ' || dept.staff);
END LOOP;
END;

--Result:
--Department = IT, staff = 5
--Department = Finance, staff = 6
--Department = Purchasing, staff = 6
--Department = Sales, staff = 34
--Department = Shipping, staff = 45
相关子查询
DECLARE
CURSOR c1 IS
SELECT department_id, last_name, salary
FROM employees t
WHERE salary > ( SELECT AVG(salary)
FROM employees
WHERE t.department_id = department_id
)
ORDER BY department_id, last_name;
BEGIN
FOR person IN c1
LOOP
DBMS_OUTPUT.PUT_LINE('Making above-average salary = ' || person.last_name);
END LOOP;
END;

--Result:
--Making above-average salary = Hartstein

GBase 8s PL/SQL手册
南大通用数据技术股份有限公司
- 110 -

--Making above-average salary = Raphaely
--Making above-average salary = Bell
--...
--Making above-average salary = Higgins

readString() 方法读取数据流中下一个属性作为 Java™ 字符串。readBytes() 读取数据流中下
一个属性作为 Java 字节组。这两种方法类似于SQLInput.readBytes() 方法,只是读入的是
固定长度的数据:
public String readString(int maxlen) throws SQLException;
public byte[] readBytes(int maxlen) throws SQLException;
在这两种方法中,您必须提供长度,以便 GBase 8s JDBC Driver 可以适当地读取下一个属
性,因为驱动程序不知道不透明数据类型的特征。maxlen参数指定读入数据的最大长度。