关于DB2 MQT 增量更新,出错代码详细说明
?
具體化查詢表定義中包含與全查詢的內容相關的特定規則
對具體化查詢表 "<表名>" 指定的全查詢無效。原因碼 = "<原因碼>"。
說明:
具體化查詢表定義中包含與全查詢的內容相關的特定規則。某些規則基于具體化查詢表選項(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 或降低總行寬或列數,或者創建具有適當頁大小的系統臨時表空間。
?
轉載于:https://www.cnblogs.com/SharkXu/archive/2011/11/09/DB2MQTErrorCode.html
總結
以上是生活随笔為你收集整理的关于DB2 MQT 增量更新,出错代码详细说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: zookeeper-01
- 下一篇: deep learning:RBM公式推