返回首页

gbase数据、南大通用产品文档:GBase8s赋值给变量

更新日期:2024年09月11日

在 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;

函数说明
expr LIKE pat [ESCAPE 'escape-char']。
使用SQL 的简单的正则表达式进行比较的
模式匹配。如果表达式expr 匹配pat,返回1(TRUE),否则返回0(FALSE)。
模式未必就是文字字符串,例如,它可以使用字符串表达式或表列。可以在模式
中使用下面所示的两个通配符与LIKE 配合使用。
表5- 13 通配符说明
字符
含义
%
匹配任意多个字符,或零个字符。
_
严格地匹配一个字符。
示例
示例1:expr 与pat 相匹配,通配符为“_”,返回1。
gbase> SELECT 'David!' LIKE 'David_' FROM dual;
+------------------------+
| 'David!' LIKE 'David_' |
+------------------------+

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
732
|
1 |
+------------------------+
1 row in set
示例2:expr 与pat 相匹配,通配符为“%”,返回1。
gbase> SELECT 'David!' LIKE '%D%v%' FROM dual;
+-----------------------+
| 'David!' LIKE '%D%v%' |
+-----------------------+
|
1 |
+-----------------------+
1 row in set
说明
substr 在str 中的位置,以1 开始计数。
返回的位置是按全字符串正向位置计数的,与从哪个位置开始无关。
表5- 14 字符串说明
字符串
含义
\%
匹配一个%字符。
\_
匹配一个_字符。
示例3:expr 与pat 不匹配,返回0。
gbase> SELECT 'David!' LIKE 'David\_' FROM dual;
+-------------------------+
| 'David!' LIKE 'David\_' |
+-------------------------+
|
0 |
+-------------------------+
1 row in set
示例4:转义字符“\_”匹配“_”。
gbase> SELECT 'David_' LIKE 'David\_' FROM dual;
+-------------------------+
| 'David_' LIKE 'David\_' |
+-------------------------+
|
1 |
+-------------------------+
1 row in set

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
733
示例5:为了指定一个不同的转义字符,可以使用ESCAPE 子句。
gbase> SELECT 'David_' LIKE 'David|_' ESCAPE '|' FROM dual;
+------------------------------------+
| 'David_' LIKE 'David|_' ESCAPE '|' |
+------------------------------------+
|
1 |
+------------------------------------+
1 row in set
示例6
gbase> SELECT 'abc' LIKE 'ABC' FROM dual;
+------------------+
| 'abc' LIKE 'ABC' |
+------------------+
|
1 |
+------------------+
1 row in set
示例7
gbase> SELECT 'abc' LIKE BINARY 'ABC' FROM dual;
+-------------------------+
| 'abc' LIKE BINARY 'ABC' |
+-------------------------+
|
0 |
+-------------------------+
1 row in set
说明
以上示例6 和示例7 表明,字符串比较是忽略大小写的,除非任一
操作数是一个二进制字符串。
示例8:LIKE 允许用在一个数字表达式上。
gbase> SELECT 10 LIKE '1%' FROM dual;
+--------------+
| 10 LIKE '1%' |
+--------------+
|
1 |
+--------------+
1 row in set

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
734
注意

由于GBase 8a MPP Cluster 在字符串中使用C 转义语法(例如,用
“\n”代表一个换行字符),
在LIKE 字符串中,
必须将用到的“\”双写;

例如,若要查找“\n”,必须将其写成“\\n”。而若要查找“\”,
则必须将其写成‘\\\\’。原因是反斜线符号会被语法分析程序剥离一
次,在进行模式匹配时,又会被剥离一次,最后会剩下一个反斜线
符号接受匹配。

参数说明:设置回收站对象保留时间,超过该时间的回收站对象将被自动清理。
该参数属于SIGHUP 类型参数,请参考表15-1 中对应设置方法进行设置。
取值范围:整型,单位为s,最小值为1,最大值为2147483647。
默认值:15min(即900s)