使用Oracle AS子句中的变量

时间:2016-03-04 19:56:32

标签: oracle

我使用以下内容作为查询的一部分

> final.test
  X Y Z
1 1 2 A
2 3 2 B
4 1 3 D

我收到的错误是" MEMO":无效标识符

我也试过

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

并收到同样的错误

有没有办法像这样声明字段?我觉得我错过了一些明显的东西。

1 个答案:

答案 0 :(得分: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 )

对于第二个WITH语句,您将数据集别名为名为MEMO的表 - 而不是字段。这可以工作:

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