sql >> データベース >  >> RDS >> Oracle

Oracleストアドプロシージャとカスタムデータ型

    非推奨のSystem.Data.OracleClient ただし、oracleのODP を利用できます。 UDTを使用して。それがオプションでない場合は、System.Dataを使用してC#のパラメーターを介してそれを行う方法がわかりません。

    ODPには多くの例があり、上記のリンクに例があります。

    うまくいけば役立つリンクをいくつか追加します:

    1. ビジュアルスタジオODPインデックス
    2. これは、ODTを利用してカスタムクラスラッパーを作成し、それらを呼び出す方法を正確に示しています (これは途中であることに注意してください。例では、ツールを使用してその上にカスタムタイプを作成します。このウォークスルーは非常に徹底的であり、必要な場所に直接アクセスできるはずです)
    3. ダウンロード :今、この男はサンプルファイルもインストールします。これはあなたがしなければならないことのもう一つの素晴らしい例です:インストールしたら[ディレクトリパスyouinstall] .. \ 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;
    

    そして、すべてが所定の位置に収まるはずです



    1. IS NULL vs =NULL(where句+ SQL Server)

    2. パラメータ宣言でvarchar(MAX)にどのサイズを使用しますか?

    3. MySQLとMariaDBとPerconaサーバー:セキュリティ機能の比較

    4. データベースクエリとは何ですか?