在 SPL 例程内,请使用 LET 语句将值分配给您已定义的变量。 如果您未赋值给变量,或通过传递给例程的参数,或通过 LET 语句,则该变量有未定义 的值。 未定义的值与 NULL 值不同。如果您尝试以 SPL 例程内未定义的值使用变量,则会收到 错误。 您可以下列任一方式赋值给例程变量: • 使用 LET 语句。 • 使用 SELECT INTO 语句。 • 将 CALL 语句与带有 RETURNING 子句的过程一起使用。 • 使用 EXECUTE PROCEDURE INTO 或 EXECUTE FUNCTION INTO 语句。
LET 语句 以 LET 语句,您可以等号(=)和有效的表达式或函数名称来使用一个或多个变量名称。 下图中的每一示例都是有效的 LET 语句。 图: 有效的 LET 语句。 LET a = 5; LET b = 6; LET c = 10; LET a,b = 10,c+d; LET a,b = (SELECT cola,colb FROM tab1 WHERE cola=10); LET d = func1(x,y); GBase 8s 允许您将值分配给 opaque 类型变量、row 类型变量,或 row 类型的字段。您还 可将外部函数或另一 SPL 函数的值返回到 SPL 变量。 假设您定义命名的 row 类型 zip_t 和 address_t,如 图 1 所示。每当您定义 row 类型变量 时,您必须在可使用它之前初始化该变量。下图展示您可能如何定义和初始化 row 类型变 量。您可使用任何 row 类型值来初始化该变量。 图: 定义和初始化 row 类型变量。
GBase 8s SQL 指南:教程 南大通用数据技术股份有限公司 - 278 -
DEFINE a address_t; LET a = ROW ('A Street', 'Nowhere', 'AA', ROW(NULL, NULL))::address_t 在您定义并初始化 row 类型变量之后,您可编写下图所示的 LET 语句。 图: 编写 LET 语句。 LET a.zip.z_code = 32601; LET a.zip.z_suffix = 4555; -- Assign values to the fields of address_t 提示: 请以 variable.field or variable.field.field 的形式使用点符号表示法来访问 row 类型的字 段,如 处理 row 类型数据 描述的那样。 假设您定义 opaque-type point,其包含定义二维点的两个值,且该值的文本表示为 '(x,y)'。 您还可能有计算圆的周长的函数 circum(),给定的点 '(x,y)' 和半径 r。 如果您定义以一点为圆心的 opaque 类型 center,以及计算圆的周长的函数 circum(),基于 点和半径,您可为每一变量编写变量声明。在下图中,c 是一个 opaque 类型变量,d 保存 外部函数 circum() 返回的值。 图: 编写变量声明。 DEFINE c point; DEFINE r REAL; DEFINE d REAL;
LET c = '(29.9,1.0)' ; -- Assign a value to an opaque type variable
LET d = circum( c, r ); -- Assign a value returned from circum() GBase 8s SQL 指南:语法 详细地描述 LET 语句的语法。