在 PostgreSQL 14 中,JSON 字串中的未指定引數會干擾函式呼叫中的引數默認值,盡管它看起來是 NULL。
我相信tst := j::json->>'tst'; 正在用偽空值填充 tst。
我錯過了一些簡單的事情嗎?我考慮過合并到 testNull 中宣告的變數,但感覺很亂,我覺得必須有一種更優雅的方法。
create or replace function testNull(test varchar, tst int default 1) returns int
language plpgsql as $$
declare
begin
raise notice '%', tst;
return tst;
end; $$;
----------------------------
create or replace function testNulljson(j varchar) returns int
language plpgsql as $$
declare
test varchar;
tst int;
begin
raise notice '%', tst;
test := j::json->>'test';
tst := j::json->>'tst';
return testNull(test, tst);
end; $$;
----------------------------
select testNull('testValue'); -- returns 1
select testNulljson('{"test":"testValue"}'); -- returns null
uj5u.com熱心網友回復:
https://www.postgresql.org/docs/current/ddl-default.html
可以為列分配默認值。當創建一個新行并且沒有為某些列指定值時,這些列將填充它們各自的默認值。
有一個區別:a。select * from public.testNull('testValue', NULL);
灣。select * from public.testNull('testValue' );
a 將回傳NULL,b 將回傳1;
當你打電話時,select testNulljson('{"test":"testValue"}'); 你終于在打電話了select * from public.testNull('testValue', NULL);,它會回傳 Null。
當你呼叫select testNull('testValue'); -- returns 1你沒有提到tst輸入引數時,它將被 1 替換,因此回傳 1。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/444786.html
標籤:PostgreSQL
下一篇:查詢以在特定條件下選擇限制
