我有一個簡單的案例陳述如下:
select
case WHEN upper(VALUE) is null then 'A_VALUE_ANYWAY' end test
FROM
V$SYSTEM_PARAMETER
WHERE
UPPER(VALUE)= 'NO_VALUE_IS_HERE'
此代碼旨在回傳“A_VALUE_ANYWAY”,因為 SQL 沒有輸出。
但是,它根本不回傳任何東西。
本質上,我想要的是一個強制從 case 陳述句回傳的值,而不是沒有行。
我可以通過案例陳述來做到這一點嗎?我應該使用某種形式的找不到資料的處理程式嗎?
我已經檢查過這個類似的問題,但這非常復雜,而且這個更簡單的陳述似乎不可能
沒有資料的 SQL CASE 陳述句
此外,它使用聯合從對偶中獲取值:
選擇Case,無資料回傳時
這似乎是一個“Fudge”,我覺得必須有一些設計的方法來處理在 case 陳述句中找不到資料。
uj5u.com熱心網友回復:
從 Oracle 12 開始,您可以使用以下FETCH語法,這樣您就不必多次查詢表:
SELECT value
FROM (
SELECT value,
1 AS priority
FROM V$SYSTEM_PARAMETER
WHERE UPPER(VALUE)= 'NO_VALUE_IS_HERE'
UNION ALL
SELECT 'A_VALUE_ANYWAY',
2
FROM DUAL
ORDER BY priority
FETCH FIRST ROW WITH TIES
)
db<>在這里擺弄
uj5u.com熱心網友回復:
您要問的是:“如果我的查詢沒有回傳任何行,我想查看一個值”。這不能用 case 運算式來解決。案例運算式轉換查詢的結果。如果沒有結果,就什么都改變不了。相反,您可以修改您的查詢并將其與另一個 select from dual 如果查詢本身沒有回傳結果,則回傳一個字串。這樣,任何一部分UNION ALL都會回傳一些東西。
SELECT
VALUE
FROM
V$SYSTEM_PARAMETER
WHERE
UPPER(VALUE)= 'NO_VALUE_IS_HERE'
UNION ALL
SELECT 'A_VALUE_ANYWAY'
FROM
DUAL
WHERE NOT EXISTS (SELECT 1
FROM
V$SYSTEM_PARAMETER
WHERE UPPER(VALUE)= 'NO_VALUE_IS_HERE'
這與無資料問題的 SQL Case 陳述句中的技術相同。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/435434.html
上一篇:Oracleapex中的資料
