如果专用寄存器 USER 或 CURRENT SCHEMA 用来定义视图列的话,则视图将在数据库迁移之后变得不可用。例如:
create view v1 (c1) as values user
在版本 5 中,USER 和 CURRENT SCHEMA 为数据类型 CHAR(8),但自版本 6 开始,它们已被定义为 VARCHAR(128)。在此示例中,如果视图是在版本 5 中创建的,则列 c1 的数据类型为 CHAR,且在数据库迁移之后它仍为 CHAR。如果是在迁移之后使用该视图,它将在运行时进行编译,但会失败,原因是数据类型不匹配。
解决方案是删除该视图,然后重新创建它。在删除该视图之前,通过查询 SYSCAT.VIEWS 目录视图来捕获用来创建该视图的语法。例如:
select text from syscat.views where viewname='<>'