3

Oracle のストアド プロシージャを介して値を渡すテキスト ボックスを含むページがあります。プロシージャが変更されたため、現在は 2 つのパラメーターがあり、1 つは入力値用で、もう 1 つは整数値を返します。

オラクルの手順は次のとおりです。

procedure UnoxDataFix(p_shpmt_nbr in pkms.asn_hdr.shpmt_nbr%type, retval out integer) is
  begin
  retval:=0;
    for r in (
        -- simple select statement
        )
    loop    
     if(r.stat_code = 10 and r.whse_xfer_flag = 'Y')
     then     
        update pkms.asn_dtl ad 
          -- simple set statement
        update pkms.asn_hdr ah
          -- simple set statement
          where ah.shpmt_nbr = p_shpmt_nbr
           RETURNING 1 into retval;
        commit;   
      end if;    
    end loop;
  end;

そして、ここに私が持っていたコアC#コードがあります:

this.oraServer.ExecuteNonQuery(this.connectionString, CommandType.Text, "begin INTEGRATION.UnoxDataFix('" + input + "'); end;");

接続文字列は機能します。エラーを発生させているのは実際の手順です。「入力」値は、プロシージャに送信される実際の値です。しかし、「retval」をサイトに戻す方法がわかりません。できる限りグーグルを試しましたが、役に立ちません。私は少し遅いので、すべてのコメントは大歓迎です。:)

4

1 に答える 1

2

プロシージャーは 2 つのパラメーターを想定しているため、入力パラメーターだけでなく 2 つのパラメーターを指定する必要があります。また、SQL インジェクションを防ぐためにバインド変数を使用することを好みます。(はい、OUT パラメータにバインド変数を使用することもできます)。

begin INTEGRATION.UnoxDataFix(:input, :retval); end;

私は C# の詳細に精通していないため、値の挿入と取得に使用する正確な方法についてはお答えできません。

余談ですが、これはどのような命名規則ですか? 読みやすさを目指していますか?:)

pkms.asn_hdr.shpmt_nbr

于 2012-06-22T14:25:16.317 に答える