PL/pgSQL列名与变量相同 [英] PL/pgSQL column name the same as variable

查看:239
本文介绍了PL/pgSQL列名与变量相同的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是plpgsql的新手,我正在尝试创建一个函数,该函数将检查表中是否存在某个值,否则将添加一行.

I'm new to plpgsql and I'm trying to create function that will check if a certain value exists in table and if not will add a row.

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是列名和变量时遇到错误.

The issue is that I'm getting errors saying that id_pracownika is a column name and a variable.

在这种情况下如何指定"id_pracownika"是指列名?

How to specify that "id_pracownika" in such context refers to column name?

推荐答案

CREATE OR REPLACE FUNCTION hire(
    id_pracownika integer
  , imie varchar
  , nazwisko varchar
  , miasto varchar
  , pensja real)
  RETURNS text LANGUAGE plpgsql AS
$func$
BEGIN
  IF EXISTS (SELECT FROM pracownicy p
             WHERE  p.id_pracownika = hire.sprawdzenie) THEN
      RETURN 'JUZ ISTNIEJE'::text;  -- wynik
   ELSE
      INSERT INTO pracownicy(id_pracownika,imie,nazwisko,miasto,pensja)
      VALUES (hire.sprawdzenie,hire.imie,hire.nazwisko,hire.miasto,hire.pensja);

      RETURN 'OK'::text;  -- wynik
   END IF
END
$func$;

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆