How to use Alias in Where clause?(如何在 Where 子句中使用别名?)
问题描述
我有这个程序:
PROCEDURE P_LOAD_EXPIRED_ACCOUNT
(
pDayDiff IN NUMBER,
ExpiredCur OUT MEGAGREEN_CUR
)
IS
BEGIN
OPEN ExpiredCur FOR
SELECT
ACCOUNT_NAME, SERVICE_TYPE,
CASE
WHEN SERVICE_TYPE = 1 THEN ADD_MONTHS(ACTIVATED_DATE,3)
WHEN SERVICE_TYPE = 2 THEN ADD_MONTHS(ACTIVATED_DATE,6)
WHEN SERVICE_TYPE = 3 THEN ADD_MONTHS(ACTIVATED_DATE,12)
END
AS EXPIRED_DATE
FROM SUBSCRIBERS
WHERE (EXPIRED_DATE - CURRENT_DATE) < pDayDiff;
END;
但 SQL Developer 生成此错误:
but SQL Developer generate this error:
错误(20,10):PL/SQL:ORA-00904:EXPIRED_DATE":标识符无效
Error(20,10): PL/SQL: ORA-00904: "EXPIRED_DATE": invalid identifier
我相信 PLSQL 允许我在 Where 子句中使用别名,但是我忘记了什么吗?
I believe that PLSQL allows me to use Alias in Where clause, but is there something I forgot?
提前致谢.
推荐答案
您不能在 WHERE 子句中引用列别名 - 您的选择是:
You can't reference the column alias in the WHERE clause - your options are:
- 复制 WHERE 子句中的 CASE 语句
使用子查询:
- replicate the CASE statement in the WHERE clause
use a subquery:
PROCEDURE P_LOAD_EXPIRED_ACCOUNT(pDayDiff NUMBER,
ExpiredCur OUT MEGAGREEN_CUR)
IS
BEGIN
OPEN ExpiredCur FOR
SELECT x.account_name,
x.service_type,
x.expired_date
FROM (SELECT s.account_name,
s.service_type,
CASE
WHEN s.service_type = 1 THEN ADD_MONTHS(ACTIVATED_DATE,3)
WHEN s.service_type = 2 THEN ADD_MONTHS(ACTIVATED_DATE,6)
WHEN s.service_type = 3 THEN ADD_MONTHS(ACTIVATED_DATE,12)
END AS EXPIRED_DATE
FROM SUBSCRIBERS s) x
WHERE x.expired_date - CURRENT_DATE < pDayDiff;
END;
甲骨文 9i+
WITH summary AS (
SELECT s.account_name,
s.service_type,
CASE
WHEN s.service_type = 1 THEN ADD_MONTHS(ACTIVATED_DATE,3)
WHEN s.service_type = 2 THEN ADD_MONTHS(ACTIVATED_DATE,6)
WHEN s.service_type = 3 THEN ADD_MONTHS(ACTIVATED_DATE,12)
END AS EXPIRED_DATE
FROM SUBSCRIBERS s)
SELECT x.account_name,
x.service_type,
x.expired_date
FROM summary x
WHERE x.expired_date - CURRENT_DATE < pDayDiff;
这篇关于如何在 Where 子句中使用别名?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何在 Where 子句中使用别名?


- 使用 Oracle PL/SQL developer 生成测试数据 2021-01-01
- 如何将 Byte[] 插入 SQL Server VARBINARY 列 2021-01-01
- 远程 mySQL 连接抛出“无法使用旧的不安全身份验证连接到 MySQL 4.1+"来自 XAMPP 的错误 2022-01-01
- 在SQL中,如何为每个组选择前2行 2021-01-01
- 如何使用 pip 安装 Python MySQLdb 模块? 2021-01-01
- 更改自动增量起始编号? 2021-01-01
- SQL 临时表问题 2022-01-01
- 以一个值为轴心,但将一行上的数据按另一行分组? 2022-01-01
- 导入具有可变标题的 Excel 文件 2021-01-01
- 如何将 SonarQube 6.7 从 MySQL 迁移到 postgresql 2022-01-01