Oracle

功能:如果 x 或 y 為 null,則返回 null

  • January 25, 2021

我正在尋找一個 Oracle 18c 函式,如果兩個變數中的任何一個為空,則該函式的計算結果為空。

**約束:(**詳情請點擊此處

  • 函式/表達式不能包含空格(因此 CASE 不起作用)。
  • 由於權限不足,我無法創建自定義函式。

從技術上講,我已經找到了一種使用 NVL2() 的方法。x+y但從程式碼質量的角度來看,我懷疑這部分是否可以接受。

with cte as (
select    1 as x,    2 as y from dual
union all
select null as x,    3 as y from dual
union all
select null as x, null as y from dual
)
select
   x,
   y,
   -- Since anything + null = null, that means if either x or y are null, then the result will be null.
   nvl2(x+y,'no_nulls',null) as if_nulls_return_null
from
   cte

db<>小提琴

有沒有一種干淨的方法來return null if either x or y is null使用開箱即用的功能(並且沒有空格)?

編輯:

事實證明,在 ArcGIS Desktop 10.7.1 中使用基於函式的空間索引時,無需向 ALL_SDO_GEOM_METADATA 添加記錄。

沒有什麼可以限制您在函式定義中使用空格。唯一的限制是空間索引中的列不能包含空格。所以我不確定 CASE 語句或任何其他邏輯檢查將如何成為問題。

當插入到 USER_SDO_GEOM_METADATA 視圖中時,列不能在帶引號的字元串中包含空格或混合大小寫字母,並且在查詢中使用時不能在帶引號的字元串中(除非它是全大寫字元)。

此外,我認為使用 X+Y 語法檢查任一值是否為 null 就很好,只要您使用適當的命名和註釋來使程式碼可讀即可。

您可以將該**greatest**功能用於您的目的:

WITH s AS (
SELECT 1 AS nx, 1 AS ny FROM dual
UNION
SELECT NULL AS nx, 1 AS ny FROM dual
UNION
SELECT NULL as nx, NULL as ny FROM dual)
SELECT s.*
    , GREATEST (s.nx, s.ny) AS nresult
FROM   s;

結果:

引用自:https://dba.stackexchange.com/questions/281702