我需要连接到oracle表并发出一个精选版本。当我这样做时:
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%'
答案 0 :(得分:2)
如果第一个语句有效,则表示您已创建区分大小写的列名称。如果这样做,则必须在标识符周围使用双引号,并在每次引用列时正确指定大小写。创建区分大小写的标识符通常是您应该不惜一切代价避免的。
如果这是一个新的数据库对象,首选的解决方案是将列名更改为不区分大小写
ALTER TABLE DW.KPX_PHYSICAL_MEMORY_DV
RENAME COLUMN "Node" TO Node;
另一种选择是在表的顶部创建一个视图,该视图公开不区分大小写的标识符并查询该视图而不是基表。当然,您还需要为查询中引用的所有其他不区分大小写的标识符执行此操作。