大家好,现在创建了一个oracle包 DotNet如下: create or replace package DotNet is -- Author : good_hy
-- Created : 2004-12-13 13:30:30
-- Purpose : TYPE type_cur IS REF CURSOR; --定义游标变量用于返回记录集 PROCEDURE DotNetPagination(
Pindex in number, --分页索引
Psql in varchar2, --产生dataset的sql语句
Psize in number, --页面大小
v_cur out type_cur --返回当前页数据记录
);end DotNet;
然后有一个包体:create or replace package body DotNet is --*************************************************************************************** PROCEDURE DotNetPagination(
Pindex in number,
Psql in varchar2,
Psize in number,
v_cur out type_cur ---记录总数
)
AS v_sql VARCHAR2(1000);
v_count number;
v_Plow number;
v_Phei number;
Begin
------------------------------------------------------------取分页总数
v_sql := 'select count(*) from (' || Psql || ')';
execute immediate v_sql into v_count; ------------------------------------------------------------显示任意页内容
v_Phei := Pindex * Psize + Psize;
v_Plow := v_Phei - Psize + 1;
--Psql := 'select rownum rn,t.* from cd_ssxl t' ; --要求必须包含rownum字段
v_sql := 'select * from (' || Psql || ') where rn between ' || v_Plow || ' and ' || v_Phei ; open v_cur for v_sql; End DotNetPagination;
end DOtnet;但是我在程序里面调用这个包的存储过程的时候一直报:
pls-00201:dotnet不是过程或尚未定义
pls--00201:statment ignored;
知道的帮忙一下,谢谢。
-- Created : 2004-12-13 13:30:30
-- Purpose : TYPE type_cur IS REF CURSOR; --定义游标变量用于返回记录集 PROCEDURE DotNetPagination(
Pindex in number, --分页索引
Psql in varchar2, --产生dataset的sql语句
Psize in number, --页面大小
v_cur out type_cur --返回当前页数据记录
);end DotNet;
然后有一个包体:create or replace package body DotNet is --*************************************************************************************** PROCEDURE DotNetPagination(
Pindex in number,
Psql in varchar2,
Psize in number,
v_cur out type_cur ---记录总数
)
AS v_sql VARCHAR2(1000);
v_count number;
v_Plow number;
v_Phei number;
Begin
------------------------------------------------------------取分页总数
v_sql := 'select count(*) from (' || Psql || ')';
execute immediate v_sql into v_count; ------------------------------------------------------------显示任意页内容
v_Phei := Pindex * Psize + Psize;
v_Plow := v_Phei - Psize + 1;
--Psql := 'select rownum rn,t.* from cd_ssxl t' ; --要求必须包含rownum字段
v_sql := 'select * from (' || Psql || ') where rn between ' || v_Plow || ' and ' || v_Phei ; open v_cur for v_sql; End DotNetPagination;
end DOtnet;但是我在程序里面调用这个包的存储过程的时候一直报:
pls-00201:dotnet不是过程或尚未定义
pls--00201:statment ignored;
知道的帮忙一下,谢谢。
cmd.CommandText = "Dotnet";//包名 cmd.Parameters.Add("Psize", OracleDbType.Int32, 10);//分页大小
cmd.Parameters.Add("Pindex", OracleDbType.Int32, 10);//页码
cmd.Parameters.Add("Psql", OracleDbType.Varchar2, 3000);//sql语句
// cmd.Parameters.Add("Pcount", OracleDbType.Int32, 10);//返回得记录总数
cmd.Parameters.Add("v_cur", OracleDbType.RefCursor);//返回得记录集 cmd.Parameters["Psize"].Value = PageSize;
cmd.Parameters["Pindex"].Value = PageIndex;
cmd.Parameters["Psql"].Value = StrSql;
// cmd.Parameters["Pcount"].Direction = ParameterDirection.Output;
cmd.Parameters["v_cur"].Direction = ParameterDirection.Output;
// try
// {
OracleDataAdapter ODAdapter = new OracleDataAdapter(cmd);
cmd.Connection = conn;
conn.Open();
DataSet dataset = new DataSet();
ODAdapter.Fill(dataset);
/// TotalCount = int.Parse(cmd.Parameters["Pcount"].Value.ToString());
return dataset;
即使用了 如 For i in mycur的方式
如果是,建议换种方式试试
如
Loop
fetch .. into ..
exit when..end loop;
或者参考这个吧
create or replace procedure pro_SysCur(CId in varchar2,Cur_Stu out sys_refcursor) AS
begin
open Cur_Stu for select name,age from student where ClassId=CId;
end;declare
C_Stu Sys_RefCursor;
type rec_stu is record(
tname student.name%type,
tage student.age%type
);
rw_stu rec_stu;
begin pro_syscur('C001',c_stu);
LOOP
fetch c_stu into rw_stu;
exit when c_stu%notfound;
dbms_output.put_line('姓名='||rw_stu.tname||' 年龄='||rw_stu.tage);
end loop;
end;
EXEC dotnetdotnet是包,又不能这样调用的
只能调用包里的存储过程
EXEC dotnet.DotNetPagination(参数)