我如何执行列和函数输入具有相同名称的函数?

How can i execute a function where columns and function inputs have the same name?

我正在尝试创建两个函数,一个用于插入行,一个用于删除行 table:

CREATE TABLE person
firstName |lastName |age
Lebron    |James    |35
Steph     |Curry    |33
Kevin     |Durant   |31
Nikola    |Jokic    |26

我被要求使用 3 个参数作为函数 ,firstName , lastName,age 的输入来创建这 2 个函数。

就插入而言,我在创建函数时没有遇到任何问题:

CREATE OR REPLACE FUNCTION insert_function(firstName character varying(45)
                                   ,lastName character varying(45) ,age character varying(45))
                                
                                                                       -
RETURNS void AS
$$
BEGIN

INSERT INTO person (firstName , lastName , age)
VALUES (firstName , lastName , age);
END;
$$
LANGUAGE 'plpgsql';

虽然我的 table 中列的名称和函数的参数相同,但我没有遇到任何问题。如果有什么地方看起来不对,请随时提出来。

另一方面,当我尝试创建我的删除功能时,它并不顺利:

  CREATE OR REPLACE FUNCTION insert_function(firstName character varying(45)
                                   ,lastName character varying(45) ,age character varying(45))
                                
                                                                       -
RETURNS void AS
$$
BEGIN

DELETE FROM person
WHERE firstName = NEW.firstName AND lastName=NEW.lastName AND age=NEW.age;
END;
$$
LANGUAGE 'plpgsql';

我收到了这条消息: 错误:列引用“firstName”不明确

我知道这个问题是因为函数的参数和列的名称相同。有人可以帮我解决这个问题吗?

谢谢。

你的感觉是正确的,这应该会导致最近版本的 PostgreSQL 出错。

如果您无法重命名参数,这将是最简单的解决方案,请使用函数名称限定 VALUES 子句中的参数名称:

VALUES (insert_function.firstname, ...)

对于 DELETE 中的 WHERE 条件,使用 table 名称限定 table 列:

WHERE person.firstname = insert_function.firstname