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;