2
我想在postgres中創建一個函數,如果它不存在並插入一行,並返回該行的id(新創建或現有)。我可以在postgres中使用INSERT內CASE
我想出了這一點:
CREATE OR REPLACE FUNCTION
get_enttype(name character varying, module character varying)
RETURNS integer LANGUAGE SQL STABLE AS $$
SELECT typeid FROM enttypes WHERE name = $1 AND module = $2
$$;
CREATE OR REPLACE FUNCTION
ensure_enttype(name character varying, module character varying)
RETURNS integer LANGUAGE SQL AS $$
SELECT CASE WHEN get_enttype($1, $2) IS NULL
THEN
INSERT INTO enttypes(name, module) VALUES ($1, $2) RETURNING typeid
ELSE
get_enttype($1, $2)
END
$$;
然而它引起了由於INSERT
內CASE
語法錯誤。我設法通過在INSERT
中創建一個單獨的函數並在CASE
中使用此函數來解決此問題。它按預期工作,但這種修復看起來有點奇怪。我的問題是 - 我可以解決這個問題而不創建另一個功能?
但將你的代碼返回的typeid如果記錄已經存在? – zefciu
@zefciu編輯後的查詢將會執行。 –