PostgreSQL 删除程序

在本教程中,您将学习如何使用 PostgreSQL drop procedure 语句删除过程。

摘要:在本教程中,您将学习如何使用 PostgreSQL drop procedure 语句删除过程。

PostgreSQL Drop Procedure 语句介绍

该 drop procedure 语句删除一个存储过程。下面说明了该 drop procedure 语句的语法:

drop procedure [if exists] procedure_name (argument_list)
[cascade | restrict]

在这个语法中:

  • 首先, procedure_name 在 drop procedure 关键字后指定要删除的存储过程的名称 ( ) 。
  • 其次, if exists 如果您希望 PostgreSQL 在删除不存在的存储过程时发出通知而不是错误,请使用该选项。
  • 第三,如果存储过程的名称在数据库中不是唯一的,则指定存储过程的参数列表。请注意,具有不同参数列表的存储过程可以共享相同的名称。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 表中插入一行。但是,它接受一个参数,即演员的全名。在 insert_actor() 使用 split_part() 功能将它们插入之前的全名分成名字和姓氏 actor 表。

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; 
$$;

PostgreSQL 删除过程示例

首先,尝试删除 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 关键字后指定逗号分隔的存储过程名称列表以删除多个存储过程。
  • 如果存储过程名称不唯一,请使用参数列表指定要删除的存储过程。