[英]Access data of variable in PL/PgSQL
我有一個這樣的 PL/PgSQL function:
CREATE FUNCTION get_value(firstval integer) RETURNS SETOF mytable AS
$func$
DECLARE
current mytable;
BEGIN
SELECT fv FROM mytable WHERE fv = fistval INTO current;
IF current IS NULL THEN
INSERT INTO mytable(fv) VALUES (firstval);
END IF;
RETURN current.fv;
END
$func$ LANGUAGE plpgsql;
我需要返回current
變量的特定行( fv
),但是這段代碼不起作用(它不返回任何東西),那么我該怎么做呢?
有很多問題:
current
被聲明為記錄。 但是您嘗試將 integer 值分配給此復合變量SELECT INTO
。
表函數的返回應該通過RETURN TABLE
語句來實現。 沒有任何名為mytable
的表。 在 Postgres 概念中 - RETURNS SETOF mytable
的意思是 - 返回類型為表“mytable”的行。
在這種情況下,測試IS NULL
是不安全的。 你想檢查FOUND
變量。
也許您不想返回表 - 那么SETOF
子句使用不當。
CREATE OR REPLACE FUNCTION get_value(firstval int) RETURNS mytable AS $$ DECLARE _r mytable; BEGIN SELECT * FROM mytable WHERE fv = firstval INTO _r; IF NOT FOUND THEN INSERT INTO mytable(fv) VALUES(firstval); SELECT * FROM mytable WHERE fv = firstval INTO _r; END IF; RETURN _r; END; $$ LANGUAGE plpgsql;
注意, - 此代碼可能會執行您想要的操作。 但它在競爭條件下是不安全的。 最好使用 Postgres 語句INSERT ON CONFLICT DO
。
請先嘗試閱讀文檔- 它的設計與您的預期不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.