处理函数数字变量上的空值 ''

Handle empty value '' on function numeric variable

我正在尝试处理 FUNCTION 变量中的空“”值。 当调用具有空值的函数时 return nothing 的正确方法应该是什么

SELECT *
FROM metadata.fn_get_id('mea', 'sau', '');




DROP FUNCTION IF EXISTS metadata.fn_get_id(VARCHAR, VARCHAR, NUMERIC);

CREATE OR REPLACE FUNCTION metadata.fn_get_id(a1 CHARACTER VARYING, b2 CHARACTER VARYING,
                                                            c3 NUMERIC DEFAULT 0
) RETURNS INT
    LANGUAGE plpgsql
AS
$$
DECLARE
    linked_id INT;
BEGIN
    EXECUTE
            'SELECT linked_id::INT FROM ' ||  || '_region
                WHERE 1=1 AND iso=upper(' || QUOTE_LITERAL() || ') AND id = '||  ||' limit 1;'
        INTO linked_id;
    RETURN linked_id;

END


$$;

-- TEST LINK_ID 1213506417 (PASS)
SELECT *
FROM metadata.fn_get_id('mea', 'sau', 414803422);

-- TEST Null (PASS)
SELECT *
FROM metadata.fn_get_id('mea', 'sau');

-- TEST empty (FAILS ... HOW to Handle)
SELECT *
FROM metadata.fn_get_id('mea', 'sau', '');

c3 函数参数类型设置为 text default null 并首先检查函数主体中的空字符串。

create or replace function metadata.fn_get_id(a1 text, b2 text, c3 text default null)
RETURNS integer language plpgsql as
$$
declare 
 -- your declarations
begin
    if nullif(c3, '') is null then
        return null;
    end if;
 -- your function body
$$;

致电:

SELECT *
FROM metadata.fn_get_id('mea', 'sau', 414803422::text);

顺便说一句,示例中的函数容易注入。

只需像这样调用函数:

metadata.fn_get_id('mea', 'sau', nullif('', ''))

这样一个空字符串就被NULL替换了。