[英]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.