1

我被赋予了将开始日期和结束日期从 aspx/c# 页面传递到 orcale 过程的任务。我在页面上有 2 个 DateTime 对象列表,一个开始日期列表和一个结束日期列表。

我的问题是我应该怎么做?我相信我将不得不创建一个用户定义的类型来传递给程序,可能是一个二维数组,但我真的不知道如何:

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;

结束 p_add_project_dates;

4

1 回答 1

1

感谢您的建议。当我第一次考虑创建一个自定义 UDT 类时,它看起来有点让人头疼,因为我不完全确定我必须在类中做什么。

事实证明,Visual Studio 允许您通过在架构中(在服务器资源管理器中)右键单击它并选择“创建自定义类”来从 Oracle UDT(正如 Conrad 指出的那样)创建自定义类。然后这会打开一个向导,它基本上会为您完成所有工作。

一旦我有了自定义类,我就可以创建它的实例并填充该实例的开始和结束日期,然后将其作为参数传递给存储的过程。

事实证明,我调用的程序实际上并不能正常工作,因此 Oracle 开发人员已经着手修复它。

至少我现在知道如何创建 UDT 类。

再次感谢。

于 2013-11-13T13:43:27.507 回答