SET CURRENT OPTIMIZATION PROFILE 语句
SET CURRENT OPTIMIZATION PROFILE 语句将值赋给 CURRENT OPTIMIZATION PROFILE 专用寄存器。 该值指定优化器在准备动态 DML 语句时应使用的优化概要文件。
此语句不受事务控制。
对该语句进行求值时,将检查优化概要文件的名称是否有效,但直到优化器迂到动态 DML 语句之后才会处理该概要文件。
调用
此语句可以嵌入在应用程序中,也可通过动态 SQL 语句来发出。 它是可动态准备的可执行语句。
授权
不需要执行任何操作。
语法
描述
- optimization-profile-name
- 优化概要文件的两部分名称。 可以使用文字,主变量或专用寄存器来指定名称。 指定的名称是输入到 CURRENT OPTIMIZATION PROFILE 专用寄存器中的名称。
如果未限定指定的 optimization-profile-name ,那么 CURRENT DEFAULT SCHEMA 寄存器的值将用作隐式限定符。 专用寄存器的缺省值为空。
host-variable - 类型为 CHAR 或 VARCHAR 的变量,其中包含优化概要文件的名称。 包含空指示符的主变量指示如果为当前包指定了 OPTPROFILE 绑定选项的值,那么将使用该值。 长度为零或仅为空格的主变量指示不使用任何优化概要文件。
主变量必须满足以下特征:
- 字符串的内容是单部分或两部分标识 (用句点分隔) ,没有前导空格。
- 标识可以是定界标识,也可以是非定界标识。
- 字符串的内容不会折叠为大写。
- 不能在非定界字符串中使用小写字符和特殊字符。
- 如果第一个字符是双引号,那么右双引号必须在句点之前或字符串中的最后一个非空白字符。
- 如果句点后面的第一个字符是双引号,那么双引号必须是字符串中最后一个非空白字符。
- 如果标识是定界的,那么要在标识中包含双引号,请指定该字符两次。
- 任何不在定界标识内的句点都将被视为分隔符,并且字符串中只能存在一个句点分隔符。
string-constant - 将常量指定为作为优化概要文件名称的字符串。 字符串常量的内容必须满足与主变量相同的特征。 空
- 将 CURRENT OPTIMIZATION PROFILE 寄存器设置为空。
表 1 提供了可用于根据优化概要文件命名规则分配寄存器的字符串字面值和标识的示例。 SCHEMA 和 NAME 列中的值表示优化概要文件名称,因为它可能显示在 OPT_PROFILE 表中。 有效字符串字面值列显示与相应 SCHEMA 和 NAME 列值指定的优化概要文件匹配的字符串字面值。 有效标识列显示将标识同一优化概要文件的标识。
| SCHEMA | 名称 | 有效字符串字面值 | 有效标识 |
|---|---|---|---|
| 西门 | BIG_PROF | '大教授' 'SIMMEN.BIG_PROF' "大教授" '"SIMMEN"。"BIG_PROF"' |
BIG_PROF SIMMEN.BIG_PROF "大教授" "SIMMEN"。"BIG_PROF" |
| 西门 | 低调 | '"低调"' 'SIMMEN. "low_profile"' '"SIMMEN". "low_profile"' |
"低概要文件" SIMMEN. "low_profile" "SIMMEN"。"low_profile" |
| 埃利亚兹 | DBA3 | 'DBA3' '"DBA3"' "eliaz".DBA3' '"eliaz". "DBA3"' |
DBA3 "eliaz".DBA3 "eliaz". "DBA3" |
| SNOW | PROFILE1.0 | '"PROFILE1.0"' '暴雪。"PROFILE1.0"' '"暴雪"。"PROFILE1.0"' |
"PROFILE1.0" 暴雪。"PROFILE1.0" "暴雪"。"PROFILE1.0" |
注意
- 如果寄存器的值指定现有优化概要文件的名称,那么在准备后续动态 DML 语句时将使用指定的优化概要文件。
- 如果寄存器的值为空,那么在准备后续动态 DML 语句时将使用 OPTPROFILE 绑定选项指定的优化概要文件 (如果有)。
- 如果寄存器的值为空,并且未设置 OPTPROFILE 绑定选项,那么在准备后续动态 DML 语句时不会使用优化概要文件。
- 如果寄存器的值是空字符串,那么无论是否设置了 OPTPROFILE 绑定选项,在准备后续动态 DML 语句时都不会使用优化概要文件。
- 对 CURRENT DEFAULT SCHEMA 的后续更改对优化概要文件没有任何影响。 使用在对 SET CURRENT OPTIMIZATION PROFILE 语句求值时生效的两个部分名称来设置 CURRENT OPTIMIZATION PROFILE 寄存器值。 只有另一个 SET CURRENT OPTIMIZATION PROFILE 语句可以更改所使用的优化概要文件。
示例
- 示例 1: 优化概要文件 RICK.FOO 用于语句 1 , 2 和 3。 TOM.FOO 用于语句 4。
SET CURRENT SCHEMA = 'RICK' SET CURRENT OPTIMIZATION PROFILE = 'FOO' statement 1 statement 2 SET CURRENT SCHEMA = 'TOM' statement 3 SET CURRENT OPTIMIZATION PROFILE = 'FOO' statement 4 - 示例 2: 使用选项 OPTPROFILE ("Foo") 绑定了具有以下语句的应用程序 和 QUALIFIER ("John")。 优化概要文件 KAAREL.BAR 用于语句 1 ,优化概要文件 "John"。"Foo" 用于语句 2。
SET CURRENT SCHEMA = 'KAAREL' SET CURRENT OPTIMIZATION PROFILE = 'BAR' statement 1 SET CURRENT SCHEMA = "Tom" SET CURRENT OPTIMIZATION PROFILE NULL statement 2 - 示例 3: 空字符串是一个特殊值,指示不使用任何优化概要文件。 优化概要文件 "Hamid". "Foo" 用于语句 1 ,而没有优化概要文件用于语句 2。
SET CURRENT OPTIMIZATION PROFILE = '"Hamid"."Foo"' statement 1 SET CURRENT OPTIMIZATION PROFILE = '' statement 2
