【发布时间】:2015-06-18 11:29:18
【问题描述】:
我是 plpgsql 的新手,我正在尝试创建一个函数来检查表中是否存在某个值,如果不存在则添加一行。
CREATE OR REPLACE FUNCTION hire(
id_pracownika integer,
imie character varying,
nazwisko character varying,
miasto character varying,
pensja real)
RETURNS TEXT AS
$BODY$
DECLARE
wynik TEXT;
sprawdzenie INT;
BEGIN
sprawdzenie = id_pracownika;
IF EXISTS (SELECT id_pracownika FROM pracownicy WHERE id_pracownika=sprawdzenie) THEN
wynik = "JUZ ISTNIEJE";
RETURN wynik;
ELSE
INSERT INTO pracownicy(id_pracownika,imie,nazwisko,miasto,pensja)
VALUES (id_pracownika,imie,nazwisko,miasto,pensja);
wynik = "OK";
RETURN wynik;
END IF;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
问题是我收到错误消息说id_pracownika 是列名和变量。
如何在这种情况下指定“id_pracownika”指的是列名?
【问题讨论】:
-
对(输入)参数和表/列名称使用不同的名称。如果不知道,PostgreSQL 怎么知道要使用什么?
-
documentaion 在这一点上很明确:您应该使用
hire.id_pracownika引用参数,并使用pracownicy.id_pracownika引用列(像往常一样)。 -
您已经在分配
sprawdzenie = id_pracownika;,所以只需在INSERT INTO pracownicy(id_pracownika..,..,) VALUES(sprawdzenie,..,..)中使用sprawdzenie
标签: postgresql plpgsql race-condition uniqueidentifier