例1: RETURN文でCASE式を使用した単純なSQL UDF定義
次のCREATE FUNCTIONリクエストは、calcに渡される最初の引数がリテラル「A」の場合は加法演算、「S」の場合は減算演算、「M」の場合は乗法演算、それ以外の場合は除法演算を実行します。
CREATE FUNCTION calc (func CHARACTER(1), A INTEGER, B INTEGER) RETURNS INTEGER LANGUAGE SQL DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COLLATION INVOKER INLINE TYPE 1 RETURN CASE WHEN func = 'A' THEN A + B WHEN func = 'S' THEN A - B WHEN func = 'M' THEN A * B ELSE A / B END;
次のSELECTリクエストは結果として5の値を返します。
SELECT calc('A', 2, 3);
次のSELECTリクエストは結果として6の値を返します。
SELECT calc('M', 2, 3);
例2: RETURN文のCASE式によるSQL UDFの定義
「例1: RETURN文でCASE式を使用した単純なSQL UDFの定義」と同様に、このCREATE FUNCTIONリクエストは、RETURN文にCASE式を指定します。
CREATE FUNCTION test.case_expr (a INTEGER, b INTEGER) RETURNS CHARACTER(50) LANGUAGE SQL DETERMINISTIC CONTAINS SQL SPECIFIC test.case_expr CALLED ON NULL INPUT SQL SECURITY DEFINER COLLATION INVOKER INLINE TYPE 1 RETURN CASE WHEN a > 1 THEN 'a is greater than 1' WHEN b > 1 THEN 'b is greater than 1' ELSE 'a and b are not greater than 1' END;