我們將把數據庫從10g更新爲12c。在這樣做之前,我們需要重新審視我們的sql語句,並作爲其中的一部分,我們需要檢查GROUP BY
通過編程發現分組錯誤
案件的下列行爲1:
SELECT abcd_pk,
COUNT(abcd_code),
ABCD_COUNT
FROM
(SELECT abcd_pk,
abcd_code,
(SELECT COUNT(abcd_code) FROM ABCD_TABLE
) "ABCD_COUNT"
FROM ABCD_TABLE
)
GROUP BY abcd_pk, ABCD_COUNT ;
- 工作在10G
- WORKS IN 12C
殼體2:
個SELECT abcd_pk,
COUNT(abcd_code),
ABCD_COUNT
FROM
(SELECT abcd_pk,
abcd_code,
(SELECT COUNT(abcd_code) FROM ABCD_TABLE
) "ABCD_COUNT"
FROM ABCD_TABLE
)
GROUP BY abcd_pk ;
- 工作在10G
- 不起作用IN 12C(ORA-00979:不是GROUP BY表達00979. 00000 - 「不是一個GROUP BY表達式」)
我們的代碼可以包含像SQL這樣不適合的case2。所以我們需要識別這些SQL。我已經準備好了一個SQL列表,其中包含我們項目中使用的GROUP BY
(.java文件/程序/函數/視圖等)。
要求是通過以下步驟找到GROUP BY
問題:一個
- 檢查列表中的一個獲得的SQL。
- 查找以編程方式檢查SQL列表的替代方法。
選項1需要大量的工作量,努力和時間,但我認爲選項2是不可能的。
有什麼建議如何進行?
反正我會說堅持案例1。如果遵循通用的GROUP BY規則,則永遠不會出錯 - 「如果指定了GROUP BY子句,則SELECT列表中的每個列引用都必須標識分組列或作爲set函數的參數。」 – jarlh