在首次执行新的 SPL 例程之前,数据库服务器优化 SPL 例程中的 DML 语句。然而,在您调用那个 SPL 例程之前,如果您使用 UPDATE STATISTICS 的 Routine Statistics 语法来更新它的查询执行计划,则可降低出错的风险,其中一些可能引用已通过并发会话的 DDL 操作修改了其模式的表。
优化使得该代码依赖于该例程引用的表的结构。在优化该例程之后,但在执行它之前,如果 DDL 操作修改引用的表的模式,则例程失败并报错。
然而,通常不会发生此失败,如果为引用表的例程启用自动的重新编译,而 ALTER TABLE、CREATE INDEX 或 DROP INDEX 操作已修改了这些表的话。这是 GBase 8s 的缺省行为。要获取更多关于在更改表的模式之后启用或禁用自动的重新优化的信息,请参阅对 SET ENVIRONMENT 语句的 IFX_AUTO_REPREPARE 选项的描述。
元素 | 描述 | 限制 | 语法 |
---|---|---|---|
routine | CREATE FUNCTION 或 CREATE PROCEDURE 语句为 SPL 例程声明了的名称 | 必须在数据库中存在。在符合 ANSI 的数据库中,如果您不是 owner,则以 owner 限定 routine。 | 标识符 |
下表说明 Routine Statistics 段的关键字。
如果您省略 SPECIFIC 关键字且未包括参数列表,则圆括号符号是可选的。
如果您未紧跟在 FOR FUNCTION、FOR PROCEDURE 或 FOR ROUTINE 关键字之后指定 routine 名称,则为当前数据库中所有 SPL 例程优化执行计划。
数据库服务器保持一个该 SPL 例程显式地引用的表的列表。无论何时修改显式地引用了的表,数据库服务器都在下次执行该过程时重新优化过程。
如果您更改 SPL 例程引用的表,则可运行 UPDATE STATISTICS 来重新优化引用该表的过程,而不是一直等到下次执行使用该表的 SPL 例程为止。然而,如果 SPL 例程引用的表被删除,则运行 UPDATE STATISTICS 不可防止该 SPL 例程失败并报错。
下列 UPDATE STATISTICS FOR SPECIFIC 语句指导数据库服务器更新现有的返回一个或多个值的名为 Perform_work 的函数的统计信息:
UPDATE STATISTICS FOR SPECIFIC FUNCTION Perform_work;
对于同一 Perform_work 函数,下列示例的作用与前一示例相同:
UPDATE STATISTICS FOR SPECIFIC ROUTINE Perform_work;
类似地,使用关键字 SPECIFIC PROCEDURE 或 SPECIFIC ROUTINE 来更新不返回值的 SPECIFIC 过程的统计信息。
请不要在 SPECIFIC 例程的名称之后包括圆括号或参数列表。由于跟在名为 Perform_work 的函数之后的圆括号,下列语句失败并报错:
UPDATE STATISTICS FOR SPECIFIC ROUTINE Perform_work();
如果以圆括号括起 SPECIFIC 例程、函数或过程的参数,则数据库服务器也发出错误。