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;