在SQL sever的存储过程中我们可以直接写
CREATE REPLACE printEmp
AS
select * from emp  /*当然SQL sever中的emp表是用户自己建的 */     然后在system.data.sqlclient下通过ado.net的内置对象(SqlDataAdapter)来调用它,指定其
 SelectCommand.CommandType = CommandType.StoredProcedur最后用它来填充dataset的对象ds,
     通过这样来查的emp中的所有记录,并将ds绑定到数据控件,即可在前台显示这些信息。     在oracle中可以直接用sql语句来打印这些信息            OracleConnection con = new OracleConnection(cl.conString);
            OracleDataAdapter oda = new OracleDataAdapter("select * from emp", con);
            //oda.SelectCommand.CommandType = CommandType.StoredProcedure;
            DataSet ds = new DataSet();
            oda.Fill(ds);            con.Dispose();
            return ds;      现在问题是:
      要通过调用存储过程来打印这些信息,而在oracle的存储过程中select到的信息必须保存(into)在变量中,然后通过out参数返回这些变量,如果是单条记录还好,但问题是有多条记录。
      请问:1.这个存储过程如何写?
            2.在asp.net中如何调用这样的存储过程?
            3.oracle是否支持这样的操作?
            4.在oracle的包中可以完成这样的操作吗?ado.net如何调用包?如果有, 请大家给出方法或者提示。       谢谢大家!

解决方案 »

  1.   

    在oracle的存储过程中select到的信息必须保存(into)在变量中,然后通过out参数返回这些变量有这回事吗?oracle存储过程不能返回记录集的吗?
      

  2.   

    create or replace procedure test_cursor(out_cursor out SYS_REFCURSOR)
    is
    begin
        open  out_cursor for
        select t.* from emp t;
    end;上面的例子就是如何通过存储过程返回结果集的
      

  3.   

    不好意思  请问 ling242a兄  记录集是什么意思啊????
    我是菜鸟,  没有搞懂你的意思
      

  4.   


    这个存储过程在ado.net中怎么调用啊,求助majy?
      

  5.   

    Oracle 中返回 结果集 可以用 游标
      

  6.   

    ASP.NET调用oracle存储过程返回多个游标
    http://blog.csdn.net/dcju002/archive/2009/01/08/3734951.aspx
      

  7.   

    谢谢楼上的兄弟们   正在按照Sandy945的提示来试试...
      

  8.   


    http://www.wangchao.net.cn/bbsdetail_31417.html
      

  9.   

    过程如下:在 Oracle 中创建 存储过程的包头, 和 包主体 。 用于 为游标 执行查询,返回结果集.net 中调用 与sql 一样创建 链接对象, 创建执行对象 ,指定存储过程名, 执行类型为存储过程,添加参数。然后用 执行对象 去构建一个  适配器 对象, 执行 fill 方法 填充到 数据集 DataSet 对象
     
      

  10.   


    谢谢了   create or replace procedure test_cursor(out_cursor out SYS_REFCURSOR) 
    is 
    begin 
        open  out_cursor for 
        select t.* from emp t; 
    end; 
      private void gvBind()
            {
                OracleConnection con = new OracleConnection(SqlDataSource1.ConnectionString);            OracleDataAdapter oda = new OracleDataAdapter("test_cursor", con);
                oda.SelectCommand.CommandType = CommandType.StoredProcedure;
                oda.SelectCommand.Parameters.Add("out_cursor", OracleType.Cursor).Direction = ParameterDirection.Output;            DataTable dt = new DataTable();
                oda.Fill(dt);            ASPxGridView2.DataSource = dt;
                ASPxGridView2.DataBind();            oda.Dispose();
                dt.Dispose();
                con.Dispose();
            }
      

  11.   

    我还有个问题   就是
    create or replace procedure test_cursor(out_cursor out SYS_REFCURSOR)
    参数 out_cursor out SYS_REFCURSOR这里怎么是SYS_REFCURSOR 而不是cursor
    这个SYS_REFCURSOR 是什么意思啊
      

  12.   

    SYS_REFCURSOR 是 9i 里新出的游标类型在 没有 SYS_REFCURSOR 之前,需要定义游标变量的。 就是创建包头有了 SYS_REFCURSOR 之后,就不用创建包头了