返回首页

gbase数据、南大通用产品文档:GBase8s更新 row 类型表达式

更新日期:2024年09月11日

从 SPL 例程内,
您可使用 ROW 变量来更新 row 类型表达式。
下图展示当员工的基本薪
酬按某一百分比增长时,用于更新 emp_info 表的 SPL 过程 emp_raise。
图: 用于更新 emp_info 表的 SPL 过程。
CREATE PROCEDURE emp_raise( name VARCHAR(30),
pct DECIMAL(3,2) )

DEFINE row_var salary_t;

SELECT salary INTO row_var FROM emp_info
WHERE emp_name = name;

LET row_var.base = row_var.base * pct;

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 292 -


UPDATE emp_info SET salary = row_var
WHERE emp_name = name;
END PROCEDURE;
SELECT 语句将来自 emp_info 表的 salary 列的行选择到 ROW 变量 row_var 内。
emp_raise 过程使用 SPL 点符号表示法来直接地访问变量 row_var 的 base 字段。在此情况
下,点符号表示法意味着 variable.field。emp_raise过程重新计算 row_var.base 的值作
为 (row_var.base * pct)。然后,该过程以新的 row_var 值来更新 emp_info 表的 salary 列。
重要: 在可设置或引用 row 类型变量字段之前,必须将它初始化为行。您可以 SELECT INTO
语句或 LET 语句初始化 row 类型变量。

rstod() 函数将以空终止的字符串转换为 double 值。

语法
mint rstod(string, double_val)
char *string;
double *double_val;
string
指向以空终止的字符串的指针。
double_val
指向保存转换了的值的 double 值的指针。

用法
=0
转换成功。
!=0
转换失败。

示例

此样例程序在 demo 目录中的 rstod.ec 文件中。
/*
* rstod.ec *

The following program tries to convert three strings to doubles. It displays the result of each
attempt.
*/

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

#include

main()
{
mint errnum;
char *string1 = "1234567887654321";
char *string2 = "12345678.87654321";
char *string3 = "zzzzzzzzzzzzzzzz";
double d;

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

printf("Converting String 1: %s\n", string1);
if ((errnum = rstod(string1, &d)) == 0)
printf("\tResult = %f\n\n", d);
else
printf("\tError %d in conversion of string 1\n\n", errnum);

printf("Converting String 2: %s\n", string2);
if ((errnum = rstod(string2, &d)) == 0)
printf("\tResult = %.8f\n\n", d);
else
printf("\tError %d in conversion of string 2\n\n", errnum);

printf("Converting String 3: %s\n", string3);
if ((errnum = rstod(string3, &d)) == 0)
printf("\tResult = %.8f\n\n", d);
else
printf("\tError %d in conversion of string 3\n\n", errnum);

printf("\nRSTOD Sample Program over.\n\n");
}

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 900 -
输出
RSTOD Sample ESQL Program running.

Converting String 1: 123456788764321
Result = 1234567887654321.000000

Converting String 2: 12345678.87654321
Result = 12345678.87654321

Converting String 3: zzzzzzzzzzzzzzzz
Error -1213 in conversion of string 3

RSTOD Sample Program over.

syssurrogateauth 系统目录表会存储可信用户和代理用户信息。
运行 GRANT SETSESSIONAUTH 语句时会填充 syssurrogateauth 系统目录表。TO 子句
中指定的用户或角色将添加到 trusteduser 列中。ON 子句中指定的用户将添加到
surrogateuser 列中。
例如,考虑如下语句:
GRANT SETSESSIONAUTH ON bill, john TO mary, peter;
syssurrogateauth 表中的条目将按如下所示创建:
trusteduser surrogateuser

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 63 -

mary bill
mary john
peter bill
peter john
syssurrogateauth 表具有以下列。
表 30. SYSSURROGATEAUTH 表列描述

类型
解释
trusteduser
CHAR(32)
可信用户名或角色。
surrogateuser
CHAR(32)
代理用户名。