这是过程返回记录集的例子.在oracle中不是这么写的,给个例子你参考一下:create or replace package pkg_test as type myCursor is ref cursor; function get(p_id number) return myCursor; end pkg_test; --包体 create or replace package body pkg_test as function get(p_id number) return myCursor is rc myCursor; strsql varchar2(200); begin if p_id=0 then open rc for select a.user_name from fnd_user a ; else strsql:='select a.user_name from fnd_user a where a.user_id=:p_id'; open rc for strsql using p_id; end if; return rc; end get;
end pkg_test;--调用测试 set serverout on declare w_rc pkg_test.myCursor; w_name varchar2(100); begin w_rc:=pkg_test.get(0); loop fetch w_rc into w_name; exit when w_rc%notfound; dbms_output.put_line(w_name); end loop; end; /
上面的看起来麻烦,其实不麻烦,写成过程也差不多是这个样子的. create or replace procedure get(p_id in number,p_out out pkg_test.MyCursor) is rc pkg_test.myCursor; strsql varchar2(200); begin if p_id=0 then open rc for select a.user_name from fnd_user a ; else strsql:='select a.user_name from fnd_user a where a.user_id=:p_id'; open rc for strsql using p_id; end if; p_out:=c; end get;
TO: dinya2003(OK) Thanks!我测试一下客户端ADO.Net的调用方法。稍后再发言。;)
TO: dinya2003(OK) 你这里使用的游标类型是pkg_test.myCursor。这个类型你在上面定义过: type myCursor is ref cursor;为什么我不能直接用cursor呢?
as
type myCursor is ref cursor;
function get(p_id number) return myCursor;
end pkg_test;
--包体
create or replace package body pkg_test
as
function get(p_id number) return myCursor is
rc myCursor;
strsql varchar2(200);
begin
if p_id=0 then
open rc for select a.user_name from fnd_user a ;
else
strsql:='select a.user_name from fnd_user a where a.user_id=:p_id';
open rc for strsql using p_id;
end if;
return rc;
end get;
end pkg_test;--调用测试
set serverout on
declare
w_rc pkg_test.myCursor;
w_name varchar2(100);
begin
w_rc:=pkg_test.get(0);
loop
fetch w_rc into w_name;
exit when w_rc%notfound;
dbms_output.put_line(w_name);
end loop;
end;
/
你给的例子里面,又是Package,又是function,可是存储过程怎么办???对于高手或者熟手来说,写这个不是难事,可是对于初学者来说,为难死了。
Ora的帮助文档,一级烂。初学者根本找不到入口。这一点比MSSQL差太远。如果MSSQL2005在性能上可以和Ora打成平手,Ora早晚死掉。不过,请给出一个存储过程的例子。不要是Package或者function,好么?
oralce没有sqlserver的联机帮助,这个是最大的问题.
sql的基本道理都是一样的.
我也是这么认为。不过首先是Ora的语法、规则本来就不熟悉。手头也没有好的入门读物。
上手就开始用它。很为难啊。我只是需要一个返回结果及的存储过程的例子,怎么就这么困难?
写一个存储过程,返回表中的全部数据集。就是这么个需求。
5555555
rc pkg_test.myCursor;
strsql varchar2(200);
begin
if p_id=0 then
open rc for select a.user_name from fnd_user a ;
else
strsql:='select a.user_name from fnd_user a where a.user_id=:p_id';
open rc for strsql using p_id;
end if;
p_out:=c;
end get;
Thanks!我测试一下客户端ADO.Net的调用方法。稍后再发言。;)
你这里使用的游标类型是pkg_test.myCursor。这个类型你在上面定义过:
type myCursor is ref cursor;为什么我不能直接用cursor呢?