zoukankan      html  css  js  c++  java
  • .NET调用ORACLE存储过程使用数组参数

    ----------包定义

    create or replace package packtest
    as
    type string_array is table of varchar2(21) index by binary_integer;
    type int_array is table of number(4) index by binary_integer;
    procedure test(v_string in string_array,
    v_int out int_array);
    end packtest;
    --------包体

    Create or replace package body packtest
    as
    procedure test(v_string in string_array,
    v_int out int_array)
    as
    cursor c is select na2 from test;
    v_content varchar2(21);
    begin
    open c;
    for i in 1.. 3
    loop
    fetch c into v_int(i);
    v_content:=v_string(i);
    end loop;
    close c;
    end test;

    end packtest;

    ---------程序调用

    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using Oracle.DataAccess;
    using Oracle.DataAccess.Client;
    using Oracle.DataAccess.Types;

    public partial class oracle_array : System.Web.UI.Page
    {
    protected void Page_Load(object sender, EventArgs e)
    {
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
    string connectionstring = string.Concat
    (
    "Password=gkl",
    ";User ID=gkl",
    ";Data Source=ORCL"
    );
    OracleConnection con = new OracleConnection(connectionstring);
    try
    {

    con.Open();
    OracleCommand cmd = con.CreateCommand();
    //
    //
    //
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "packtest.test";
    //
    //定义Parameter,其中,Size是数组中的元素数量
    //
    OracleParameter Param1 = new
    OracleParameter(@"p1", OracleDbType.Varchar2, 3);
    OracleParameter Param2 = new
    OracleParameter(@"p2", OracleDbType.Int32, 3);
    //
    Param1.Direction = ParameterDirection.Input;
    Param2.Direction = ParameterDirection.Output;


    // Specify that we are binding PL/SQL Associative Array
    Param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;


    Param2.CollectionType = OracleCollectionType.PLSQLAssociativeArray;


    // Setup the values for PL/SQL Associative Array
    Param1.Value = new string[3]{"First Element",
    "Second Element ",
    "Third Element "};
    Param2.Value = null;
    // Specify the maximum number of elements in the PL/SQL Associative


    //Array
    //


    // Setup the ArrayBindSize for Param1
    Param1.ArrayBindSize = new int[3] { 13, 14, 13 };
    // Setup the ArrayBindStatus for Param1
    Param1.ArrayBindStatus = new OracleParameterStatus[3]{
    OracleParameterStatus.Success,
    OracleParameterStatus.Success,
    OracleParameterStatus.Success};
    // Setup the ArrayBindSize for Param2
    //对于Int类型的Parameter,可以不设置Size,因为本身Int定义了自身大小
    //
    // Param2.ArrayBindSize = new int[3]{1, 2, 1};
    cmd.Parameters.Add(Param1);
    cmd.Parameters.Add(Param2);


    // execute the cmd
    cmd.ExecuteNonQuery();
    //print out the parameter's values
    int[] matrixint = (int[])Param2.Value;
    foreach (int t in matrixint)
    {
    Response.Write(t.ToString());
    }


    // con.Close();


    }
    catch (Exception ex)
    {
    Response.Write(string.Concat(
    ex.Message,
    ""r"n",
    ex.Source.ToString(),
    ""r"n",
    ex.TargetSite.ToString(),
    ""r"n",
    ex.StackTrace.ToString()


    ));
    }
    finally
    {
    con.Close();
    }

    }
    }

    魔兽就是毒瘤,大家千万不要玩。
  • 相关阅读:
    DevExpress 学习链接
    DevExpress TreeList用法总结
    DevExpress 用户控件 分页(中)
    DevExpress通过girdcontrol实现分页
    DevExpress 操作gridcontrol
    通过c#操作word文档的其他方式
    DocX操作word生成报表
    数学文化 剩余定理
    数学文化 卢卡斯数列和黄金分割
    mac 终端高亮显示~
  • 原文地址:https://www.cnblogs.com/tracy/p/2210412.html
Copyright © 2011-2022 走看看