如何从C#传递表值参数给Oracle存储过程

6

我有一个名为CREATE_CASE_EXL的Oracle存储过程:

PROCEDURE  CREATE_CASE_EXL(P_RICdata RICTab,
                       P_sACTION_TYPE IN VARCHAR2);

其中RICTab是一个自定义类型:

TYPE RICTab IS TABLE OF MMSRRicRec  INDEX BY BINARY_INTEGER;

TYPE MMSRRicRec IS RECORD
 ( RIC        VARCHAR2(32),
   FID_NO     NUMBER(8),
   REC_ID     NUMBER(8),
   MMS_ACTION VARCHAR2(1)
 );

我在PL/SQL中运行以下代码来执行CREATE_CASE_EXL

DECLARE
pTE_RICS     RICTab 

BEGIN
    pTE_RICS(1).RIC  := 'RIC1';
    pTE_RICS(1).FID_NO := NULL;
    pTE_RICS(1).REC_ID := 3;
    pTE_RICS(1).MMS_ACTION := 'A';

    pTE_RICS(1).RIC  := 'RIC2';
    pTE_RICS(1).FID_NO := NULL;
    pTE_RICS(1).REC_ID := 4;
    pTE_RICS(1).MMS_ACTION := 'A';

    CREATE_CASE_EXL( pTE_RICS , 'A');

END;

我需要在.NET中执行类似的操作。请问如何将一个数据表作为参数传递给Oracle存储过程?我应该使用用户定义类型(UDT)吗?


请看这里。http://my-tech-talk.blogspot.co.uk/2010/01/how-to-pass-arrays-from-net-c-to-oracle.html - tranceporter
tranceporter,谢谢你提供的链接,但是在这个例子中他们使用的是单维数组,而我需要的是有两列 - RIC、FID_NO、REC_ID、MMS_ACTION 的二维数组。谢谢! - Evgeniy O
2个回答

4

0

我认为目前不支持此功能。我认为您将不得不使用一些解决方法。

1)XML

2)智能关联数组

pTE_RICS(1).RIC  := 'RIC1'; -> pTE_RICS("item[0].RIC")  := 'RIC1';

一年前我们在选择它们之间,最终选择了XML。(同时也尝试让你的案例运行起来,但没有成功)

嗨,实际上我发现它是支持的,但你必须使用Oracle UDT。这里有几个链接描述如何做到这一点: - Evgeniy O

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接