执行不同任务的存储过程?

时间:2015-03-29 18:50:40

标签: sql oracle

我有一张客户表。

我创建了可用于将新数据插入表中的存储过程。但是,如果我想使用相同的过程来更新或删除该表中的数据,该怎么办?我可以轻松地执行此操作,还是必须为每个函数使用单独的函数/过程?

create or replace procedure add_customer(custid in table.id%type,
name table.name%type) 
is
begin
insert into table(id, name)
values(id, name);
commit;
end;
/

2 个答案:

答案 0 :(得分:0)

您可以在下面的示例中添加action之类的参数,并在代码中使用它:

create or replace procedure modify_customer(
  action in varchar2, custid in table.id%type, custname table.name%type) 
is
begin
if action = 'insert' then
  insert into table(id, name) values(custid, name);
  commit;
elsif action = 'delete' then 
  delete from table where id = custid and name = custname;
  commit;
end if;
end;

答案 1 :(得分:0)

您可以在add_customer过程中添加一个discriminator参数,该过程表示该操作是INSERT,UPDATE还是DELETE。基于此参数,您可以创建所需的插入,更新或删除语句。这样,您就可以对所有操作使用通用过程。

就使用一个过程或多个过程而言,如果表是一个列数有限的简单表,那么一个过程应该没问题。但是,一旦表中的列数增加,一个过程可能会变得比所需的更复杂。