2009-01-28 36 views
1

當我將報表區域的SQL定義爲SELECT * FROM some_table時,一切正常,直到將新列添加到some_table - 然後它會打破「ORAxxx否數據發現「錯誤。修復起來很容易,因爲即使不進行任何更改,也可以再次對該區域應用更改。但是,它不適合強大的應用程序。在Oracle Application Express(ApEx)3.0中添加列時SELECT *會中斷

是否有一些參數組合會允許SELECT *不會與新列中斷?將任何默認格式或標題應用於新列就足夠了。

我知道我可以從數據字典中構造列列表,然後將所有內容連接到SELECT語句中進行評估,但這看起來相當不雅。

回答

2

當前您所在的區域源是(我推測)設置爲「使用特定於查詢的列名稱和驗證查詢」。這意味着爲查詢中的每個列顯式定義了一個報告列,並且SQL預計是靜態的。

如果將區域源更改爲「使用通用列名稱(僅在運行時解析查詢)」,那麼在添加新列之後它仍然可以工作,並且列標題默認爲列名稱。

還有另一個屬性「最大數量的通用報告列」,默認爲60,並且必須設置爲足夠大的值以適應添加到表中的任何未來列。

3

一般情況下不建議使用SELECT *查詢,因爲:

  • 返回所有列,則優化較少打盡。
  • 它使得減少健壯的應用程序,因爲添加新的列更改查詢的結果給出意想不到的結果。沒有SELECT *,我的意思是給出你需要的列,添加新的列對應用程序無關緊要。

無論如何,請記住,一個視圖中創建一個SELECT *,甲骨文創建視圖替換*所有列,可能是APPEX正在同樣的事情。

+0

本報告的明確要求是「只列出整個表格」,並且所討論的表格處於流動狀態,即正在積極開發。 從這個角度來看,健壯性對我來說意味着:應用程序不會破壞並列出用戶所期望的最新列布局。 – ttarchala 2009-01-29 09:37:41

相關問題