ASP.NET调用存储过程出错,但PL/SQL中调试是正确的
分页存储过程如下:
create or replace procedure P_QuerySplit(
sqlscript varchar2, --表名/SQL语句
pageSize integer, --每页记录数
pageIndex integer, --当前页
docount number, --是否计算总页数
totalCount out number, --总记录数
totalPage out number, --总页数
v_cur out sys_refcursor --返回游标
)
is
v_PageSize number;
v_PageIndex number;
v_SQL_Count varchar2(4000);
v_SQL varchar2(4000);
v_StartIndex number;
v_EndIndex number;
begin
v_PageSize:=pageSize;
if v_PageSize=0 then
v_PageSize:=1;
end if;
if(docount=1) then
--统计记录数量
v_SQL_Count := 'select count(*) from ('|| sqlscript ||') a ';
execute immediate v_SQL_Count into totalCount;
--计算总页数
totalPage:=CEIL(totalCount/v_PageSize);
end if;
--验证页号 如果页号大余了最大页数,返回最后一页
v_PageIndex:=pageIndex;
if v_PageIndex>totalPage then
v_PageIndex:=totalPage;
end if;
--计算开始的Index和结束的Index
v_StartIndex:=(v_PageIndex-1)*v_PageSize+1;
v_EndIndex:=v_PageIndex*v_PageSize;
v_SQL:='SELECT * FROM (';
v_SQL:=v_SQL||' SELECT A.*, ROWNUM RN ';
v_SQL:=v_SQL||' FROM ('||sqlscript||') A ';
v_SQL:=v_SQL||' WHERE ROWNUM <= '||v_EndIndex;
v_SQL:=v_SQL||')WHERE RN >= '||v_StartIndex;
open v_cur for v_SQL;
end P_QuerySplit;ASP.NET程序调用:
DataTable dtData = this.QuickPage("select A.MT_COMM_ADDR,B.CUSTOMER_NAME from ipara_mtrpoint A, IPARA_RESIDENT B WHERE A.ACTUAL_CUSTOMER_ID = B.CUSTOMER_ID", 10, int.Parse(this.lbCurrentPage.Text), 1, ref totalCount, ref totalPage);
错误提示:
ORA-00942: 表或视图不存在
ORA-06512: 在"HX8000.P_QUERYSPLIT", line 48
ORA-06512: 在line 1因为在PL/SQL中调试是通过的,但是ASP.NET调用就出现这个问题,请教各位解决??!!!
分页存储过程如下:
create or replace procedure P_QuerySplit(
sqlscript varchar2, --表名/SQL语句
pageSize integer, --每页记录数
pageIndex integer, --当前页
docount number, --是否计算总页数
totalCount out number, --总记录数
totalPage out number, --总页数
v_cur out sys_refcursor --返回游标
)
is
v_PageSize number;
v_PageIndex number;
v_SQL_Count varchar2(4000);
v_SQL varchar2(4000);
v_StartIndex number;
v_EndIndex number;
begin
v_PageSize:=pageSize;
if v_PageSize=0 then
v_PageSize:=1;
end if;
if(docount=1) then
--统计记录数量
v_SQL_Count := 'select count(*) from ('|| sqlscript ||') a ';
execute immediate v_SQL_Count into totalCount;
--计算总页数
totalPage:=CEIL(totalCount/v_PageSize);
end if;
--验证页号 如果页号大余了最大页数,返回最后一页
v_PageIndex:=pageIndex;
if v_PageIndex>totalPage then
v_PageIndex:=totalPage;
end if;
--计算开始的Index和结束的Index
v_StartIndex:=(v_PageIndex-1)*v_PageSize+1;
v_EndIndex:=v_PageIndex*v_PageSize;
v_SQL:='SELECT * FROM (';
v_SQL:=v_SQL||' SELECT A.*, ROWNUM RN ';
v_SQL:=v_SQL||' FROM ('||sqlscript||') A ';
v_SQL:=v_SQL||' WHERE ROWNUM <= '||v_EndIndex;
v_SQL:=v_SQL||')WHERE RN >= '||v_StartIndex;
open v_cur for v_SQL;
end P_QuerySplit;ASP.NET程序调用:
DataTable dtData = this.QuickPage("select A.MT_COMM_ADDR,B.CUSTOMER_NAME from ipara_mtrpoint A, IPARA_RESIDENT B WHERE A.ACTUAL_CUSTOMER_ID = B.CUSTOMER_ID", 10, int.Parse(this.lbCurrentPage.Text), 1, ref totalCount, ref totalPage);
错误提示:
ORA-00942: 表或视图不存在
ORA-06512: 在"HX8000.P_QUERYSPLIT", line 48
ORA-06512: 在line 1因为在PL/SQL中调试是通过的,但是ASP.NET调用就出现这个问题,请教各位解决??!!!
解决方案 »
- Gridview中设置网格线没有反应,急急急!在线等
- atlasglob.axd 错误问题!
- 我这个配置哪里有问题啊? web.config
- 关于access数据库datareader对象的遍历
- 模板标签设计问题
- updatepanel里弹出确认取消对话框问题?
- TableAdapter中Access数据库的like语法
- 如何用证则表达式来判断字符串中不含"<^$.|?*+()>"字符阿
- 请求各位有商业项目经验的大侠们,这样一个功能的网站大概要收多少钱
- 求救:System.Web.UI.WebControls.GridViewUpdatedEventArgs并不包含RowIndex的定义
- 求助:如何解决以下问题?
- 关于Cookie的存储有几种啊
单独调用
DataTable dtData = this.QuickPage("select * from ipara_mtrpoint", 10, int.Parse(this.lbCurrentPage.Text), 0, ref totalCount, ref totalPage);
DataTable dtData = this.QuickPage("select * from IPARA_RESIDENT ", 10, int.Parse(this.lbCurrentPage.Text), 0, ref totalCount, ref totalPage);是没问题的
Try
conn.Open()
Dim cmd As New OracleCommand
cmd.Connection = conn
cmd.CommandText = "hr_package.hr_update_amtsold('" & p_month & "')"
cmd.CommandType = CommandType.StoredProcedure
cmd.ExecuteNonQuery() Catch ex As Exception
MessageBox.Show(ex.Message.ToString())
End Try
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "P_QuerySplit";
cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("sqlscript", OracleType.VarChar, 50); //表名/SQL语句
cmd.Parameters["sqlscript"].Direction = ParameterDirection.Input;
cmd.Parameters["sqlscript"].Value = sqlscript; cmd.Parameters.Add("pageSize", OracleType.Float); //每页记录数
cmd.Parameters["pageSize"].Direction = ParameterDirection.Input;
cmd.Parameters["pageSize"].Value = pageSize; cmd.Parameters.Add("pageIndex", OracleType.Float); //当前页
cmd.Parameters["pageIndex"].Direction = ParameterDirection.Input;
cmd.Parameters["pageIndex"].Value = pageIndex;
cmd.Parameters.Add("docount", OracleType.Float); //是否计算总页数
cmd.Parameters["docount"].Direction = ParameterDirection.Input;
cmd.Parameters["docount"].Value = docount; cmd.Parameters.Add("totalCount", OracleType.Float); //总记录数
cmd.Parameters["totalCount"].Direction = ParameterDirection.Output;
cmd.Parameters["totalCount"].Value = 0; cmd.Parameters.Add("totalPage", OracleType.Float); //总页数
cmd.Parameters["totalPage"].Direction = ParameterDirection.Output;
cmd.Parameters["totalPage"].Value = 0; cmd.Parameters.Add("v_cur", OracleType.Cursor); //返回的游标
cmd.Parameters["v_cur"].Direction = ParameterDirection.Output; DataSet Ds = new DataSet();
OracleDataAdapter adapter = new OracleDataAdapter(cmd);
adapter.Fill(Ds);
conn.Close();
别忘了这句,默认是SQL语句的。
create or replace procedure P_QuerySplit(
sqlscript varchar2, --表名/SQL语句
pageSize integer, --每页记录数
pageIndex integer, --当前页
docount number, --是否计算总页数
totalCount out number, --总记录数
totalPage out number, --总页数
v_cur out sys_refcursor --返回游标
) ASP.NET调用参数:
cmd.Parameters.Add("sqlscript", OracleType.VarChar, 50); //表名/SQL语句
cmd.Parameters["sqlscript"].Direction = ParameterDirection.Input;
cmd.Parameters["sqlscript"].Value = sqlscript; cmd.Parameters.Add("pageSize", OracleType.Float); //每页记录数
cmd.Parameters["pageSize"].Direction = ParameterDirection.Input;
cmd.Parameters["pageSize"].Value = pageSize; cmd.Parameters.Add("pageIndex", OracleType.Float); //当前页
cmd.Parameters["pageIndex"].Direction = ParameterDirection.Input;
cmd.Parameters["pageIndex"].Value = pageIndex;
cmd.Parameters.Add("docount", OracleType.Float); //是否计算总页数
cmd.Parameters["docount"].Direction = ParameterDirection.Input;
cmd.Parameters["docount"].Value = docount; cmd.Parameters.Add("totalCount", OracleType.Float); //总记录数
cmd.Parameters["totalCount"].Direction = ParameterDirection.Output;
cmd.Parameters["totalCount"].Value = 0; cmd.Parameters.Add("totalPage", OracleType.Float); //总页数
cmd.Parameters["totalPage"].Direction = ParameterDirection.Output;
cmd.Parameters["totalPage"].Value = 0; cmd.Parameters.Add("v_cur", OracleType.Cursor); //返回的游标
cmd.Parameters["v_cur"].Direction = ParameterDirection.Output;
如:
包名为pkg
则:pkg.P_QuerySplit,这样调
cmd.CommandType = CommandType.StoredProcedure;
TYPE myrctype IS REF CURSOR;
PROCEDURE P_QuerySplit(sqlscript varchar2,
pageSize number,
pageIndex number,
docount number,
totalCount out number,
totalPage out number,
v_cur out OUT myrctype);
end PKG;
CREATE OR REPLACE PACKAGE BODY PKG AS
procedure P_QuerySplit(
sqlscript varchar2, --表名/SQL语句
pageSize integer, --每页记录数
pageIndex integer, --当前页
docount number, --是否计算总页数
totalCount out number, --总记录数
totalPage out number, --总页数
v_cur out OUT myrctype --返回游标
)
is
v_PageSize number;
v_PageIndex number;
v_SQL_Count varchar2(4000);
v_SQL varchar2(4000);
v_StartIndex number;
v_EndIndex number;
begin
v_PageSize:=pageSize;
if v_PageSize=0 then
v_PageSize:=1;
end if;
if(docount=1) then
--统计记录数量
v_SQL_Count := 'select count(*) from ('|| sqlscript ||') a ';
execute immediate v_SQL_Count into totalCount;
--计算总页数
totalPage:=CEIL(totalCount/v_PageSize);
end if;
--验证页号 如果页号大余了最大页数,返回最后一页
v_PageIndex:=pageIndex;
if v_PageIndex>totalPage then
v_PageIndex:=totalPage;
end if;
--计算开始的Index和结束的Index
v_StartIndex:=(v_PageIndex-1)*v_PageSize+1;
v_EndIndex:=v_PageIndex*v_PageSize;
v_SQL:='SELECT * FROM (';
v_SQL:=v_SQL||' SELECT A.*, ROWNUM RN ';
v_SQL:=v_SQL||' FROM ('||sqlscript||') A ';
v_SQL:=v_SQL||' WHERE ROWNUM <= '||v_EndIndex;
v_SQL:=v_SQL||')WHERE RN >= '||v_StartIndex;
open v_cur for v_SQL;
end P_QuerySplit;
end PKG;调用:OracleConnection conn = new OracleConnection(connString);
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "pkg.P_QuerySplit";
cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("sqlscript", OracleType.VarChar, 50); //表名/SQL语句
cmd.Parameters["sqlscript"].Direction = ParameterDirection.Input;
cmd.Parameters["sqlscript"].Value = sqlscript; cmd.Parameters.Add("pageSize", OracleType.Float); //每页记录数
cmd.Parameters["pageSize"].Direction = ParameterDirection.Input;
cmd.Parameters["pageSize"].Value = pageSize; cmd.Parameters.Add("pageIndex", OracleType.Float); //当前页
cmd.Parameters["pageIndex"].Direction = ParameterDirection.Input;
cmd.Parameters["pageIndex"].Value = pageIndex;
cmd.Parameters.Add("docount", OracleType.Float); //是否计算总页数
cmd.Parameters["docount"].Direction = ParameterDirection.Input;
cmd.Parameters["docount"].Value = docount; cmd.Parameters.Add("totalCount", OracleType.Float); //总记录数
cmd.Parameters["totalCount"].Direction = ParameterDirection.Output;
cmd.Parameters["totalCount"].Value = 0; cmd.Parameters.Add("totalPage", OracleType.Float); //总页数
cmd.Parameters["totalPage"].Direction = ParameterDirection.Output;
cmd.Parameters["totalPage"].Value = 0; cmd.Parameters.Add("v_cur", OracleType.Cursor); //返回的游标
cmd.Parameters["v_cur"].Direction = ParameterDirection.Output; DataSet Ds = new DataSet();
OracleDataAdapter adapter = new OracleDataAdapter(cmd);
adapter.Fill(Ds);
conn.Close();
在你的过程中open v_cur for v_SQL这前输出一下看看你拼的sql是什么dbms_output.put_line(v_SQL);在pl/sql里调试一下.pl/sql中单独表也没问题吗?联合查询就有问题?
在pl/sql中看一下联合查询拼出来的sql是啥.
ORA-00942: 表或视图不存在
ORA-06512: 在"HX8000.PKG", line 27
ORA-06512: 在line 1
sqlscript varchar2, --表名/SQL语句 如果我传的长度过长就变成下面的了SELECT A.MTRPOINT_DESC,B.CUSTOMER_ID FROM IPARA_M就是我说传的SQL语句被他截取了
cmd.Parameters.Add("sqlscript", OracleType.VarChar, 4000); //表名/SQL语句 惭愧惭愧啊