我正在嘗試處理 FUNCTION 變數中的空 '' 值。如下所示呼叫具有空值的函式時不回傳任何內容的正確方法應該是什么
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 ' || $1 || '_region
WHERE 1=1 AND iso=upper(' || QUOTE_LITERAL($2) || ') AND id = '|| $3 ||' 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', '');
uj5u.com熱心網友回復:
制作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);
順便說一句,示例中的函式很容易注入。
uj5u.com熱心網友回復:
只需像這樣呼叫函式:
metadata.fn_get_id('mea', 'sau', nullif('', ''))
以便將空字串替換為 NULL。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/448466.html
下一篇:如何在psycopg2中回滾?
