1

我已经编写了一个存储过程,我试图在其中插入和更新值。我在执行插入时担心(它包含 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;
4

3 回答 3

3

坦率地说,这是一个糟糕的设计。这会让其他开发人员感到困惑,并会导致应用程序出现错误。编写两个过程,一个用于插入,一个用于更新。

如果你想链接它们,以表明这两个过程是相关的功能(你为什么不想这样做?)将它们放在一个包中。这就是包的用途。 了解更多

于 2015-06-21T20:37:45.407 回答
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.
于 2015-06-22T12:02:57.667 回答
0

我认为您有几种方法可以执行所需的操作:

  1. 解决此问题的最佳方法是使用一个包,在其中添加这两个过程,并在另一个过程中使用它们来连接它们(当然最后的过程应该是包的一部分) .
  2. p1 VARCHAR2 DEFAULT NULL您可以在要构建的单个过程的参数中使用 DEFAULT VALUES ( ....)。因此,使用这些默认值,您可以在同一过程中执行插入或更新,但我仍然喜欢第一个选项,恐怕会造成混淆。

查看此链接

希望这有帮助!!

于 2015-06-22T14:32:14.857 回答