我编写了一个存储过程,我正在尝试插入并更新该值。我关注的是当我执行插入时(它包含5个参数和不同的数据类型)具有不同的值并且在更新时间(它包含6个参数和不同的数据类型)具有不同的值。我想对两种情况使用单个存储过程(插入/更新)。如何管理参数?
程序
create or replace procedure PS_File_Update_Insert (
Input_val in varchar2
, p1 in varchar2
, p2 in varchar2
, p3 in varchar2
, p4 in varchar2
, p5 in varchar2
)
is
BEGIN
if Input_val = 'Insert' then
insert into PS_FILE (SRC_FILE_ID
,TRUSTED_PARTY_ID
,FILE_NM,FILE_PROC_DT
,FILE_STATUS)
values (SRC_FILE_ID_SEQ.nextval
,1234
,'zxcv'
,SYSDATE
,'NEW');
elsif Input_val = 'update' then
update PS_FILE
set FILE_STATUS='STAGING'
, REC_CNT='abcd'
, ERR_CNT='123'
, DUPE_CNT=NULL
where SRC_FILE_ID='1234';
end if;
end;
答案 0 :(得分:3)
秃顶这是一个糟糕的设计。这对其他开发人员来说很困惑,并且会导致应用程序出错。编写两个过程,一个用于插入,另一个用于更新。
如果你想链接它们,以显示这两个程序是相关的功能(为什么你不想这样做?)将它们放在一个包中。这就是包的目的。 Find out more
答案 1 :(得分:0)
我认为最好的设计是有两个重载过程,一个有5个参数用于插入和同名程序用6个参数进行更新。对于调用程序,它看起来会像同一个名字,但它会采取不同的行为。
表示插入..
create or replace procedure PS_File_Update_Insert (
Input_val in varchar2
, p1 in varchar2
, p2 in varchar2
, p3 in varchar2
, p4 in varchar2
)
-- insert code
更新
create or replace procedure PS_File_Update_Insert (
Input_val in varchar2
, p1 in varchar2
, p2 in varchar2
, p3 in varchar2
, p4 in varchar2
, p5 in varchar2
)
-- update code.
答案 2 :(得分:0)
我认为您有多种方法可以满足您的需求:
reserve
....)。因此,使用这些默认值,您可以在同一过程中执行插入或更新,但我仍然是第一个选项,我担心会让人感到困惑。查看此link
希望这有帮助!!