更新日期:2024年09月11日
GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 328 -
您可使用 RAISE EXCEPTION 语句生成您自己的错误,如下图所示。
图: RAISE EXCEPTION 语句。
BEGIN
ON EXCEPTION SET esql, eisam -- 捕获所有错误
IF esql = -206 THEN -- 未找到表
-- 某种恢复
ELSE
RAISE exception esql, eisam; -- 放过该错误
END IF
END EXCEPTION
-- 执行某操作
END
在该示例中,ON EXCEPTION 语句使用两个变量 esql 和 eisam,来保存数据库服务器返回
的错误编号。如果发生错误且如果 SQL 错误编号为 -206,则执行 IF 子句。如果捕获任
何其他 SQL 错误,则将它从此 BEGINEND 块传至前面的示例的最后 BEGINEND 块。
模拟 SQL 错误
您可产生错误来模拟 SQL 错误,如下图所示。如果用户为 pault, 则 SPL 运行如同那个
用户没有 update 权限一样,即使该用户实际确实拥有那个权限。
图: 模拟 SQL 错误。
BEGIN
IF user = 'pault' THEN
RAISE EXCEPTION -273; -- 拒绝 Paul 的 update 权限
END IF
END
使用 RAISE EXCEPTION 来退出嵌套的代码
下图展示您可如何使用 RAISE EXCEPTION 语句来退出深度嵌套的块。
图: RAISE EXCEPTION 语句。
BEGIN
ON EXCEPTION IN (1)
END EXCEPTION WITH RESUME -- do nothing significant (cont)
BEGIN
GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 329 -
FOR i IN (1 TO 1000)
FOREACH select ..INTO aa FROM t
IF aa < 0 THEN
RAISE EXCEPTION 1; -- emergency exit
END IF
END FOREACH
END FOR
RETURN 1;
END
--do something; -- emergency exit to
-- this statement.
TRACE 'Negative value returned';
RETURN -10;
END
如果最内层的条件为真(如果 aa 为负),则发生异常,且执行跳至跟在该块的 END 之后
的代码。在此情况下,执行跳至 TRACE 语句。
请记住,BEGINEND 块为单个语句。如果在块中的某处发生错误,且在该块之外捕获,则
当执行恢复时,跳过该块剩余的部分,并从下一语句开始执行。
除非您在该块的某处为此错误设置捕获,否则,将错误条件传回至包含该调用的块,并传
回至包含该块的任何块。如果不存在设置处理该错误的 ON EXCEPTION 语句,则停止该
SPL 例程的执行,为正在执行该 SPL 例程的例程创建一个错误。
下表显示了可以配置 SQL 语句高速缓存的不同方法。
表 1. 配置 SQL 语句高速缓存
配置参数
用途
onmode 命令
STMT_CACHE
打开、启用或禁用内存中的 SQL
语句高速缓存。
如果已打开,
请指
定 SQL 语句高速缓存能否保存
已解析和优化的 SQL 语句。
onmode -e mode
STMT_CACHE_HITS
指定将语句完全插入到 SQL 语
句高速缓存之前,命中(引用)该
语句的次数。
onmode -W
STMT_CACHE_HITS
STMT_CACHE_NOLIMIT
控制是否在 SQL 语句高速缓存
的大小大于
STMT_CACHE_SIZE 值之后将
语句插入到该高速缓存中。
onmode -W
STMT_CACHE_NOLIMIT
STMT_CACHE_NUMPOOL 定义 SQL 语句高速缓存的内存
池数。
无
STMT_CACHE_SIZE
指定 SQL 语句高速缓存的大小。
无
使用以下 onstat 选项可监视 SQL 语句高速缓存:
onstat -g ssc
onstat -g ssc all
onstat -g ssc pool
有关这些配置参数、onstat -g 选项以及 onmode 命令的更多信息,请参阅《GBase 8s 管理
员参考》。
GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 147 -
有关使用 SQL 语句高速缓存、使用 onstat -g 选项监视该高速缓存以及调整配置参数的更
多信息,请参阅《GBase 8s 性能指南》中有关提高查询性能的部分。有关限定和恒等语句
的详细信息,请参阅《GBase 8s SQL 指南:语法》。