具体化查询表定义中包含与全查询的内容相关的特定规则

对具体化查询表 "<表名>" 指定的全查询无效。原因码 = "<原因码>"。

说明:
具体化查询表定义中包含与全查询的内容相关的特定规则。某些规则基于具体化查询表选项(REFRESH DEFERRED 或 REFRESH IMMEDIATE),而另一些规则基于该表是否是复制的。返回此状态的 CREATE TABLE 语句中的全查询至少违反了 SQL Reference 中描述的其中一条规则。
创建登台表时可能会发生此错误。在这种情况下,该错误适用于在与登台表相关联的具体化查询表的定义中使用的查询。
因为该语句违反下列原因码所指示的限制,所以不能对其进行处理:

1
每个选择列表元素必须有名称。

2
全查询不能引用下列任何对象类型:
具体化查询表
登台表
声明的全局临时表
类型表
系统目录表
违反任何具体化查询表限制的视图
受保护的表
使用 CREATE NICKNAME 或 ALTER NICKNAME 语句中的 DISALLOW CACHING 子句创建的昵称直接或间接依赖于受保护表的视图

3
全查询不能包含下列数据类型的任何列引用或表达式:
LOB、LONG、DATALINK、XML、引用、用户定义的结构化类型或基于这些数据类型的任何单值类型

4
全查询不能包含符合以下条件的任何列引用、表达式或函数:
取决于数据的物理特征,例如 DBPARTITIONNUM、HASHEDVALUE、RID_BIT 和 RID
取决于对数据所作的更改,例如行更改表达式或 ROW CHANGE
TIMESTAMP 列
被定义为 EXTERNAL ACTION
被定义为 LANGUAGE SQL、CONTAINS SQL、READS SQL DATA 或
MODIFIES SQL DATA

5
当指定 REPLICATED 时,下列限制适用:
不允许聚集函数和 GROUP BY 子句
具体化查询表只能引用单个表;即,它不能包括连接、并集或子查询
不能指定 PARTITIONING KEY 子句

6
指定 REFRESH IMMEDIATE 时,全查询不能包含:
对昵称的引用
SELECT DISTINCT
对专用寄存器的引用
对全局变量的引用
不具确定性的函数
OLAP 函数、抽样函数和文本函数
使用聚集函数的结果的任何表达式
没有还包含 GROUP BY 子句的全查询的聚集函数
递归公共表表达式
子查询

7
当指定 REFRESH IMMEDIATE 时:
具体化查询表不能包含重复行
当指定 GROUP BY 子句时,所有 GROUP BY 荐必须包括在选择列表中
当指定包含 GROUPING SETS、CUBE 或 ROLLUP 的 GROUP BY 子句时,不能重复任何分组集合,并且如果 C 是出现在 GROUPING SETS、
CUBE 或 ROLLUP 中的可空 GROUP BY 项,那么 GROUPING(C) 必须出现在选择列表中
如果没有 GROUP BY 子句,那么每个基础表必须至少定义一个唯一键,而且这些键的所有列必须出现在具体化查询表定义的选择列表中

8
如果指定 REFRESH IMMEDIATE,那么在全查询包含 GROUP BY 子句时下列限制适用:
选择列表必须包含 COUNT(*) 或 COUNT_BIG(*)
对于每个可空列 C,如果选择列表包含 SUM(C),那么还需要 COUNT(C)
必须出现至少下列其中一个聚集函数(并且没有其他聚集函数):
SUM()、COUNT()、COUNT_BIG() 或 GROUPING()
不能指定 HAVING 子句
在分区数据库环境中,GROUP BY 列必须包含具体化查询表的分区键
不允许聚集函数的嵌套

9
如果指定 REFRESH IMMEDIATE,那么全查询必须是子查询,但存在一个例外,就是 UNION ALL 在 GROUP BY 的输入表表达式中受支持。

10
如果指定了 REFRESH IMMEDIATE 并且 FROM 子句引用了多个表,那么只支持内连接(不使用显式 INNER JOIN 语法)。

11
如果指定 REFRESH IMMEDIATE,那么 UNION ALL 或 JOIN 的输入表表达式不能包含聚集函数。

12
此具体化查询表的增量备份维护需要系统临时表,该表的行宽或列数超出数据库上当前可用的最大系统临时表空间可以容纳的限制。

 

 

用户响应:
更改 CREATE TABLE 语句中的全查询,以使其符合基于具体化查询表选项和该具体化查询表是否是复制的规则。

与原因码对应的操作是:

1
更正 CREATE TABLE 语句以确保所有元素都有名称(可使用 AS 子句来命名表达式或对具体化查询表定义的列列表中的所有列显式命名)。

2
更正 CREATE TABLE 语句以确保只引用受支持的对象。

3
更正 CREATE TABLE 语句以确保只引用受支持的列或表达式类型。

4
更正 CREATE TABLE 语句以确保只引用受支持的列、表达式或函数。

5
创建未复制的具体化查询表,或更正 CREATE TABLE 语句以确保该查询引用单个表而且不包含子查询、聚集或 PARTITIONING 子句。

6
将具体化查询表创建为 REFRESH DEFERRED,或者
除去昵称引用
除去 DISTINCT
除去专用寄存器
除去非确定性函数或将其替换为确定性函数
除去所有 OLAP、抽样函数和文本函数
从表达式中除去聚集函数或将表达式更改为对聚集函数的简单引用
除去聚集函数或添加 GROUP BY 子句
更正 CREATE TABLE 语句以确保未引用递归公共表表达式
除去子查询

7
将具体化查询表创建为 REFRESH DEFERRED,或者
更正 CREATE TABLE 语句以确保所有 GROUP BY 项在选择列表中
更正 GROUP BY 子句以确保没有重复分组集合
在选择列表中除去可空列 C 或添加 GROUPING(C)
更正 CREATE TABLE 语句以确保查询中引用的每个表中的至少一个
唯一键出现在选择列表中

8
将具体化查询表创建为 REFRESH DEFERRED,或者
将 COUNT(*) 或 COUNT_BIG(*) 添加至选择列表或除去 GROUP BY 子句
将 COUNT(*) 添加至选择列表或除去 SUM(C) 或将列 C 改变为不可空
除去不受支持的聚集函数或将它们替换为受支持的函数
除去 HAVING 子句
更正 CREATE TABLE 语句以确保 GROUP BY 子句包含所有分区键列

9
将具体化查询表创建为 REFRESH DEFERRED,或者将表定义更改为子查询或 GROUP BY 的输入表表达式中的 UNION ALL。

10
将具体化查询表创建为 REFRESH DEFERRED,或者使用内连接(不使用显式 INNER JOIN 语法)。

11
将具体化查询表创建为 REFRESH DEFERRED,或从 UNION ALL 或 JOIN 的输入表中除去聚集函数。

12
将具体化查询表创建为 REFRESH DEFERRED 或降低总行宽或列数,或者创建具有适当页大小的系统临时表空间。

 

posted on 2011-11-09 11:07  Shark Xu  阅读(488)  评论(0编辑  收藏  举报
为汶川地震死难者哀悼!