zoukankan      html  css  js  c++  java
  • Oracle存储过程返回结果集

     Oracle存储过程返回结果集,需要把游标作为存储过程参数

     1.创建pakage 

    CREATE OR REPLACE PACKAGE pkg_query AS TYPE cur_query IS REF CURSOR;
    END pkg_query;
    

     2.创建存储过程()

    create or replace procedure Sp_Students
           (
            p_name       in  varchar2,     --姓名(传入参数,根据姓名筛选数据)
            p_totalRecords     out Number,     --总记录数(返回结果集的总条数)
            v_cur out pkg_query.cur_query   --返回的结果集
            )   
    
    is
       v_sql VARCHAR2(2000) := '';      --sql语句
    
    BEGIN
      
      v_sql:='SELECT TO_NUMBER(COUNT(1)) FROM tb_students t where t.name= '''|| p_name ||''' ' ;
     
      EXECUTE IMMEDIATE v_sql INTO p_totalRecords;
    
       v_sql := 'select * from tb_students t where t.name='''|| p_name ||''' ' ;
    
      -- DBMS_OUTPUT.put_line(v_sql);
       OPEN v_cur FOR v_sql;
    
    END  Sp_Students;

    3.c#调用存储过程

            /// <summary>
            /// 返回结果集
            /// </summary>
            /// <param name="name">存储过程传入参数,用于筛选数据</param>
            /// <param name="count">存储过程返回参数,返回筛选出来的数据总条数</param>
            /// <returns></returns>
            public DataSet RunProcedure(string name,out int count)
            {
                count = 0;
    string connectionString = "Data Source=orcl;User ID=用户名;Password=口令;Unicode=True";
    using (OracleConnection connection = new OracleConnection(connectionString)) { DataSet dataSet = new DataSet(); connection.Open(); OracleDataAdapter sqlDA = new OracleDataAdapter("Sp_Students", connection); OracleParameter[] paras ={ new OracleParameter("p_name",name), new OracleParameter("p_totalRecords",count), new OracleParameter("v_cur", OracleType.Cursor) //返回的游标 }; paras[1].Direction = ParameterDirection.Output; paras[2].Direction = ParameterDirection.Output; sqlDA.SelectCommand.Parameters.AddRange(paras); sqlDA.SelectCommand.CommandType = CommandType.StoredProcedure;//设置 使用存储过程 sqlDA.Fill(dataSet); connection.Close(); count = Convert.ToInt32(paras[1].Value); return dataSet; } }

    4.测试存储过程

       4.1 创建表:

    -- Create table
    create table TB_STUDENTS
    (
      ID   NVARCHAR2(32) default sys_guid() not null,
      NAME NVARCHAR2(32),
      AGE  NUMBER
    );
    commit;
    --插入测试数据
    insert into TB_STUDENTS (ID, NAME, AGE)
    values ('DE3A7D4D5D054992B40761BFA2391F5', '张三', 20);
    insert into TB_STUDENTS (ID, NAME, AGE)
    values ('137ACF3D6C0A4BE0B71423A1F7D8452', '李四', 22);
    insert into TB_STUDENTS (ID, NAME, AGE)
    values ('2AF70A53BCD348EE9E8FF03916D018F', '王五', 18);
    insert into TB_STUDENTS (ID, NAME, AGE)
    values ('2877652AE0A3408A981D8980AE833CF', '100', 55);
    insert into TB_STUDENTS (ID, NAME, AGE)
    values ('7B356A73B80C4ED0BFAFA1DD96256E0', '100', 12);
    insert into TB_STUDENTS (ID, NAME, AGE)
    values ('1FF0A99B47FF4056BBDA7E3B4262C61', '100', 26);
    commit;

        4.2 c#调用:

                DataTable dt = null;
                int count ;
                DataSet ds = RunProcedure("100",out count);
                if (ds != null && ds.Tables.Count > 0)
                {
                    dt = ds.Tables[0];
                }
  • 相关阅读:
    JavaScript
    94.Binary Tree Inorder Traversal
    144.Binary Tree Preorder Traversal
    106.Construct Binary Tree from Inorder and Postorder Traversal
    105.Construct Binary Tree from Preorder and Inorder Traversal
    90.Subsets II
    78.Subsets
    83.Merge Sorted Array
    80.Remove Duplicates from Sorted Array II
    79.Word Search
  • 原文地址:https://www.cnblogs.com/bweb/p/4747037.html
Copyright © 2011-2022 走看看