2016-03-04 47 views
0

我使用下面作爲查詢的一部分從Oracle使用可變AS子句

SELECT 
    MEMO_COMMENT as MEMO, 
    INSTR(MEMO, 'PD') AS PastDue 
    FROM table 

我收到的錯誤是「備忘錄」:無效的標識符

我還試圖

` WITH MEMO AS (select MEMO_COMMENT FROM table) 
select INSTR(MEMO, 'PD') AS PastDue` 
FROM table 

並收到相同的錯誤

有沒有辦法來聲明像這樣的字段?我覺得我失去了一些明顯的東西。

+0

你不需要'as'。您可以通過留下空間來分配別名。試着做'選擇MEMO_COMMENT MEMO,....' – Mustafa

回答

0

在第一個,你不能使用別名作爲在同一嵌套級別一個選擇欄,所以這是第二個引用,錯誤的是:

SELECT 
    MEMO_COMMENT as MEMO, 
    INSTR(MEMO, 'PD') AS PastDue 
    FROM table 

應該是:

SELECT 
    MEMO_COMMENT  as MEMO, 
    INSTR(MEMO_COMMENT , 'PD') AS PastDue 
    FROM table 

或者你可以從一個更高的嵌套級別引用別名,例如:

SELECT 
     INSTR(MEMO , 'PD') AS PastDue 
     FROM (SELECT   
       MEMO_COMMENT as MEMO 
       FROM table) 

對於第二個,在與國家您正在將數據集作爲名爲MEMO的表進行別名 - 而不是字段。這將工作雖然:

WITH MEM_DATA AS (select MEMO_COMMENT as MEMO FROM table) 
select INSTR(MEMO, 'PD') AS PastDue` 
FROM MEM_DATA; 
+0

這很有道理,我沒有完全理解with clause。謝謝。 –