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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/12712355/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-19 01:08:45  来源:igfitidea点击:

How to pass a table-valued parameter from C# to Oracle stored procedure

c#oracleparameter-passingodp.net

提问by Evgeniy O

I have an Oracle stored procedure named CREATE_CASE_EXL:

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

PROCEDURE  CREATE_CASE_EXL(P_RICdata RICTab,
                       P_sACTION_TYPE IN VARCHAR2);

where RICTabis a custom type:

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)
 );

I run this code in PL/SQL to execute CREATE_CASE_EXL:

我在 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;

I need to execute something similar in .NET. Can you please advise how could I pass a parameter as a table of data to an Oracle stored procedure? Should I use a UDT for this task?

我需要在 .NET 中执行类似的操作。您能否建议我如何将参数作为数据表传递给 Oracle 存储过程?我应该为此任务使用 UDT 吗?

采纳答案by Evgeniy O

actually I found that it's supported, but you have to use Oracle UDT for that purpose.

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

Here's link to the resources which I used to solve the issue: http://appsHyman.blogspot.co.uk/2010/09/pass-custom-udt-types-to-oracle-stored.html

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

Big thanks to everybody for the advices!

非常感谢大家的建议!

回答by jakub.petr

I don't think this is currently supported. I think you will have to use some workaround.

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

1) XML

1) XML

2) smart associative array

2)智能关联数组

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

We were choosing between them a year ago and we chose XML. (and also trying to get your case working but without success)

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