Oracle存储过程和自定义数据类型

我有一个Oracle存储过程,它有两个参数:一个自定义数据类型和一个字符串。

在Oracle中调用存储过程时,我会执行以下操作:

EXECUTE MY_STORED_PROCEDURE(MYTYPE_T(99, 231), 'mystring')

我如何使用C#执行此操作? 我知道我需要将命令设置为存储过程,但是如何将第一个参数指定为自定义数据类型?

更新:

MYTYPE_T是通过创建的TABLE OF NUMBER

CREATE OR REPLACE TYPE mytype_t AS TABLE OF NUMBER ; 

您不能使用已弃用的System.Data.OracleClient轻松完成此操作,但可以使用Oracle的ODP和UDT。 如果这不是一个选项,我不确定如何通过C#和System.Data中的参数来完成它。

ODP的确有很多例子,上面的链接都有例子。

我将添加更多有希望帮助的链接:

  • 视觉工作室ODP指数
  • 这将向您显示如何利用ODT创建自定义类包装并调用它们(请注意,这是中途,他们通过使用该工具在示例中创建自定义类型的步骤 - 本演练非常详尽并且应该直接把你带到你需要的地方)
  • 下载:现在这个人还安装了示例文件,这是你需要做的另一个很好的例子:一旦安装了goto [你安装的目录路径] .. product 11.2.0 client_1 odp.net samples 4 UDT object1.cs
  • 允许Visual Studio的ODT工具为您为您的UDT创建类(例如IOracleCustomType等)真的值得。 你可以进入他们并修改它们以适应你的需求。 那么一旦所有事情都说完了(从object1.cs中摘录):

        Person p1   = new Person();
    p1.Name     = "John";
    p1.Address  = "Address1";
    p1.Age = 20;
    
    // Establish a connection to Oracle
    OracleConnection con = new OracleConnection(constr);
    con.Open();
    
    // Update Person object and insert it into a database table
    OracleCommand cmd = new OracleCommand(sql1, con);
    cmd.CommandType = CommandType.StoredProcedure;
    OracleParameter param1 = new OracleParameter();
    
    param1.OracleDbType   = OracleDbType.Object;
    param1.Direction      = ParameterDirection.InputOutput;
    
    // Note: The UdtTypeName is case-senstive
    param1.UdtTypeName     = "SCOTT.ODP_OBJ1_SAMPLE_PERSON_TYPE";   
    param1.Value           = p1;
    
    cmd.Parameters.Add(param1);
    

    还要注意Person类必须实现IOracleCustomType (可以通过在#2中链接创建)

    /* Person Class
       An instance of a Person class represents an ODP_OBJ1_SAMPLE_PERSON_TYPE object
       A custom type must implement INullable and IOracleCustomType interfaces
    */
    public class Person : INullable, IOracleCustomType
    

    以上是针对完整自定义类型的,但您是在关联数组ODP绑定之后:

    http://weblogs.asp.net/ricardoperes/archive/2009/05/14/odp-net-associative-arrays.aspx

    你会想要使用

    param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
    

    一切都应该落实到位


    只有在此数据类型是DB定义的情况下,才可以将自定义数据类型从C#传递到Oracle过程。 看看这篇文章,这应该有助于你开始。

    链接地址: http://www.djcxy.com/p/3435.html

    上一篇: Oracle Stored Procedure and custom data type

    下一篇: Tutorial for building a REST service in VB.NET?