我如何执行列和函数输入具有相同名称的函数?
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
我正在尝试创建两个函数,一个用于插入行,一个用于删除行 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