Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 参考 » 使用 SQL » SQL 语句 » SQL 语句 (P-Z)

 

SET OPTION 语句

此语句用于更改数据库选项的值。

语法
SET [ EXISTING ] [ TEMPORARY ] OPTION
 [ userid.| PUBLIC.]option-name = [ option-value ]
userid : identifier, string, or hostvar
option-name : identifier
option-value : string literal
嵌入式 SQL 语法
SET [ TEMPORARY ] OPTION
 [ userid.| PUBLIC.]option-name = [ option-value ]
userid : identifier, string, or hostvar
option-name : identifier, string, or hostvar
option-value : hostvar (indicator allowed), string, identifier, or number
注释

SET OPTION 语句用于更改影响数据库服务器行为的选项。设置选项的值可更改所有用户的行为或仅更改个别用户的行为。更改范围可以是临时的,也可以是永久的。

任何选项,不论是否是用户定义选项,在可以指派用户特定的值之前都必须具有公共设置。对于用户定义的选项,数据库服务器不支持设置 TEMPORARY 值。

选项的分类为:

有关所有可用选项的列表及说明,请参见数据库选项

可以将选项设置为三种级别的作用域:公共、用户和临时。临时选项优先于其它选项,而用户选项优先于公共选项。如果为当前用户设置用户级选项,同样会设置相应的临时选项。

语法 1 不允许为 option-value 指定主机变量。但可以改用 EXECUTE IMMEDIATE 语句获得所需的结果。请参见EXECUTE IMMEDIATE 语句 [SP]

如果使用 EXISTING 关键字,则无法为个别用户 ID 设置选项值,除非已经有该选项的 PUBLIC 用户 ID 设置。

如果指定用户 ID,则选项值应用于该用户(或者,对于组用户 ID,则适用于该组的成员)。如果指定 PUBLIC,则选项值应用于没有单独设置该选项的所有用户。缺省情况下,该选项值应用于发出 SET OPTION 语句的当前登录用户 ID。

例如,如果 DBA 是发出 SQL 语句的用户,则下面的语句将选项更改应用于用户 DBA:

SET OPTION precision = 40;

而以下语句会将更改应用于 PUBLIC 用户 ID(所有用户都属于该用户组)。

SET OPTION Public.login_mode = Standard;

只有拥有 DBA 权限的用户才有权设置 PUBLIC 用户 ID 的选项。

用户可以使用 SET OPTION 语句更改他们自己的用户 ID 值。仅当您有 DBA 权限时,才能为其他用户 ID 设置选项值。

将 TEMPORARY 关键字添加到 SET OPTION 语句中会改变更改生效的持续时间。缺省情况下,选项值是永久性的;在使用 SET OPTION 语句显式进行更改之前,它不会变化。

如果 SET TEMPORARY OPTION 语句没有用用户 ID 限定,则新的选项值仅对当前连接生效。

如果对 PUBLIC 用户 ID 使用 SET TEMPORARY OPTION,则更改在数据库运行时间内一直生效。当数据库关闭时,PUBLIC 组的 TEMPORARY 选项恢复为其永久值。

为 PUBLIC 用户 ID 设置临时选项可提供安全性优点。例如,在启用 login_mode 选项时,数据库依赖于其运行时所在的系统的登录安全性。临时启用该选项意味着,对于依赖于 Windows 域的安全性的数据库,如果关闭该数据库并将它复制到本地计算机,它的安全不会受到威胁。在这种情况下,临时启用的 login_mode 选项将恢复为它的永久值,这个永久值可能是 [Standard],即不允许集成登录的模式。

如果忽略 option-value,将从数据库中删除指定的选项设置。如果它是一个个人选项设置,则它的值会恢复为 PUBLIC 设置。如果删除 TEMPORARY 选项,则选项设置会恢复为永久设置。

小心

不支持从游标中读取行时更改选项设置,因为这会导致意外的行为。例如,在从游标读取时更改 date_format 设置会导致在结果集的行中出现不同的日期格式。不要在读取行时更改选项设置。

SET OPTION 语句为 SQL Flagger 所忽略。

权限

设置自己的选项不需要任何权限。

为其他用户或 PUBLIC 设置数据库选项需要 DBA 权限。

副作用

如果不指定 TEMPORARY,将执行自动提交。

另请参见
标准和兼容性
  • SQL/2003   服务商扩充。

示例

将日期格式选项设置为 on:

SET OPTION public.date_format = 'Mmm dd yyyy';

将 wait_for_commit 选项设置为 On:

SET OPTION wait_for_commit = 'On';

以下是两个嵌入式 SQL 的示例。

1. EXEC SQL SET OPTION :user.:option_name = :value;
2. EXEC SQL SET TEMPORARY OPTION date_format = 'mm/dd/yyyy';

为当前连接的用户设置 date_format 选项。在以后连接时,同一用户 ID 将使用此选项值。

SET OPTION date_format = 'yyyy/mm/dd';

以下语句删除当前用户 ID 的 date_format 选项的设置。执行此语句后,将改用针对 PUBLIC 组的 date_format 设置。

SET OPTION date_format=;