PL/pgSQL syntax error: 42601
PL/pgSQL syntax error: 42601
我是 pl/pgsql 的新手,我有一个问题:我正在尝试创建一个函数来根据 pensja
in:
计算税金
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
我不太确定错误在哪里?
您必须使用点作为小数点分隔符:
podatek = dochod*0.18-556.02;
除了@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;
我是 pl/pgsql 的新手,我有一个问题:我正在尝试创建一个函数来根据 pensja
in:
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
我不太确定错误在哪里?
您必须使用点作为小数点分隔符:
podatek = dochod*0.18-556.02;
除了@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;