设置执行选项。
SET OPTION option_keyword = value
SET OPTION
语句用于设置执行选项,如编译模式、SQL
配置设置和控制日期、时间和数字约定的区域设置。
每个set option
语句只能设置一个关键字选项。
SET OPTION
支持以下选项:
COMPILEMODE
EXACT_DISTINCT
LOCK_ESCALATION_THRESHOLD
LOCK_TIMEOUT
PKEY_IS_IDKEY
SUPPORT_DELIMITED_IDENTIFIERS
Locale Options (date, time, and numeric conventions)
SET OPTION
可以在动态SQL(包括SQL Shell
)和嵌入式SQL中使用。
为了SQL
兼容性,IRIS会解析其他SET OPTION
参数(这里没有文档),但不执行任何操作。
因为SET OPTION
的准备和执行速度很快,而且通常只运行一次,所以IRIS
不会在ODBC
、JDBC
或动态SQL中为SET OPTION
创建缓存查询。
IRIS支持下列选项:
AUTO_PARALLEL_THRESHOLD
AUTO_PARALLEL_THRESHOLD
选项被设置为一个整数n
,用于确定当启用自动并行处理时是否应该对查询应用并行处理。
由于与并行处理相关的性能成本,因此需要为并行处理的优势确定一个阈值。
n
越高,SQL查询使用并行处理执行的可能性就越低。
默认为3200
。
这是一个系统范围的设置。
值n大致对应于所访问的映射中发生并行处理所需的最小元组数量。
当自动并行被禁用时,AUTO_PARALLEL_THRESHOLD
选项没有作用。
也可以使用$SYSTEM.SQL.Util.SetOption()
方法AutoParallelThreshold
选项设置该选项。
COMPILEMODE
选项将当前名称空间的编译模式设置为DEFERRED
、IMMEDIATE
、INSTALL
或NOCHECK
。
默认为IMMEDIATE
。
从DEFERRED
编译模式更改为IMMEDIATE
编译模式会导致DEFERRED compile Queue
中的任何类立即被编译。
如果所有类编译都成功,IRIS将SQLCODE
设置为0。
如果有任何错误,SQLCODE
设置为-400
。
类编译错误记录在^mtemp2 ("Deferred Compile Mode","Error")
中。
如果将SQLCODE
设置为-400
,则应该查看此全局结构以获得更精确的错误消息。
INSTALL
编译模式类似于DEFERRED
编译模式,但它应该只用于表中没有数据的DDL
安装。
NOCHECK
编译模式与IMMEDIATE
编译模式类似,只是在编译时忽略了以下约束:如果一个表被删除, IRIS不检查引用被删除表的其他表中的外键约束。
如果添加了外键约束, IRIS不会检查现有数据以确保它对这个外键有效。
如果添加了NOT NULL
约束, IRIS不会检查现有数据是否为NULL
,也不会指定字段的默认值。
如果删除了UNIQUE
或Primary Key
约束 IRIS不会检查该表或其他表中的外键是否引用了被删除的键。
也可以使用$SYSTEM.SQL.Util.SetOption()
方法CompileMode
选项设置该选项。
DEFAULT_SCHEMA
选项为所有名称空间设置系统范围的默认模式。
在显式更改之前,此默认值将保持有效。
默认模式名用于为所有未限定的表、视图或存储过程名提供模式名。
可以指定一个文字模式名或指定_CURRENT_USER
。
如果指定_CURRENT_USER
作为默认模式名, IRIS会将当前登录进程的用户名作为默认模式名。
EXACT_DISTINCT
布尔值选项指定是否在系统范围内使用DISTINCT
处理(TRUE)
或Fast DISTINCT
处理(FALSE)
。
系统范围的默认值是使用Fast Distinct
处理。
当EXACT_DISTINCT=TRUE
时,GROUP BY
和DISTINCT
查询生成原始值。
当EXACT_DISTINCT=FALSE
时,启用快速Distinct
,通过更好地使用索引(如果有索引),使涉及Distinct
或GROUP BY
子句的SQL查询更有效地运行。
但是,这些查询返回的值以与存储在索引中的相同的方式进行排序。
这意味着此类查询的结果可能都是大写的。
这可能对区分大小写的应用程序有影响。
这个选项也可以使用$SYSTEM.SQL.Util.SetOption()
方法FastDistinct boolean
选项来设置。
LOCK_ESCALATION_THRESHOLD
LOCK_ESCALATION_THRESHOLD
选项被设置为一个整数n
,用于确定何时将行锁定升级为表锁定。
默认值是1000
。
值n
是单个事务中单个表的插入、更新或删除次数,当到达时将触发表级锁。
这是针对所有名称空间的系统范围设置。
例如,如果锁阈值为1000
,并且进程启动一个事务,然后插入2000
行,那么在插入第1001
行之后,进程将尝试获取表级锁,而不是继续锁定各个行。
这有助于防止锁表变得太满。
这个选项也可以使用$SYSTEM.SQL.Util.SetOption()
方法LockThreshold
选项来设置。
LOCK_TIMEOUT
数值选项允许为当前进程设置默认的锁定超时。
LOCK_TIMEOUT
值是SQL执行期间试图建立锁时等待的秒数。
当锁定冲突阻止当前进程对lock
、INSERT
、UPDATE
、DELETE
或SELECT
操作立即锁定一条记录、表或其他实体时,使用此锁定超时。
SQL
继续尝试建立锁,直到超时超时,这时将生成SQLCODE -110
或-114
错误。
可用的值是正整数和零。
超时设置是每个进程的。
可以使用$SYSTEM.SQL.Util.GetOption(“ProcessLockTimeout”)
方法确定当前进程的锁定超时设置。
如果没有为当前进程设置锁定超时,则默认为当前系统范围的锁定超时设置。
如果您的ODBC
连接断开并重新连接,重新连接的进程将使用当前系统范围的锁定超时设置。
系统范围的锁定超时默认为10秒。
PKEY_IS_IDKEY boolean
选项指定主键是否也是系统范围内的ID键。
取值为TRUE
、FALSE
。
如果为TRUE
,且该字段不包含数据,则将主键创建为ID
键。
也就是说,表的主键也成为了类定义中的IDKey
索引。
如果字段不包含数据,则没有定义IDKey
索引。
如果将主键定义为IDKey
索引,则数据访问将更加有效,但主键值一旦设置,就永远不能修改。
一旦设置,就不能更改分配给主键的值,也不能将其他键指定为主键。
使用此选项还将更改主键排序规则的默认值;
主键字符串值默认为EXACT
排序规则。
如果为FALSE
,则主键和ID
键被定义为独立的,效率较低。
但是,主键值是可修改的,主键字符串值默认为当前排序规则类型default
,默认为SQLUPPER
。
要设置PKEY_IS_IDKEY
选项,必须具有%Admin_Manage:USE
权限。
否则,将收到一个SQLCODE -99
错误(特权违反)。
一旦设置,该选项将在系统范围内对所有进程生效。
该选项的系统范围默认值也可以通过以下方式设置:
$SYSTEM.SQL.Util.SetOption()
方法配置选项DDLPKeyNotIDKey
。
要确定当前设置,调用$SYSTEM.SQL.CurrentSettings()
,它显示通过DDL创建的是主键而不是ID键;
默认值是1。PKEY_IS_IDKEY
设置保持有效,直到通过另一个SET OPTION PKEY_IS_IDKEY
重置或直到 IRIS Configuration
被重新激活,将该参数重置为IRIS System Configuration
设置。
默认情况下,系统范围内支持分隔标识符。
SUPPORT_DELIMITED_IDENTIFIERS
布尔选项允许您更改系统范围内对分隔标识符的支持。
取值为TRUE
、FALSE
。
如果为TRUE
,用双引号分隔的字符串被认为是SQL语句中的标识符。
如果为FALSE
,由双引号分隔的字符串被认为是SQL语句中的字符串字面值。
要设置SUPPORT_DELIMITED_IDENTIFIERS
选项,必须具有%Admin_Manage:USE
权限。
否则,将收到一个SQLCODE -99
错误(特权违反)。
一旦设置,该选项将在系统范围内对所有进程生效。
SUPPORT_DELIMITED_IDENTIFIERS
设置将保持有效,直到通过另一个设置选项SUPPORT_DELIMITED_IDENTIFIERS
进行重置,或者直到由$SYSTEM.SQL.Util.SetOption()方法delimitedifiers
选项在系统范围内进行更改。
区域设置选项是关键字选项,用于为当前进程的日期、时间和数字约定设置IRIS区域设置。
可选关键字有AM、DATE_FORMAT、DATE_MAXIMUM、DATE_MINIMUM、DATE_SEPARATOR、DECIMAL_SEPARATOR、MIDNIGHT、MINUS_SIGN、MONTH_ABBR、MONTH_NAME、NOON、NUMERIC_GROUP_SEPARATOR、NUMERIC_GROUP_SIZE、PM、PLUS_SIGN、TIME_FORMAT、TIME_PRECISION、TIME_SEPARATOR、WEEKDAY_ABBR、WEEKDAY_NAME、YEAR_OPTION
。
所有这些选项都可以设置为文字,并且都采用默认值(美式英语惯例)。
TIME_PRECISION
选项是可配置的(参见下面)。
如果将这些选项中的任何一个设置为无效值,InterSystems IRIS将发出SQLCODE -129
错误(set OPTION
区域设置属性的非法值)。
Date/Time Option Keyword | Description |
---|---|
AM | String. 默认 'AM' |
DATE_FORMAT | Integer. 默认值为1。取值范围为0 ~ 15。 |
DATE_MAXIMUM | Integer. 默认为2980013(12/31/9999)。可以设置为更早的日期,但不能设置为更晚的日期。 |
DATE_MINIMUM | Positive Integer. 默认为0(12/31/1840)。可以设置为较晚的日期,但不能设置为较早的日期。 |
DATE_SEPARATOR | Character. Default is '/' |
DECIMAL_SEPARATOR | Character. Default is '.' |
MIDNIGHT | String. Default is 'MIDNIGHT' |
MINUS_SIGN | Character. Default is '-' |
MONTH_ABBR | String. Default is ' Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'. (注意,该字符串以空格字符开始,这是默认分隔符.) |
MONTH_NAME | String. Default is ' January February March April May June ... November December'. 注意,该字符串以空格字符开始,这是默认分隔符.) |
NOON | String. Default is 'NOON' |
NUMERIC_GROUP_SEPARATOR | Character. Default is ',' |
NUMERIC_GROUP_SIZE | Integer. Default is 3.PM String. Default is 'PM' |
PLUS_SIGN | Character. Default is '+' |
TIME_FORMAT | Integer. Default is 1. 取值范围为1 ~ 4。 |
TIME_PRECISION | Integer from 0 through 9 (inclusive). Default is 0. 小数秒的位数。 |
TIME_SEPARATOR | Character. Default is ':' |
WEEKDAY_ABBR | String. Default is ' Sun Mon Tue Wed Thu Fri Sat'. (注意,该字符串以空格字符开始,这是默认分隔符.) |
WEEKDAY_NAME | String. Default is ' Sunday Monday Tuesday Wednesday Thursday Friday Saturday'. (注意,该字符串以空格字符开始,这是默认分隔符.) |
YEAR_OPTION | Integer. Default is 0. 取值范围为0 ~ 6。有关表示2位数和4位数年份的这些方法的解释,见ObjectScript $ZDATE函数。 |
要在系统范围内配置TIME_PRECISION
,请进入管理门户,选择“系统管理”、“配置”、“SQL”和“对象设置”、“SQL”。
查看和编辑GETDATE()
、CURRENT_TIME
和CURRENT_TIMESTAMP
的默认时间精度的当前设置。
它指定小数秒的精确位数。
默认值是0
。
允许的值的范围是0
到9
位精度。
小数秒中有意义的数字的实际数目与平台有关。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。