Oracle:SELECT 来自 where 子句的值作为虚拟 table

Oracle: SELECT value from where clause as dummy table

经过大量搜索,不幸的是我找不到解决以下任务的方法:

我需要一个 Oracle-SQL-查询,returns 来自 WHERE 子句的值作为结果值。这听起来很简单,但我就是找不到如何实现它。

示例(应该如何):

SELECT some_dummy_colum FROM some_dummy_table WHERE some_dummy_coumn = 'MY_VALUE';

期望的结果:

MY_VALUE

我知道我可以写这样的东西

SELECT 'MY_VALUE' FROM DUAL;

但在这种情况下,我无法对 'MY_VALUE' 进行硬编码,它只能在 WHERE 子句中提供(而不是在 SELECT 或 FROM 部分或其他地方)。

在 Oracle 中有什么方法可以做到这一点吗? 提前感谢您的想法!

这是一个非常讨厌的 hack,更多的是出于好奇:

select (
  select regexp_replace(vsql.sql_text,
    q'@.*where '(.*)' is not null@', '')
  from v$session vses
  join v$sql vsql
  on vsql.sql_id = vses.sql_id
  where vses.audsid = userenv('SESSIONID') 
) as result
from dual
where 'MY_VALUE' is not null
/

RESULT              
--------------------
MY_VALUE 

或者没有子查询,如果你可以使 where 子句更复杂:

select regexp_replace(vsql.sql_text,
  q'@.*and '(.*)' is not null@', '') as result
from v$session vses
join v$sql vsql
on vsql.sql_id = vses.sql_id
where vses.audsid = userenv('SESSIONID') 
and 'MY_VALUE2' is not null
/

RESULT              
--------------------
MY_VALUE2 

无论哪种方式,它都在数据字典中查找该会话当前正在执行的语句;而且我不完全确定这是一件有效的事情。这似乎在 11g 和 12c 中有效,并且(到目前为止)总是报告正在搜索的值,但我不知道它是否有保证。感觉像是在滥用 space-时间连续体...

with t as 
(
select 'CHALKEG' as name from dual
)
select * from t where name = 'CHALKEG'