各种 DDL 语句可删除、重命名或更改在定义游标的 DECLARE 语句中直接地(或通过准备好的语句的标识符间接地)引用的表的模式。对该游标的后续的 OPEN 操作可能失败并报 error -710,或可能产生意外的结果。更改列的数目或列的数据类型会有此影响,且对引用其模式已被修改的表的任何 SPL 例程,用户通常必须重新发出 DESCRIBE 语句、PREPARE 语句和(对于与例程关联的游标)UPDATE STATISTICS 语句。
然而,当为准备好了的对象和对引用表的 SPL 例程(例程引用那些 ALTER TABLE、CREATE INDEX 或 DROP INDEX 操作已经修改了的表)启用了自动重新编译时,如果添加或删除索引,则这些限制不适用。这是 GBase 8s 的缺省的行为。要获取更多关于在模式更改之后启用或禁用自动重新编译的更多信息,请参阅对 SET ENVIRONMENT 语句的 IFX_AUTO_REPREPARE 选项的描述。要获取更多关于 AUTO_REPREPARE 配置参数的信息,请参阅 GBase 8s 管理员参考手册。
然而,当 AUTO_REPREPARE 配置参数和 IFX_AUTO_REPREPARE 会话环境变量设置为禁用准备好的对象的重新编译时,将索引添加到在 DECLARE 语句中直接地或间接地引用的表,可类似地使相关的游标无效。指定该无效游标的后续的 OPEN 语句失败,即使它们包括 WITH REOPTIMIZATION 关键字。在禁用自动重新编译时,如果将索引添加到与游标相关联的表,则在您打开该游标之前,必须再次准备该语句并再次声明该游标。对于与调用 SPL 例程相关联的游标,对于那些引用已经添加或删除了索引的表的例程,您必须运行 UPDATE STATISTICS 语句。您不可简单地重新打开基于不再有效的准备好的语句的游标。