处理函数数字变量上的空值 ''
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替换了。
我正在尝试处理 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替换了。