【问题标题】:How to pass a table-valued parameter from C# to Oracle stored procedure如何将表值参数从 C# 传递到 Oracle 存储过程
【发布时间】:2012-09-24 14:36:58
【问题描述】:

我有一个名为 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 吗?

【问题讨论】:

  • tranceporter,感谢您的链接,但在示例中他们使用单维数组,在我的情况下,我需要具有 2 列的二维数组 - RIC、FID_NO、REC_ID、MMS_ACTION。干杯!

标签: c# oracle parameter-passing odp.net


【解决方案1】:

实际上我发现它是受支持的,但您必须为此目的使用 Oracle UDT。

这里是我用来解决问题的资源的链接: http://appsjack.blogspot.co.uk/2010/09/pass-custom-udt-types-to-oracle-stored.html

非常感谢大家的建议!

【讨论】:

    【解决方案2】:

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

    1) XML

    2) 智能关联数组

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

    一年前我们在它们之间进行了选择,我们选择了 XML。 (也试图让你的案子工作但没有成功)

    【讨论】:

    • 您好,实际上我发现它是受支持的,但您必须使用 Oracle UDT。这里有几个链接描述了如何做到这一点:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 2016-06-14
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多