我在C#数据层中调用oracle包,参数名都对上了,但是却提示“ ORA-01036: 非法的变量名/编号 ”以下是我的包和 数据层调用的代码,包在PL/SQL中已经测试过可以正常运行了,在C#数据层中调用就是有问题create or replace package Tongyong_Page_Package is
TYPE T_CURSOR IS REF CURSOR;
Procedure QuickPage
(
p_tableName in varchar2, --表名
p_column in varchar2, --查询的列字段
p_strWhere in varchar2, --查询条件
p_orderColumn in varchar2, --排序的列
p_orderStyle in varchar2, --排序方式
p_curPage in out Number, --当前页
p_pageSize in out Number, --每页显示记录条数
p_totalRecords out Number, --总记录数
p_totalPages out Number, --总页数
v_cur out T_CURSOR --返回的结果集
);
end Tongyong_Page_Package;
create or replace package body Tongyong_Page_Package is
Procedure QuickPage
(
p_tableName in varchar2, --表名
p_column in varchar2, --查询的列字段
p_strWhere in varchar2, --查询条件
p_orderColumn in varchar2, --排序的列
p_orderStyle in varchar2, --排序方式
p_curPage in out Number, --当前页
p_pageSize in out Number, --每页显示记录条数
p_totalRecords out Number, --总记录数
p_totalPages out Number, --总页数
v_cur out T_CURSOR --返回的结果集
)
IS
v_sql VARCHAR2(1000) := ''; --sql语句
v_startRecord Number(4); --开始显示的记录条数
v_endRecord Number(4); --结束显示的记录条数
BEGIN
--记录中总记录条数
v_sql := 'SELECT TO_NUMBER(COUNT(*)) 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 := 0;
END IF;
--根据页大小计算总页数
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_curPage < 1 THEN
p_curPage := 1;
END IF;
IF p_curPage > p_totalPages THEN
p_curPage := p_totalPages;
END IF;
--实现分页查询
v_startRecord := (p_curPage - 1) * p_pageSize + 1;
v_endRecord := p_curPage * p_pageSize;
v_sql := 'SELECT '||p_column||' FROM (SELECT A.'||p_column||', rownum r FROM ' ||
'(SELECT '||p_column||' 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_orderColumn IS NOT NULL or p_orderColumn <> '' THEN
v_sql := v_sql || ' ORDER BY ' || p_orderColumn || ' ' || p_orderStyle;
END IF;
v_sql := v_sql || ') A WHERE rownum <= ' || v_endRecord || ') B WHERE r >= '
|| v_startRecord;
DBMS_OUTPUT.put_line(v_sql);
OPEN v_cur FOR v_sql;
end QuickPage;
END Tongyong_Page_Package;
string p_orderStyle="DESC";
if (bitOrderType)
p_orderStyle = "DESC";
else
p_orderStyle = "ASC"; OracleParameter[] parameters = {
new OracleParameter("p_tableName", OracleType.VarChar,100),
new OracleParameter("p_column ", OracleType.VarChar,200),
new OracleParameter("p_strWhere ", OracleType.VarChar,200),
new OracleParameter("p_orderColumn ", OracleType.VarChar,200),
new OracleParameter("p_orderStyle", OracleType.VarChar,200),
new OracleParameter("p_curPage", OracleType.Number,4),
new OracleParameter("p_pageSize", OracleType.Number,4),
new OracleParameter("p_totalRecords", OracleType.Number,4),
new OracleParameter("p_totalPages", OracleType.Number,4),
new OracleParameter("v_cur", OracleType.Cursor)};
parameters[0].Value = "ADMIN_MANAGER";
parameters[1].Value = columns;
parameters[2].Value = strWhere;
parameters[3].Value = ascColumn;
parameters[4].Value = p_orderStyle;
parameters[5].Value = pageIndex;
parameters[6].Value = pageSize;
parameters[5].Direction = ParameterDirection.InputOutput;
parameters[6].Direction = ParameterDirection.InputOutput;
parameters[7].Direction = ParameterDirection.Output;
parameters[8].Direction = ParameterDirection.Output;
parameters[9].Direction = ParameterDirection.Output;
DataSet ds;
ds = DbHelperOra.RunProcedure("Tongyong_Page_Package.QuickPage", parameters, "ds");
rowCount = int.Parse(parameters[7].Value.ToString());
return ds;
TYPE T_CURSOR IS REF CURSOR;
Procedure QuickPage
(
p_tableName in varchar2, --表名
p_column in varchar2, --查询的列字段
p_strWhere in varchar2, --查询条件
p_orderColumn in varchar2, --排序的列
p_orderStyle in varchar2, --排序方式
p_curPage in out Number, --当前页
p_pageSize in out Number, --每页显示记录条数
p_totalRecords out Number, --总记录数
p_totalPages out Number, --总页数
v_cur out T_CURSOR --返回的结果集
);
end Tongyong_Page_Package;
create or replace package body Tongyong_Page_Package is
Procedure QuickPage
(
p_tableName in varchar2, --表名
p_column in varchar2, --查询的列字段
p_strWhere in varchar2, --查询条件
p_orderColumn in varchar2, --排序的列
p_orderStyle in varchar2, --排序方式
p_curPage in out Number, --当前页
p_pageSize in out Number, --每页显示记录条数
p_totalRecords out Number, --总记录数
p_totalPages out Number, --总页数
v_cur out T_CURSOR --返回的结果集
)
IS
v_sql VARCHAR2(1000) := ''; --sql语句
v_startRecord Number(4); --开始显示的记录条数
v_endRecord Number(4); --结束显示的记录条数
BEGIN
--记录中总记录条数
v_sql := 'SELECT TO_NUMBER(COUNT(*)) 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 := 0;
END IF;
--根据页大小计算总页数
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_curPage < 1 THEN
p_curPage := 1;
END IF;
IF p_curPage > p_totalPages THEN
p_curPage := p_totalPages;
END IF;
--实现分页查询
v_startRecord := (p_curPage - 1) * p_pageSize + 1;
v_endRecord := p_curPage * p_pageSize;
v_sql := 'SELECT '||p_column||' FROM (SELECT A.'||p_column||', rownum r FROM ' ||
'(SELECT '||p_column||' 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_orderColumn IS NOT NULL or p_orderColumn <> '' THEN
v_sql := v_sql || ' ORDER BY ' || p_orderColumn || ' ' || p_orderStyle;
END IF;
v_sql := v_sql || ') A WHERE rownum <= ' || v_endRecord || ') B WHERE r >= '
|| v_startRecord;
DBMS_OUTPUT.put_line(v_sql);
OPEN v_cur FOR v_sql;
end QuickPage;
END Tongyong_Page_Package;
string p_orderStyle="DESC";
if (bitOrderType)
p_orderStyle = "DESC";
else
p_orderStyle = "ASC"; OracleParameter[] parameters = {
new OracleParameter("p_tableName", OracleType.VarChar,100),
new OracleParameter("p_column ", OracleType.VarChar,200),
new OracleParameter("p_strWhere ", OracleType.VarChar,200),
new OracleParameter("p_orderColumn ", OracleType.VarChar,200),
new OracleParameter("p_orderStyle", OracleType.VarChar,200),
new OracleParameter("p_curPage", OracleType.Number,4),
new OracleParameter("p_pageSize", OracleType.Number,4),
new OracleParameter("p_totalRecords", OracleType.Number,4),
new OracleParameter("p_totalPages", OracleType.Number,4),
new OracleParameter("v_cur", OracleType.Cursor)};
parameters[0].Value = "ADMIN_MANAGER";
parameters[1].Value = columns;
parameters[2].Value = strWhere;
parameters[3].Value = ascColumn;
parameters[4].Value = p_orderStyle;
parameters[5].Value = pageIndex;
parameters[6].Value = pageSize;
parameters[5].Direction = ParameterDirection.InputOutput;
parameters[6].Direction = ParameterDirection.InputOutput;
parameters[7].Direction = ParameterDirection.Output;
parameters[8].Direction = ParameterDirection.Output;
parameters[9].Direction = ParameterDirection.Output;
DataSet ds;
ds = DbHelperOra.RunProcedure("Tongyong_Page_Package.QuickPage", parameters, "ds");
rowCount = int.Parse(parameters[7].Value.ToString());
return ds;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货