按网上说的做的一例子:
C#部分:
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 System.Data.OracleClient;public partial class CallProcedure : System.Web.UI.Page
{
    public string bmsOracleUser = "test_user";
    public string bmsOracleConnectionString = "Data Source=test;user id=test_user;password=test_user";    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            DataSet ds = new DataSet();
            ds = Bill_Point_No(44);
            if (ds.Tables.Count > 0)
            {
                GridView1.DataSource = ds;
                GridView1.DataBind();
            }
            else
            {
                Response.Write("Unable to connect to the database");
            }
        }
    }    public DataSet Bill_Point_No(int CUSTOMER_ID)
    {
        DataSet dataset = new DataSet();
        Hashtable HT = new Hashtable();
        HT.Add("P_CUSTOMER_ID", CUSTOMER_ID);
        if (RunProcedure("Re_CURSOR", OracleType.Cursor, ref dataset, HT, bmsOracleUser + ".YY_PKG_BILL_POINT_NO.BILL_POINT_NO", bmsOracleConnectionString))
        {
            ;
        }
        else
        {
            dataset = null;
        }
        return dataset;
    }    public bool RunProcedure(string ReturnParameter, OracleType ParamType, ref DataSet Dataset, Hashtable HT, string ProcedureName, string OracleConnection)
    {
        OracleConnection dsConnection = new OracleConnection(OracleConnection);
        OracleCommand daCommand = new OracleCommand(ProcedureName, dsConnection);
        daCommand.CommandType = CommandType.StoredProcedure;
        IDictionaryEnumerator Enumerator;
        Enumerator = HT.GetEnumerator();
        object Value = null;
        OracleParameter OracleParam;
        OracleParam = daCommand.Parameters.Add(new OracleParameter(ReturnParameter, ParamType));
        OracleParam.Direction = ParameterDirection.Output;
        while(Enumerator.MoveNext())
        {
            Value = Enumerator.Value;
            OracleParam = daCommand.Parameters.Add(new OracleParameter(Enumerator.Key.ToString(),Value));
        }
        OracleDataAdapter ODAdapter = new OracleDataAdapter(daCommand);
        try
        {
            ODAdapter.Fill(Dataset);
            return true;
        }
        catch(Exception e)
        {
            e.ToString();
            return false;
        }
        finally
        {
            HT.Clear();
            daCommand.Parameters.Clear();
            dsConnection.Close();
        }
    }
}oracle部分:
1.表结构
CREATE TABLE BILL_POINTS
(
  POINTS_ID      NUMBER(10)                     NOT NULL,
  CUSTOMER_ID    NUMBER(10)                     NOT NULL,
  BILL_POINT_NO  NUMBER(2)                      DEFAULT 1                     NOT NULL
)CREATE UNIQUE INDEX PK_BILL_POINTS ON BILL_POINTS
(POINTS_ID);
ALTER TABLE BILL_POINTS ADD (
  CONSTRAINT PK_BILL_POINTS
 PRIMARY KEY
 (POINTS_ID));2.创建包:
CREATE OR REPLACE PACKAGE yy_pkg_bill_point_no    /*取得用户的所有计费点序号*/
IS
   TYPE t_cursor IS REF CURSOR;   PROCEDURE bill_point_no (
      p_customer_id         bill_points.customer_id%TYPE,
      re_cursor       OUT   t_cursor
   );
END;
/
CREATE OR REPLACE PACKAGE BODY yy_pkg_bill_point_no
/*取得用户的所有计费电序号*/
IS
   PROCEDURE bill_point_no (
      p_customer_id         bill_points.customer_id%TYPE,
      re_cursor       OUT   t_cursor
   )
   IS
      v_cursor   t_cursor;
  SQL_ERROR  VARCHAR2(100);
   BEGIN
      OPEN v_cursor FOR
         SELECT bill_point_no
           FROM bill_points
          WHERE customer_id = p_customer_id;      re_cursor := v_cursor;
   EXCEPTION
      WHEN OTHERS
      NULL;
   END;
END;
/