功能控制数学函数是否支持decimal 运算功能默认值为0(OFF),返回double 类型;值设置为1 开启,返回规则见5.1.5.4.8 数学函数章节。GBase 8a MPP Cluster 产品手册6 附录文档版本953(2022-09-15)南大通用数据技术股份有限公司1599
缺省时,当PL/SQL 函数执行过程中发生错误时退出函数执行,并且周围的事务也会回滚。可以用一个带有EXCEPTION 子句的BEGIN 块捕获错误并且从中恢复。其语法是正常的BEGIN 块语法的一个扩展:[<>][DECLAREdeclarations]BEGINstatementsEXCEPTIONWHEN condition [OR condition ...] THENhandler_statements[WHEN condition [OR condition ...] THENhandler_statements...]END;如果没有发生错误,这种形式的块儿只是简单地执行所有语句,然后转到END 之后的下一个语句。但是如果在执行的语句内部发生了一个错误,则这个语句将会回滚,然后转到EXCEPTION 列表。寻找匹配错误的第一个条件。若找到匹配,则执行对应的handler_statements,然后转到END 之后的下一个语句。如果没有找到匹配,则会向事务的外层报告错误,和没有EXCEPTION 子句一样。错误码可以捕获同一类的其他错误码。也就是说该错误可以被一个包围块用EXCEPTION 捕获,如果没有包围块,则进行退出GBase 8c V5 开发者手册南大通用数据技术股份有限公司656函数处理。condition 的名称可以是SQL 标准错误码编号说明的任意值。特殊的条件名OTHERS 匹配除了QUERY_CANCELED 之外的所有错误类型。如果在选中的handler_statements 里发生了新错误,则不能被这个EXCEPTION 子句捕获,而是向事务的外层报告错误。一个外层的EXCEPTION 子句可以捕获它。如果一个错误被EXCEPTION 捕获,PL/SQL 函数的局部变量保持错误发生时的原值,但是所有该块中想写入数据库中的状态都回滚。示例:CREATE TABLE mytab(id INT,firstname VARCHAR(20),lastname VARCHAR(20)) ;INSERT INTO mytab(firstname, lastname) VALUES('Tom', 'Jones');CREATE FUNCTION fun_exp() RETURNS INTAS $$DECLAREx INT :=0;y INT;BEGINUPDATE mytab SET firstname = 'Joe' WHERE lastname = 'Jones';x := x + 1;y := x / 0;EXCEPTIONWHEN division_by_zero THENRAISE NOTICE 'caught division_by_zero';RETURN x;END;$$LANGUAGE plpgsql;GBase 8c V5 开发者手册南大通用数据技术股份有限公司657call fun_exp();NOTICE:caught division_by_zerofun_exp---------1(1 row)select * from mytab;id | firstname | lastname----+-----------+----------| Tom| Jones(1 row)DROP FUNCTION fun_exp();DROP TABLE mytab;当控制到达给y 赋值的地方时,会有一个division_by_zero 错误失败。这个错误将被EXCEPTION 子句捕获。而在RETURN 语句里返回的数值将是x 的增量值。说明:进入和退出一个包含EXCEPTION 子句的块要比不包含的块开销大的多。因此,不必要的时候不要使用EXCEPTION。在下列场景中,无法捕获处理异常,整个存储过程回滚:节点故障、网络故障引起的存储过程参与节点线程退出以及COPY FROM 操作中源数据与目标表的表结构不一致造成的异常。示例:UPDATE/INSERT 异常这个例子根据使用异常处理器执行恰当的UPDATE 或INSERT 。CREATE TABLE db (a INT, b TEXT);GBase 8c V5 开发者手册南大通用数据技术股份有限公司658CREATE FUNCTION merge_db(key INT, data TEXT) RETURNS VOID AS$$BEGINLOOP--第一次尝试更新keyUPDATE db SET b = data WHERE a = key;IF found THENRETURN;END IF;--不存在,所以尝试插入key,如果其他人同时插入相同的key,我们可能得到唯一key失败。BEGININSERT INTO db(a,b) VALUES (key, data);RETURN;EXCEPTION WHEN unique_violation THEN--什么也不做,并且循环尝试再次更新。END;END LOOP;END;$$LANGUAGE plpgsql;SELECT merge_db(1, 'david');SELECT merge_db(1, 'dennis');--删除FUNCTION 和TABLEDROP FUNCTION merge_db;DROP TABLE db;GBase 8c V5 开发者手册南大通用数据技术股份有限公司659
产品应具有服务器存储空间低限报警功能1. 开启邮件通知。配置 etc/alarmprogram.sh 中邮件相关参数:ALARMADMIN=1GBase 8s 安全技术指南南大通用数据技术股份有限公司- 44 -ADMINEMAIL=root@localhost.localdomainMAILUTILITY=mail2. 在数据库实例配置文件 onconfig 中,修改参数 DISK_THRESHOLD 为预警值(以990为例),即磁盘剩余空间如果小于预警值‰,数据库将会发出预警邮件3. 重启 server4. 磁盘剩余空间小于 990‰ 时,GBase 8s 将会发出预警邮件,并且online.log中会打印预警信息。