如何在SQL中从视图查询别名列?

如何在SQL中从视图查询别名列?,sql,oracle,sql-view,Sql,Oracle,Sql View,在此处输入代码我创建了一个视图,其中只有很少的列作为别名,值为空。例如: CREATE OR REPLACE VIEW ABC_V AS (SELECT ORG_CODE, CURRENCY, '' "ExpiryDate" FROM ABC ); ExpiryDate列在表ABC 现在我想查询select语句中的所有三列值,以准备一个分隔的文本文件 select ORG_CODE||'|'||CURRENCY||'|'||ExpiryDa

在此处输入代码我创建了一个视图,其中只有很少的列作为别名,值为空。例如:

CREATE OR REPLACE VIEW ABC_V AS
(SELECT ORG_CODE,
        CURRENCY,
        '' "ExpiryDate"
 FROM ABC
);
ExpiryDate
列在表
ABC
现在我想查询
select
语句中的所有三列值,以准备一个
分隔的文本文件

select ORG_CODE||'|'||CURRENCY||'|'||ExpiryDate
from( SELECT ORG_CODE,
             CURRENCY,
             ExpiryDate FROM ABC_V );
但是我得到了错误

**ORA-00904:“到期日”:无效标识符 90400000-%s:无效标识符 原因:
行动:


请建议一种方法来实现这一点。

他是如何做到这一点而不出错的:

select ORG_CODE || '|' || CURRENCY || '|' || "ExpiryDate"
from( SELECT ORG_CODE
             , CURRENCY
             , "ExpiryDate" 
      FROM ABC_V );
下面是一个演示:


当您将ExpiryDate括在双引号中时,必须这样做-完全按照相同的字母大小写-始终引用它

因此:


更好的选择:在使用Oracle时取消双引号,并执行以下操作:

CREATE OR REPLACE VIEW abc_v
AS
   SELECT org_code, currency, '' expirydate FROM abc;

SELECT org_code || '|' || currency || '|' || expirydate FROM abc_v;

(无需子查询)。

无需创建额外视图来添加此类伪列(从11g开始)

您可以直接在表上使用虚拟列

alter table tab add (
  "ExpiryDate" DATE as (NULL)
);
您可以使用新列查询表(但请记住double quotetd colun名称,并保留定义的大小写!)


错误在于您在名称上使用了双引号。因此,您告诉Oracle列名区分大小写。我的建议是:在声明名称时不要使用双引号。使用下划线表示可读性:
''作为到期日
。如果没有引号,您可以选择列,因此:
选择到期日…
因此:
选择到期日…
因此:
选择到期日…
-该列不区分大小写。
alter table tab add (
  "ExpiryDate" DATE as (NULL)
);
SELECT ORG_CODE,
        CURRENCY,
        "ExpiryDate"
 FROM tab;