创建简单的删除功能postgresql
create simple delete function postgresql
我是 PostgreSQL 的新手,我创建了一个带有插入功能的简单 table,但是当我使用我的删除功能时,它会清除我所有插入的查询,知道会发生什么吗?如果有人问,我也在使用 PostgreSQL v9.6
CREATE TABLE sample(
id SERIAL PRIMARY KEY,
sy char(9),
sem char(1)
);
CREATE FUNCTION insert(sy char,sem char)
returns void
AS
$$
Begin
insert into sample(sy,sem) values (sy,sem);
END;
$$
LANGUAGE 'plpgsql';
select insert('2011-2012','1');
select insert('2013-2014','2');
select insert('2015-2016','1');
select insert('2017-2018','2');
CREATE FUNCTION delete(id int)
returns bool
AS
$$
BEGIN
EXECUTE 'delete from sample where id = id';
RETURN true;
END;
$$
LANGUAGE 'plpgsql';
select delete(1);
select * from sample
id sy sem
delete from sample where id = id
删除列 id
等于列 id
的所有行。因为这都是字符串的一部分,所以没有进行参数替换。但是没有必要使用动态 SQL (execute '...'
) 开始。为了避免列名和参数名之间的冲突,建议以某种方式区分它们。许多人通过为参数使用前缀来做到这一点。另外:语言名称是一个标识符,不应被引用。该语法已弃用,可能会在未来的版本中删除,所以不要习惯它。
因此,删除动态 SQL 并重命名您的参数:
CREATE FUNCTION delete(p_id int)
returns bool
AS
$$
BEGIN
delete from sample where id = p_id;
return true;
END;
$$
LANGUAGE plpgsql;
我是 PostgreSQL 的新手,我创建了一个带有插入功能的简单 table,但是当我使用我的删除功能时,它会清除我所有插入的查询,知道会发生什么吗?如果有人问,我也在使用 PostgreSQL v9.6
CREATE TABLE sample(
id SERIAL PRIMARY KEY,
sy char(9),
sem char(1)
);
CREATE FUNCTION insert(sy char,sem char)
returns void
AS
$$
Begin
insert into sample(sy,sem) values (sy,sem);
END;
$$
LANGUAGE 'plpgsql';
select insert('2011-2012','1');
select insert('2013-2014','2');
select insert('2015-2016','1');
select insert('2017-2018','2');
CREATE FUNCTION delete(id int)
returns bool
AS
$$
BEGIN
EXECUTE 'delete from sample where id = id';
RETURN true;
END;
$$
LANGUAGE 'plpgsql';
select delete(1);
select * from sample
id sy sem
delete from sample where id = id
删除列 id
等于列 id
的所有行。因为这都是字符串的一部分,所以没有进行参数替换。但是没有必要使用动态 SQL (execute '...'
) 开始。为了避免列名和参数名之间的冲突,建议以某种方式区分它们。许多人通过为参数使用前缀来做到这一点。另外:语言名称是一个标识符,不应被引用。该语法已弃用,可能会在未来的版本中删除,所以不要习惯它。
因此,删除动态 SQL 并重命名您的参数:
CREATE FUNCTION delete(p_id int)
returns bool
AS
$$
BEGIN
delete from sample where id = p_id;
return true;
END;
$$
LANGUAGE plpgsql;