GBASE 8s 自定义存储过程和函数使用

存储过程及函数的语法结构

1) 创建存储过程和 SPL 函数

在 SPL 中创建存储过程的一般格式如下:

CREATE PROCEDURE <存储过程名> (<参数列表>) [SPECIFIC <重载函数名>]

{语句块}

END PROCEDURE;

        其中,SPECIFIC 关键字表示可以指定 SPL 存储过程或函数一个简短的、独一无二的函数名称。这个名字在数据库中是唯一的。这一关键字也表明我们在 GBase 8s 中定义的存储过程和函数是可以重载的,即可定义多个具有相同名字的 SPL 函数,它们虽然名称相同,但是参数或类型各不相同。

        语 句 块 即 一 组 SPL 或 SQL 语 句 , 隐 式 的 语 句 块 包 含 在CREATE PROCEDURE/FUNCTIONEND PROCEDURE/FUNCITON 之间,可使用 BEGIN END 来显式地指明内嵌在另一个语句块中的语句块。

创建 SPL 函数的一般格式如下:

CREATE FUNCTION <函数名> (<参数列表>) RETURNING <返回值类型>[AS <返回值名>]

[SPECIFIC <重载函数名>]

{语句块}

END FUNCTION;

        RETURNING RETURNS 关键字用来定义返回值的返回类型,返回类型可以是除Serial/Serial8 Text/Byte 外的任意一种 SQL 的数据类型,在定义返回值类型时我们可以使用 AS 为返回值取一个名字。在过程体内必须至少有一个 return 语句。

SPL 中的流程控制

        在 SPL 中,流程控制(也称流控制)是由若干关键字实现的,包括 WHILE、IF、ELSE、BREAK、CASE 等,流程控制语句使用这些关键字实现对程序执行流程的精确控制,在程序中恰当地使用流程控制结构能够使程序更具条理性、结构性。本节将重点介绍流程控制结构中的选择结构和循环结构。

        在 GBase 8s 中有两种形式的选择结构,一种是 IF…ELSE 选择结构,另一种是 CASE选择结构。

1)IF…ELSE 条件语句

IF…ELSE 条件语句的语法格式为:

IF < Boolean 表达式>

l {SPL 语句|语句块}

[ ELSE

l {SPL 语句|语句块}

]

        Boolean 表达式为返回 TRUE 或者 FALSE 的表达式,且如果该表达式中含有 SELECT表达式,则需要用圆括号将其括起来。程序执行时,首先确定 Boolean 表达式的值,如果值为 TRUE,则紧接着执行 IF 关键字后的语句块;如果值为 FALSE 且 ELSE 关键字存在,则执行接 ELSE 后的语句块;如果 ELSE 关键字不存在,则跳过 IF 选择结构,执行后面的程序。GBase 8s 允许 IF…ELSE 结构的嵌套,我们可以根据需要利用嵌套结构编写较复杂的 SPL 语句块。

(2)CASE 结构

        某些复杂的程序可能要对一个变量的值进行多次判断,如果使用 IF…ELSE 结构,就会使程序显得很繁琐(尤其是在嵌套出现的情况下),代码量加大。这时可以使用 CASE结构来简化代码。

CASE 函数的语法格式如下:

CASE(<条件表达式>)

WHEN<比较值 1>THEN

SPL 语句 1

WHEN<比较值 2>THEN

SPL 语句 2

[ELSE

SPL 语句]

END CASE;

        对于简单的 CASE 函数,程序首先计算条件表达式的值,然后按照 WHEN 关键字的顺序依次计算“条件表达式=比较值 1”的值并返回第一个计算为 TRUE 所对应的 SPL 语句。如果所有的“条件表达式=比较值”的计算结果都为 FALSE,则返回 ELSE SPL 语句,如果 ELSE SPL 语句不存在,则返回 NULL。

(3)循环结构

        当在程序中需要反复执行一段相同代码时,可以利用 SPL 提供的循环结构实现这样的复杂功能。WHILE 循环结构如下:

WHILE (Boolean 表达式)

l {SPL 语句|语句块}

END WHILE;

        执行 WHILE 语句时,首先判断 Boolean 表达式是否成立(即该 Boolean 表达式值是否为 TRUE),如成立,则进入循环体顺序执行 SPL 语句或语句块,否则中断 WHILE 结构的执行,从结构后的第一个语句开始执行;如果 Boolean 表达式值为 FALSE,则跳出,WHILE循环从后面的第一个语句开始执行。在 WHILE 循环体内的所有 SPL 语句或语句执行完毕后,程序流程回到 WHILE 结构的开头重新执行。需要说明的是 WHILE 结构允许嵌套。

执行 SPL 函数或存储过程

执行已存在的存储过程应使用 EXECUTE 命令,其基本的执行语法格式如下:

EXECUTE PROCEDURE <存储过程|SPL 函数名>(参数列表);

GBase 8s 还可以利用 CALL 语句从一个存储过程中调用另一个存储过程:

CALL <存储过程|SPL 函数名>(参数列表)[ RETURNING <变量名>]

        在调用时,参数可以是 SPL 语句或语句块,只要该语句返回单值,并且具有适当的类型和长度。如果所填写的参数个数少于被调用的存储过程的参数,则未说明的参数被初始化为其缺省值,该缺省值在创建存储过程时声明,若无缺省值,则返回错误。

删除 SPL 函数或存储过程

在 GBase 8s 中删除存储过程和 SPL 函数的语句分别为:

删除存储过程的语法格式为:

DROP [SPECIFIC] PROCEDURE <存储过程名>(参数列表);

删除 SPL 函数的语法格式为:

DROP [SPECIFIC] FUNCTION <存储过程名>(参数列表);

GBase 8s 提供了一个语法格式同时可以用来删除 SPL 的存储过程和函数:

DROP [SPECIFIC] ROUTINE <存储过程名>(参数列表);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

八珍豆腐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值