返回首页

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

更新日期:2024年09月11日

Unknown object type
如果此对象类型是空的不透明类型,则此类型无法被识别和处理。如果对象类型是复杂类
型,则集合中或数组中的数据是未知的类型,无法映射到GBase 8s 类型。如果此对象类型
为行,则此行中的元素不能映射到 GBase 8s 类型。请验证该自定义类型映射或对象的数据
类型。

功能
这个参数用于控制是否启用集群查询的starschema 优化。
集群outer join 的starschema 优化,例如:
SELECT * FROM t1 LEFT JOIN t2 ON t1.id= t2.id WHERE t1.a = x
被优化成
SELECT * FROM t1 LEFT JOIN t2 ON t1.id = t2.id AND t2.id IN (SELECT t1.id FROM t1 WHERE
t1.a = x) WHERE t1.a = x
使用该优化后就避免了把整个t2 表拉成一个复制表。
参数取值含义说明

参数= 0 关闭;

参数= 1 启用。
该参数的默认值是0。
表6- 23 参数值范围说明表
默认值
最小值
最大值
0
0
1

在 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 指南:教程
南大通用数据技术股份有限公司
- 284 -
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 语句的语法。

赋值给变量的其他方式
您可使用 SELECT 语句来从数据库访存一个值,并直接地将它分配给变量,如下图所示。

图: 从数据库访存一个值,并直接地将它分配给变量。
SELECT fname, lname INTO a, b FROM customer
WHERE customer_num = 101
请使用 CALL 或 EXECUTE PROCEDURE 语句来将由 SPL 函数或外部函数返回的值分
配给一个或多个 SPL 变量。您可能使用下图中的一个语句来将来自 SPL 函
数 read_address 的全名和地址返回到指定的 SPL 变量内。

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 285 -
图: 返回来自 SPL 函数的全名和地址。
EXECUTE FUNCTION read_address('Smith')
INTO p_fname, p_lname, p_add, p_city, p_state,
p_zip;

CALL read_address('Smith')
RETURNING p_fname, p_lname, p_add, p_city,
p_state, p_zip;