返回首页

gbase数据、南大通用产品文档:GBase8c示例

更新日期:2024年09月11日

终止事务时,给出错误和提示信息:

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
719
CREATE OR REPLACE PROCEDURE proc_raise1(user_id in integer)
AS
BEGIN
RAISE EXCEPTION 'Noexistence ID --> %',user_id USING HINT = 'Please check your
user ID';
END;
/
call proc_raise1(300011);
--执行结果
ERROR:
Noexistence ID --> 300011
HINT:
Please check your user ID
两种设置SQLSTATE 的方式:
CREATE OR REPLACE PROCEDURE proc_raise2(user_id in integer)
AS
BEGIN
RAISE 'Duplicate user ID: %',user_id USING ERRCODE = 'unique_violation';
END;
/
\set VERBOSITY verbose
call proc_raise2(300011);
--执行结果
ERROR:
Duplicate user ID: 300011
SQLSTATE: 23505
如果主要的参数是条件名或者是SQLSTATE,可以使用:
RAISE division_by_zero;
RAISE SQLSTATE '22012';
例如:
CREATE OR REPLACE PROCEDURE division(div in integer, dividend in integer)
AS
DECLARE
res int;
BEGIN
IF dividend=0 THEN
RAISE division_by_zero;

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
720
RETURN;
ELSE
res := div/dividend;
RAISE INFO 'division result: %', res;
RETURN;
END IF;
END;
/
call division(3,0);
--执行结果
ERROR:
division_by_zero
或者另一种方式:
RAISE unique_violation USING MESSAGE = 'Duplicate user ID: ' || user_id;
兼容O 模式下,支持使用语法EXCEPTION_INIT 自定义错误码SQLCODE:
declare
deadlock_detected exception;
pragma exception_init(deadlock_detected, -1);
begin
if 1 > 0 then
raise deadlock_detected;
end if;
exception
when deadlock_detected then
raise notice
'sqlcode:%,sqlstate:%,sqlerrm:%',sqlcode,sqlstate,sqlerrm;
end;
/
--执行结果
NOTICE:
sqlcode:-1,sqlstate:-1,sqlerrm: 1: non-GaussDB Exception

功能描述
把当前会话里的会话用户标识和当前用户标识都设置为指定的用户。
注意事项
只有在初始会话用户有系统管理员权限的时候,会话用户标识符才能改变。否则,
只有
在指定了被认证的用户名的情况下,系统才接受该命令。
语法格式
为当前会话设置会话用户标识符和当前用户标识符。
SET [ SESSION | LOCAL ] SESSION AUTHORIZATION role_name PASSWORD
'password';
重置会话和当前用户标识符为初始认证的用户名。
{SET [ SESSION | LOCAL ] SESSION AUTHORIZATION DEFAULT
| RESET SESSION AUTHORIZATION};
参数说明

SESSION
声明这个命令只对当前会话起作用。

LOCAL
声明该命令只在当前事务中有效。

role_name

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1258
用户名。
取值范围:字符串,要符合标识符的命名规范。

password
角色的密码。要求符合密码的命名规则。

DEFAULT
重置会话和当前用户标识符为初始认证的用户名。
示例
--创建角色paul。
gbase=#CREATE ROLE paul IDENTIFIED BY 'xxxxxxxxx';
--设置当前用户为paul。
gbase=#SET SESSION AUTHORIZATION paul password 'xxxxxxxxx';
--查看当前会话用户,当前用户。
gbase=#SELECT SESSION_USER, CURRENT_USER;
--重置当前用户。
gbase=#RESET SESSION AUTHORIZATION;
--删除用户。
gbase=#DROP USER paul;
相关参考
SET ROLE

UDF(UserDefinedFunction),
用户自定义函数,
用户自行添加函数。
用户可通过UDF、
UDAF 的通用扩展机制自行定义开发高效的SQL 函数(使用C/C++或Python 语言
实现)。
参考
关于UDF 的详细使用请参看本手册5.5.1 章UDF&UDAF 章节。