2013-06-04 42 views
0

我需要連接到oracle表併發出select stment。當我這樣做:如何針對oracle表發出對列表沒有雙引號的select語句

SELECT T."Node" as LPAR, to_char(CAST((FROM_TZ(CAST(GET_UTC_TIMESTAMP(T."Timestamp", TMZDIFF) AS TIMESTAMP),'+00:00') AT TIME ZONE 'US/Eastern') AS DATE),'dd-Mon-yyyy hh24:mi') as DATETIME,T."MAX_Memory_Size_MB",T."MIN_Comp_Memory",T."AVG_Comp_Memory", T."MAX_Comp_Memory", T."MIN_Non_Comp_Memory", T."AVG_Non_Comp_Memory", "MAX_Non_Comp_Memory" FROM DW.KPX_PHYSICAL_MEMORY_DV T where t."Node" like 'server%' 

它的工作原理,但我使用的程序不喜歡列名周圍的雙引號,例如, T. 「節點」。

我試圖重寫這個sql語句如下,但現在我得到無效的標識符。

有沒有辦法解決這個問題?

SELECT Node as LPAR, to_char(CAST((FROM_TZ(CAST(GET_UTC_TIMESTAMP(Timestamp, TMZDIFF) AS TIMESTAMP),'+00:00') AT TIME ZONE 'US/Eastern') AS DATE),'dd-Mon-yyyy hh24:mi') as DATETIME,MAX_Memory_Size_MB, MIN_Comp_Memory,AVG_Comp_Memory, MAX_Comp_Memory, MIN_Non_Comp_Memory, AVG_Non_Comp_Memory, MAX_Non_Comp_Memory FROM DW.KPX_PHYSICAL_MEMORY_DV where Node like 'server%' 

回答

2

如果第一條語句有效,表示您已創建區分大小寫的列名稱。如果這樣做,則必須在標識符周圍使用雙引號,並在每次引用列時指定正確的大小寫。通常應該不惜一切代價避免創建區分大小寫的標識符。

如果這是一個新的數據庫對象,優選的解決方案將是改變列名是不區分大小寫的

ALTER TABLE DW.KPX_PHYSICAL_MEMORY_DV 
    RENAME COLUMN "Node" TO Node; 

另一個選擇是創建暴露情況下在表的頂部的圖 - 敏感標識符並查詢該視圖而不是基表。當然,您還需要爲查詢中引用的所有其他不區分大小寫的標識符執行此操作。

+0

更改表不是選項。我沒有任何寫入來修改表格等。我只能發佈選擇的語句。 – user1471980

+0

@ user1471980 - 然後你被困在需要使用區分大小寫的標識符,你必須確保標識符總是用雙引號括起來並且正確放置。正如您發現的那樣,並非所有工具都能處理這種情況,這是區分大小寫敏感標識符的原因之一。 –

+0

我剛剛發現了一個解決方案,我必須避開雙引號。我會繼續並接受你的回答。謝謝。 – user1471980