0

我需要连接到 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."Node"。

我尝试如下重写这个 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%'
4

1 回答 1

2

如果第一条语句有效,则表明您已创建区分大小写的列名。如果这样做,则必须在标识符周围使用双引号,并在每次引用该列时正确指定大小写。创建区分大小写的标识符通常是您应该不惜一切代价避免的事情。

如果这是一个新的数据库对象,首选的解决方案是将列名更改为不区分大小写

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

另一种选择是在表的顶部创建一个视图,该视图公开不区分大小写的标识符并查询该视图而不是基表。当然,您还需要对查询中引用的所有其他不区分大小写的标识符执行此操作。

于 2013-06-04T17:25:42.623 回答