八月 18, 2023
摘要:在本教程中,您将学习如何使用 PostgreSQL 的 drop procedure 语句来删除存储过程。
目录
DROP PROCEDURE 语句简介
drop procedure
语句删除一个存储过程。下面说明了drop procedure
语句的语法:
drop procedure [if exists] procedure_name (argument_list)
[cascade | restrict]
在这个语法中:
- 首先,在
drop procedure
关键字后指定要删除的存储过程的名称 (procedure_name
) 。 - 其次,如果您希望 PostgreSQL 在删除不存在的存储过程时发出通知而不是错误,请使用
if exists
选项。 - 第三,如果存储过程的名称在数据库中不唯一,请指定存储过程的参数列表。请注意,具有不同参数列表的存储过程可以共享相同的名称。PostgreSQL 需要参数列表来确定要删除哪个存储过程。
- 最后,使用
cascade
选项删除存储过程、及其依赖对象,以及依赖于这些对象的对象等等。默认选项是restrict
,如果存储过程具有任何依赖对象,则将拒绝删除该存储过程。
要删除多个存储过程,请在drop procedure
关键字后指定逗号分隔的存储过程名称列表,如下所示:
drop procedure [if exists] name1, name2, ...;
创建示例存储过程
让我们创建几个管理演员的存储过程,以便您可以了解如何删除它们:
以下insert_actor()
存储过程将新行插入actor
表中。它接受两个参数,即演员的名字和姓氏。
create or replace procedure insert_actor(
fname varchar,
lname varchar)
language plpgsql
as $$
begin
insert into actor(first_name, last_name)
values('John','Doe');
end;
$$;
以下insert_actor
存储过程也将一行插入到actor
表中。然而,它接受一个参数,即演员的全名。在将全名插入actor
表之前,insert_actor()
使用split_part()
函数将全名拆分为名字和姓氏。
create or replace procedure insert_actor(
full_name varchar
)
language plpgsql
as $$
declare
fname varchar;
lname varchar;
begin
-- split the fullname into first & last name
select
split_part(full_name,' ', 1),
split_part(full_name,' ', 2)
into fname,
lname;
-- insert first & last name into the actor table
insert into actor(first_name, last_name)
values('John','Doe');
end;
$$;
以下存储过程通过指定 id 删除一个演员:
create or replace procedure delete_actor(
p_actor_id int
)
language plpgsql
as $$
begin
delete from actor
where actor_id = p_actor_id;
end;
$$;
以下存储过程更新一个演员的名字和姓氏:
create or replace procedure update_actor(
p_actor_id int,
fname varchar,
lname varchar
)
language plpgsql
as $$
begin
update actor
set first_name = fname,
last_name = lname
where actor_id = p_actor_id;
end;
$$;
删除存储过程示例
首先,尝试删除insert_actor
存储过程:
drop procedure insert_actor;
PostgreSQL 发出以下错误:
ERROR: procedure name "insert_actor" is not unique
HINT: Specify the argument list to select the procedure unambiguously.
SQL state: 42725
因为有两个insert_actor
存储过程,所以需要指定参数列表,以便 PostgreSQL 可以正确选择要删除的存储过程。
第二步,删除接受一个参数的insert_actor(varchar)
存储过程:
drop procedure insert_actor(varchar);
由于insert_actor
存储过程现在是唯一的,因此您可以不指定参数列表删除它:
drop procedure insert_actor;
它等同于:
drop procedure insert_actor(varchar,varchar);
第三步,使用一条drop procedure
语句删除两个存储过程:
drop procedure
delete_actor,
update_actor;
总结
- 使用
drop procedure
语句删除存储过程。 - 在
drop procedure
关键字后面指定以逗号分隔的存储过程名称列表,删除多个存储过程。 - 如果存储过程名称不唯一,请使用参数列表指定要删除的存储过程。