我是pl / pgsql的新手,我有一个问题:我正在尝试创建一个基于pensja
计算税收的函数:
create table pracownicy (
id_pracownika int unique
, imie varchar(20)
, nazwisko varchar(20)
, miasto varchar(20)
, pensja real);
insert into pracownicy values
(1, 'John', 'Smith', 'New York', 150)
, (2, 'Ben', 'Johnson', 'New York', 250)
, (3, 'Louis', 'Armstrong', 'New Orleans', 75)
, (4, 'John', 'Lennon', 'London', 300)
, (5, 'Peter', 'Gabriel', 'London', 100);
我创建了函数:
CREATE OR REPLACE FUNCTION pit(pensja real)
RETURNS real AS
$BODY$
DECLARE
dochod REAL;
podatek REAL;
BEGIN
dochod = 12*pensja;
IF dochod <= 85528 THEN
podatek = dochod*0,18-556,02;
RETURN podatek;
ELSE
podatek = 14839 + 0,32*(dochod - 85528);
RETURN podatek;
END IF;
END;
$BODY$
LANGUAGE plpgsql;
我正试图运行它:
select nazwisko, pensja, pit(pensja) from pracownicy;
接收:
ERROR: query "SELECT * dochod 0,18-556,02" returned 3 columns SQL state: 42601 Context: function PL / pgSQL pit (real), line 8 in the assignment
我不确定错误在哪里?
答案 0 :(得分:2)
您必须使用点作为小数点分隔符:
podatek = dochod*0.18-556.02;
答案 1 :(得分:0)
除了@Jens指出的小数点分隔符的主要问题外,您还可以在很大程度上简化您的功能。 plpgsql中的分配比其他流行语言的分配要贵得多。
CREATE OR REPLACE FUNCTION pit(pensja real)
RETURNS real AS
$func$
DECLARE
dochod real := 12 * pensja;
BEGIN
IF dochod <= 85528 THEN
RETURN dochod * 0.18 - 556.02;
ELSE
RETURN (dochod - 85528) * 0.32 + 14839;
END IF;
END
$func$ LANGUAGE plpgsql;