南大通用GBase8s 常用SQL语句(六十一)

1.1CREATE PROCEDURE FROM 语句
使用 CREATE PROCEDURE FROM 语句存取用户定义的过程。CREATE PROCEDURE 语句的实际文本驻留在单独的文件中。
该语句是 SQL ANSI/ISO 标准的扩展。您可以在 GBase 8s ESQL/C 中使用此语句。
语法

元素 描述 限制 语法
file 包含 CREATE PROCEDURE 语句的全文本的文件的路径名和文件名。缺省路径名为当前目录。 必须存在,并且仅可包含一个 CREATE PROCEDURE 语句。另见 持有文件的缺省目录 特定于操作系统
file_var 包含文件规范的程序变量的名称 必须是字符数据类型;其内容有与 file 相同的限制 特定于语言
用法
不能直接在 GBase 8s ESQL/C 程序中创建用户定义的过程。这就是说,程序不能包含 CREATE PROCEDURE 语句。
要在 ESQL/C 程序中使用用户定义的过程:
1.用 CREATE PROCEDURE 语句创建源文件。
2.使用 CREATE PROCEDURE FROM 语句来将此源文件的内容发送到数据库服务器用于执行。
文件仅能包含一个 CREATE PROCEDURE 语句。
例如,假设以下 CREATE PROCEDURE 语句是在称为 raise_pr.sql 的单独文件中:
CREATE PROCEDURE raise_prices( per_cent INT )
UPDATE stock – increase by percentage;
SET unit_price = unit_price +
( unit_price * (per_cent / 100) );
END PROCEDURE;
在 GBase 8s ESQL/C 程序中,您可以使用以下 CREATE PROCEDURE FROM 语句存取 raise_prices( ) SPL 过程:
EXEC SQL create procedure from ‘raise_pr.sql’;
如果您不确定文件中的 UDR 是否返回值,请使用 CREATE ROUTINE FROM 语句。
当 IFX_EXTEND_ROLE 配置参数设置成 ON 时,只有拥有内置 EXTEND 角色的用户才可以创建外部例程。
当 IFX_EXTEND_ROLE 配置参数设置成 1 或 ON 时,只有由数据库服务器管理员(DBSA)授予内置 EXTEND 角色的用户才能创建外部例程。此外,您对要注册例程所在的数据库必须至少持有的 Resource 存取权限。还必须对编写例程所使用的程序语言拥有 Usage 权限。(有关使用 C 语言将 Usage 特权授予用户或角色的语法,请参阅 语言级权限 。)
用户定义过程,类似用户定义函数,使用创建时有效的对照顺序。请参阅 SET COLLATION 语句 获取关于使用非缺省对照的信息。
持有文件的缺省目录
数据库服务器将此指定的文件名(以及任何路径名)看作相关的。
在 UNIX™ 上,如果您指定一个简单文件名而不是完整的路径名作为 file 参数,则客户机应用程序在数据库驻留的计算机上的主目录中寻找文件,如果您在此计算机上没有主目录,则缺省目录为根目录。
在 Windows™ 上,如果您指定文件名而非目录名为 file 参数,则客户端应用程序在您的当前工作目录中寻找文件(如果数据库在本地计算机上)。否则,缺省目录为 %GBASEDBTDIR%\bin 。
重要: GBase 8s ESQL/C 预处理器不处理您指定的文件的内容。它只将内容发送到数据库服务器用于执行。因此对您在 CREATE PROCEDURE FROM 中指定的文件是否实际包含 CREATE PROCEDURE 语句没有语法检查。然而,要提高代码的可读性,建议匹配这两个语句。
1.2CREATE ROLE 语句
使用 CREATE ROLE 语句声明并注册新的角色。
该语句是 SQL ANSI/ISO 标准的扩展。
语法

元素 描述 限制 语法
role 此处为 DBA 创建的角色声明的名称 在数据库的 role 和用户名称中必须是唯一的。最大字节数为 32 所有者名称
用法
CREATE ROLE 创建一个新角色并在系统目录中注册。角色可以用来将数据库对象上的一组权限标识符和一组访问特权相关联。系统目录维护被授权给用户或其它角色的角色(以及他们相应的特权)的信息。
只有数据库管理员(DBA)可以使用 CREATE ROLE 创建一个新角色。DBA 可以将完成某些工作任务所需的特权(如 engineer )指定给某个角色,然后可以使用 GRANT 语句将该角色指定给某个特定的用户,而不是将相同的特权集授权给每个用户。
角色名称是权限标识符。它不能是对数据库服务器或对数据库服务器的操作系统已知的用户名。角色名称不能已经列在 sysusers 系统目录表的 username 列,也不能已经列在 systabauth 、syscolauth 、sysfragauth 、sysprocauth 或 sysroleauth 系统目录表的 grantor 或 grantee 列中。
角色名称不能与已经列在 sysxtdtypeauth 系统目录表的 grantor 或 grantee 列中的任何用户或角色名称匹配,也不能与任何内置角色( EXTEND 或 DBSECADM )匹配。
如果包含了 IF NOT EXISTS 关键字,则当指定名称的角色已经在当前数据库中注册时,数据库服务器不采取操作(而非向应用程序发生异常)。
创建角色之后,DBA 可以使用 GRANT 语句将该角色指定给 PUBLIC 、用户、或其它角色,并授予该角色特定的特权。(然而,角色不能持有数据库级别特权。) 角色被成功授权到用户或 PUBLIC 后,用户必须使用 SET ROLE 语句来启用该角色。只有那样用户才能使用角色的特权。
例如,要创建角色 engineer ,请输入以下语句:
CREATE ROLE engineer;
要将访问特权授予角色 engineer ,DBA 可以发出在被授予者列表中包括 engineer 的 GRANT 语句:
GRANT USAGE ON LANGUAGE SPL TO engineer;
要将角色 engineer 指定给用户 kaycee ,DBA 可以发出这样的语句:
GRANT engineer TO kaycee;
要激活角色 engineer ,用户 kaycee 必须发出以下的语句:
SET ROLE engineer;
如果该 SET ROLE 语句成功,则用户kaycee 将获得除了 kaycee 作为个人或作为 PUBLIC 已经持有的特权意外的授权给角色 engineer 的所有特权。
一个用户可以被授予多个角色,但是在某一时刻对任一用户只能启用一个非缺省的角色,此角色由 SET ROLE 指定。
需要 SET ROLE 来显式地启用角色的一个例外是 DBA 在 GRANT DEFAULT ROLE role TO user 语句中指定的任何缺省角色。如果此语句执行成功,则当 user 连接到数据库时,缺省角色自动被启用。任何角色都可以作为缺省角色。(类似的, GBase 8s DBSA 授予 EXTEND 角色的用户不需要执行 SET ROLE 就能创建和删除外部例程和共享库。)
CREATE ROLE 当与 GRANT 和 SET ROLE 语句一起使用时,允许 DBA 为角色创建一组特权,然后将角色授权给许多用户,而不是将同一特权集合逐一授权给许多用户。
使用 GRANT DEFAULT ROLE 和 SET ROLE DEFAULT 语句,default roles 使 DBA 可以为角色创建特权,该角色在任何持有那个角色的用户连接到数据库时将自动激活。当应用程序执行需要特定访问权限的操作时,此功能很有用,但是应用程序并不包括 SET ROLE 语句。
REVOKE 语句可以取消角色的访问特权,从角色中除去用户,或为一个或多个用户取消角色的缺省状态。角色保持存在直到 DBA 或者使用 WITH GRANT OPTION 关键字授权其角色的用户使用 DROP ROLE 语句来删除角色。
重要: 用户定义角色(GRANT 语句分配给该角色的自由裁量存取权限)的范围是当前数据库。当 GRANT DEFAULT ROLE 或者 SET ROLE 语句激活角色时,该角色和它的特权只在当前数据库中生效。作为安全防范措施,用户从角色接收自由访问特权不能通过视图或触发器操作提供当前数据库之外的访问。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值