如何在SQL查询中声明常量?

shw*_*rtz 3 sql oracle oracle11gr2

我正在使用Oracle 11g R2.有没有办法在同一表达式中的SQL查询之前为从表中选择的单个值赋予名称(别名)?这是一个单独的SQL命令,我的意思是,没有PL/SQL.

我最接近的是:

WITH
Approved AS (SELECT c.value FROM configuration c WHERE c.code = 'Approved'),
Arrived AS (SELECT c.value FROM configuration c WHERE c.code = 'Arrived'),
Scheduled AS (SELECT c.value FROM configuration c WHERE c.code = 'Scheduled')

SELECT *
FROM list l WHERE l.status_key > (SELECT value FROM Approved);
Run Code Online (Sandbox Code Playgroud)

我正在寻找类似的东西,比如:

WITH
Approved AS CONSTANT (SELECT c.value FROM configuration c WHERE c.code = 'Approved'),
Arrived AS CONSTANT (SELECT c.value FROM configuration c WHERE c.code = 'Arrived'),
Scheduled AS CONSTANT (SELECT c.value FROM configuration c WHERE c.code = 'Scheduled')

SELECT *
FROM list l WHERE l.status_key > Approved;
Run Code Online (Sandbox Code Playgroud)

我不想内联值的select语句的原因是我的查询足够复杂,如果可能的话我宁愿采取一些复杂性.

Gor*_*off 5

我有时会使用这样的结构:

WITH const as
      (select max(case when c.code = 'Approved' then c.value end) as Approved,
              max(case when c.code = 'Approved' then c.value end) as Approved,
              max(case when c.code = 'Scheduled' then c.value end) as Scheduled
       from configuration c
      ),
      . . .
SELECT
FROM const cross join
     list l
WHERE status_key > Approved;
Run Code Online (Sandbox Code Playgroud)

有时如果我需要查询中不同位置的常量,那么我必须const不止一次地引入CTE.