1

aspx/c# ページから orcale プロシージャに開始日と終了日を渡すタスクが与えられました。ページに DateTime オブジェクトの 2 つのリスト、開始日のリストと終了日のリストがあります。

私の質問は、これを行うにはどうすればよいですか? おそらく2次元配列として、プロシージャに渡すユーザー定義型を作成する必要があると思いますが、次の方法が本当にわかりません。

A. 配列に 2 つのリストの値を入力し、次のことを行います。

B. プロシージャに渡すユーザー定義型を作成します。

私は少し掘り下げましたが、これの良い例はあまりなく、正しい軌道に乗っているかどうかさえわかりません. これを回避するのに本当に苦労しているので、何か助けていただければ幸いです。以下に oracle pl/sql コードを含めました (修正する権限がないため、これを変更することはできません)。

PROCEDURE p_add_project_dates(

p_project_id IN CS01_PROJECT_HEADER.PROJECT_ID%TYPE,

p_tab_project_dates IN t_tab_project_dates,

   p_any_time_participation IN CS01_PROJECT_HEADER.ANY_TIME_PARTICIPATION%TYPE,

   p_error_msg OUT VARCHAR2,

p_return_code OUT NUMBER

) IS

occur_added_retcode NUMBER := 0;

   occur_added_message VARCHAR2(500);

BEGIN

p_return_code := 0;

-- Update ANY_TIME_PARTICIPATION.

UPDATE CS01_PROJECT_HEADER

   SET ANY_TIME_PARTICIPATION = p_any_time_participation

   WHERE PROJECT_ID = p_project_id;

   -- Add project occurrence for every record in p_tab_project_dates.

FOR i IN 1 .. p_tab_project_dates.COUNT LOOP

     CS02_PCK.p_add_project_occurrence(p_project_id, p_tab_project_dates(i).start_date, p_tab_project_dates(i).end_date, occur_added_message, occur_added_retcode);

     IF occur_added_retcode = 20 THEN

       p_return_code := 20;

          EXIT;

     END IF;

   END LOOP;

   IF p_return_code = 0 THEN

     COMMIT;

   ELSE

     ROLLBACK;

     p_error_msg := 'An unexpected error occurred';

   END IF;

例外

WHEN OTHERS THEN

     ROLLBACK;

     p_error_msg := 'An unexpected error occurred';

     p_return_code := 20;

END p_add_project_dates;

4

1 に答える 1

1

アドバイスをありがとう。カスタム UDT クラスの作成を最初に検討したとき、クラス内で何をする必要があるか完全にはわからなかったので、少し頭が痛くなるように見えました。

Visual Studioでは、スキーマ内(サーバーエクスプローラー内)で右クリックして「カスタムクラスの作成」を選択することにより、Oracle UDT(Conradが指摘したように)からカスタムクラスを作成できることがわかりました。これにより、基本的にすべてを行うウィザードが開きます。

カスタム クラスを作成したら、そのインスタンスを作成して、このインスタンスの開始日と終了日を入力し、ストアド プロシージャにパラメータとして渡します。

私が呼び出していた手順が実際には正しく機能していなかったことが判明したため、Oracle の開発者が問題を解決するよう依頼されました。

少なくとも、UDT クラスの作成方法はわかりました。

再度、感謝します。

于 2013-11-13T13:43:27.507 に答える