• C#调用Oracle存储过程返回多结果集


    OracleConnection connection = new OracleConnection(connectionString);
                    --连接
                    connection.Open();
                    OracleCommand command = new OracleCommand();
                    command.Connection = connection;
                    command.CommandText = "PACK_SIIT.getFlowTrack";--存储过程名
                    command.CommandType = CommandType.StoredProcedure;--设置执行为存储过程
                    command.Parameters.Add("var_barcode", OracleType.VarChar, 50);
                    command.Parameters.Add("cur_FirstTrial", OracleType.Cursor).Direction = ParameterDirection.Output;
                    command.Parameters.Add("cur_Scan", OracleType.Cursor).Direction = ParameterDirection.Output;
                    command.Parameters.Add("cur_Send", OracleType.Cursor).Direction = ParameterDirection.Output;
                    command.Parameters.Add("cur_Receive", OracleType.Cursor).Direction = ParameterDirection.Output;
                    command.Parameters.Add("cur_Review", OracleType.Cursor).Direction = ParameterDirection.Output;
                    command.Parameters.Add("cur_Confirm", OracleType.Cursor).Direction = ParameterDirection.Output;
                    command.Parameters.Add("cur_Locked", OracleType.Cursor).Direction = ParameterDirection.Output;
                    command.Parameters["var_barcode"].Value = stBarcode;// "DH448400001308120004CB1";
                    OracleDataAdapter daReader = new OracleDataAdapter(command);
                    DataSet ds = new DataSet();
                    daReader.Fill(ds);
    
    ds.tables.count
    ds.tables[i]
    
    CREATE OR REPLACE PACKAGE pkg_page
    AS
       TYPE cur_page IS REF CURSOR;
       TYPE cur_ret  IS REF CURSOR;
       PROCEDURE proc_page (p_tableName      IN     varchar2,               --表名
                            p_strColumns     IN     varchar2,         --查询的字段
                            p_strWhere       IN     varchar2,           --查询条件
                            p_strOrder       IN     varchar2,               --排序
                            p_pageIndex      IN OUT Number,               --索引页
                            p_pageSize       IN OUT Number,     --每页显示记录条数
                            p_totalRecords      OUT Number,             --总记录数
                            p_totalPages        OUT Number,               --总页数
                            cur_ret             OUT pkg_page.cur_page,
                            cur_ret2           OUT pkg_page.cur_ret); --返回的结果集
    END pkg_page;
    
    CREATE OR REPLACE PACKAGE BODY pkg_page
    AS
       PROCEDURE proc_page (p_tableName      IN     varchar2,               --表名
                            p_strColumns     IN     varchar2,         --查询的字段
                            p_strWhere       IN     varchar2,           --查询条件
                            p_strOrder       IN     varchar2,               --排序
                            p_pageIndex      IN OUT Number,               --索引页
                            p_pageSize       IN OUT Number,     --每页显示记录条数
                            p_totalRecords      OUT Number,             --总记录数
                            p_totalPages        OUT Number,               --总页数
                            cur_ret             OUT pkg_page.cur_page,
                             cur_ret2           OUT pkg_page.cur_ret) --返回的结果集
       IS
          v_sql           VARCHAR2 (4000) := '';                         --sql语句
          v_startRecord   Number (10);                        --开始显示的记录条数
          v_endRecord     Number (10);                        --结束显示的记录条数
       BEGIN
          --记录中总记录条数
          v_sql := 'SELECT COUNT(rownum) FROM ' || p_tableName || ' WHERE 1=1';
    
          IF p_strWhere IS NOT NULL OR p_strWhere <> ''
          THEN
             v_sql := v_sql || p_strWhere;
          END IF;
    
          EXECUTE IMMEDIATE v_sql INTO   p_totalRecords;
    
          --验证页面记录大小
          IF p_pageSize < 0
          THEN
             p_pageSize := 20;
          END IF;
    
          --根据页大小计算总页数[Page]
          IF MOD (p_totalRecords, p_pageSize) = 0
          THEN
             p_totalPages := p_totalRecords / p_pageSize;
          ELSE
             p_totalPages := p_totalRecords / p_pageSize + 1;
          END IF;
    
          --验证页号
          IF p_pageIndex < 1
          THEN
             p_pageIndex := 1;
          END IF;
    
          IF p_pageIndex > p_totalPages
          THEN
             p_pageIndex := p_totalPages;
          END IF;
    
          --实现分页查询
          v_startRecord := (p_pageIndex - 1) * p_pageSize + 1;
          v_endRecord := p_pageIndex * p_pageSize;
          v_sql :=
                'SELECT '
             || p_strColumns
             || ' FROM (SELECT A.*, rownum r FROM '
             || '(SELECT * FROM '
             || p_tableName;
    
          IF p_strWhere IS NOT NULL OR p_strWhere <> ''
          THEN
             v_sql := v_sql || ' WHERE 1=1' || p_strWhere;
          END IF;
    
          IF p_strOrder IS NOT NULL OR p_strOrder <> ''
          THEN
             v_sql := v_sql || p_strOrder || ' ';
          END IF;
    
          v_sql :=
                v_sql
             || ') A WHERE rownum <= '
             || v_endRecord
             || ') B WHERE r >= '
             || v_startRecord;
    
          --DBMS_OUTPUT.put_line (v_sql);
    
          OPEN cur_ret FOR v_sql;
          OPEN cur_ret2 FOR v_sql2;
       END proc_page;
    END;
    
  • 相关阅读:
    结对-五子棋游戏-开发过程
    团队-象棋游戏-设计文档
    课后作业-阅读任务-阅读提问-4
    团队-及格成绩查询系统-项目总结
    11.29-构建之法:现代软件工程-阅读笔记
    软件工程课程总结
    团队-及格成绩查询系统-最终程序
    团队-象棋游戏-团队一阶段互评
    课后作业-阅读任务-阅读提问-3
    课后作业-阅读任务-阅读笔记-3
  • 原文地址:https://www.cnblogs.com/asingna/p/1984948.html
Copyright © 2020-2023  润新知