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

控えめに言っても、これは悪い設計です。これは他の開発者にとって混乱を招き、アプリケーションのバグにつながります。挿入用と更新用の 2 つのプロシージャを記述します。

それらをリンクしたい場合は、これら 2 つの手順が関連する機能であることを示すために (そして、なぜそうしたくないのでしょうか?)、それらをパッケージに入れます。それがパッケージの目的です。 詳細をご覧ください

于 2015-06-21T20:37:45.407 に答える
0

最良の設計は、2 つのオーバーロードされたプロシージャを持つことであり、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
                 ) 
-- 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 つのプロシージャを追加し、必要に応じて別のプロシージャ内で挿入または更新を使用してそれらを接続することです (もちろん、最後のプロシージャはパッケージの一部である必要があります)。 .
  2. p1 VARCHAR2 DEFAULT NULL構築する単一のプロシージャのパラメータ内でDEFAULT VALUES ( ....) を使用できます。したがって、これらのデフォルト値を使用して、同じ手順で挿入または更新を実行できますが、私はまだ最初のオプションのようであり、混乱するのではないかと心配しています.

このリンクを確認してください

この助けを願っています!!

于 2015-06-22T14:32:14.857 に答える