簡體   English   中英

Oracle:從 where 子句中選擇值作為虛擬表

[英]Oracle: SELECT value from where clause as dummy table

不幸的是,經過大量搜索后,我找不到以下任務的解決方案:

我需要一個 Oracle-SQL-Query 來返回 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 中實現這一點嗎? 提前感謝您的想法!

這是一個非常討厭的黑客,更多的是出於好奇:

select (
  select regexp_replace(vsql.sql_text,
    q'@.*where '(.*)' is not null@', '\1')
  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@', '\1') 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 中有效,並且(到目前為止)總是報告正在搜索的值,但我不知道它是否有保證。 感覺像是對時空連續體的濫用......

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM