当您创建用户定义的例程(UDR),您成为该 UDR 的所有者,您自动地获得对那个 UDR 的
Execute 权限。
Execute 权限允许您以 EXECUTE FUNCTION 或 EXECUTE PROCEDURE 语句,任何一个都适用,或以
SPL 例程中的 CALL 语句来调用该 UDR。 Execute 权限还允许您使用表达式中的用户定义的函
数,如下示例所示
SELECT * FROM table WHERE in_stock(partnum) < 20;
对于需要对给定的 UDR 有 Execute 权限的用户、角色或 PUBLIC 组的成员,GRANT 语句支持
下列语法:
例程级权限
下列语句将对 delete_order 例程的 Execute 权限授予用户 finn:
GRANT EXECUTE ON ROUTINE delete_order TO finn;
您是否必须显式地授予 Execute 权限,有赖于下列条件:
如果您有 DBA 级权限,则可使用 CREATE FUNCTION 或 CREATE PROCEDURE 的
DBA 关键字来限定那些有 DBA 权限的用户的缺省 Execute 权限。您必须显式地将对那
个 UDR 的 Execute 权限显式地授予那些没有 DBA 权限的用户。
如果您有 Resource 数据库级权限但没有 DBA 权限,则当您创建 UDR 时不可使用 DBA
关键字:
o 当您在不符合 ANSI 的数据库中创建 UDR 时,PUBLIC 可执行那个 UDR。您不
需为其他获得 Execute 权限的用户发出 GRANT 语句。
o 设置 NODEFDAC 环境变量为 yes 以防 PUBLIC 执行 UDR,直到您显式地授
予 Execute 权限为止。
在符合 ANSI 的数据库中,UDR 的创建者必须显式地将该 UDR 的 Execute 权限授予其
他用户,使之能够执行它。
在 GBase 8s 中,如果两个或多个 UDR 同名,则使用下列列表中的关键字来指定用户列表可执行
那些 UDR 中的哪些。