南大通用 GBase 8sWITH FUNCTION 临时函数与 RPAD/LPAD 填充函数
大家好!本期为大家带来 GBase 8s 数据库中两个实用特性:WITH FUNCTION 临时函数声明语句,以及 RPAD/LPAD 字符串填充函数。这些特性在数据处理和查询优化中很实用,让我们一起来了解。
WITH FUNCTION 语句
WITH FUNCTION 仅在 GBase 8s 的 ORACLE 模式下支持。WITH FUNCTION 语句用于临时声明并定义存储函数。WITH FUNCTION 定义的函数对象不会存储到系统表中,且只在当前 SQL 语句内有效。

说明及限制:
1、<WITH FUNCTION> 语句定义函数 <function_declaration> 作用域<with_select_block >
所在的 SELECT 查询块内; < with_select_block > SELECT 查询块与 8s 现有语法规则保持一致。
2、在 SELECT 查询语句的 SELECT 关键字前允许使用<WITH FUNCTION>定义一个或多个自定义函数,并在后续 SELECT 语句中可以使用这些自定义函数,语法、行为与 8s 保持一致
3、数据库中存在同名自定义函数,优先使用通过 WITH FUNCTION 定义的存储函数。
例如,声明两个临时存储函数 add_string、doesnt_it 嵌套使用
WITH
FUNCTION add_string(p_string IN VARCHAR2) RETURN VARCHAR2
IS
l_buffer VARCHAR2(100);
BEGIN
l_buffer := p_string || ' works!';
RETURN l_buffer;
END;
FUNCTION doesnt_it(p_string IN VARCHAR2) RETURN VARCHAR2
IS
l_buffer VARCHAR2(100);
BEGIN
l_buffer := p_string || ' Doesnt it?';
RETURN l_buffer;
END;
SELECT doesnt_it(add_string('Yes, it')) as outVal FROM DUAL;
/
RESULT:
OUTVAL
--------
Yes, it works! Doesnt it?
RPAD 函数
RPAD 函数返回 source_string 的一个副本,右填充达到由 length 指定的总字节数。
RPAD(source_string,length[,pad_string])

RPAD 函数的任何参数都必须为内建的数据类型。
pad_string 参数指定要用来填充源字符串的一个或多个填充字符。
填充字符的序列出现的次数与使得返回字符串达到 length 指定的长度所必要的次数相同。如果pad_string 中的填充字符的序列太长,以至于不适应 length,则截断它。如果您省略 pad_string 参数,则缺省的值为单个空格(ASCII 32)字符。
返回数据类型是基于 source_string 和 pad_string 参数的,如果都指定了的话。如果主变量是源,则返回值为 NVARCHAR 或 NCHAR,根据返回的字符串的长度来确定,使用 来自 CONCAT 函数的返回类型部分描述的返回类型提升规则。
即使 RPAD 函数已将空字符追加到数据值之后,DB-Access 的 UNLOAD 特性也截断 CHAR 或
NCHAR 列中的末尾空格。您必须显式地将 CHAR 或 NCHAR 值强制转型为 VARCHAR、
LVARCHAR 或 NVARCHAR 数据类型,如果您需要 UNLOAD 保留 RPAD 返回的值中的末尾空
字符或不可打印的字符的话。
在下列示例中,用户指定将源字符串右填充到总长度 18 字符。用户还指定要使用的填充字符是由问号和叹号(?!)组成的序列
SELECT RPAD('Where are you', 18, '?!') FROM mytable;
下列表格展示此 SELECT 语句的输出。

LPAD 函数
LPAD 函数返回 source_string 的一个副本,左填充达到由 length 指定的总字节数。


LPAD 函数的任何参数都必须为内建的数据类型。
pad_string 参数指定要被用于填充源字符串的一个或多个字符。填充字符的序列出现的次数与使得返回字符串达到 length 指定的存储长度的必要次数相同。
如果 pad_string 中的填充字符的序列太长,以至于不适应 length,则截断它。如果您未指定pad_string,则缺省值为单个空(ASCII 32)字符。
返回数据类型是基于这三个参数的,使用 来自 CONCAT 函数的返回类型 部分描述的返回类型提升规则。
在下列示例中,用户指定要将源字符串左填充达到总长度 16 字节。用户还指定填充字符是由连字符和下划线(-_)组成的序列。
SELECT LPAD('Here we are', 16, '-_') FROM mytable;
下列表格展示此 SELECT 的输出

用例:
With function pr1 return int is
V1 CHAR(32767);
Begin
V1:=rpad(‘test’,500,’p’)
Return (length(V1));
End;
Select pr1() from dual;
/WITH FUNCTION 为 GBase 8s 用户提供了临时函数定义能力,无需持久化到数据库即可在复杂查询中复用逻辑;RPAD/LPAD 函数则为字符串格式化提供了便捷的填充方案。两者结合使用,能够有效简化 SQL 开发,提升数据处理效率。欢迎大家下载试用 GBase 8s,体验这些实用特性!如有任何问题或建议,欢迎在社区留言讨论。
评论
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25044
- 42023-09-25浏览数:18519
- 52020-05-11浏览数:17526