*今天太苦恼。刚学Ora,请教一个“高手”如何写存储过程,他居然说和MSSQL中一样!大家说说,一样吗?

adailee 2004-09-07 04:20:26
这个问题我在其他帖子里也问过,可是没有得到明确的答案:
如何写一个Ora的存储过程,实现MSSQL中这样的存储过程:
create procduce UP_SELECT_ITEM
AS
SELECT * FROM TABLE_ITEM

那位Ora高手很不屑说,SQL语句都是一样的,在MSSQL中怎么写,在Ora中也是怎么写。
我也不知道他是不是高手,有同事让我去问他。可是被奚落一顿就回来了。

KAO,可是Ora中明明就不能这样写。郁闷哪!
...全文
135 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
adailee 2004-09-07
  • 打赏
  • 举报
回复
不行。ADO.Net端,使用OracleCommandBuilder.DeriveParameters(cmd);去获取这个存储过程的参数,返回空。他没有能正常工作。
adailee 2004-09-07
  • 打赏
  • 举报
回复
TO: dinya2003(OK)
你这里使用的游标类型是pkg_test.myCursor。这个类型你在上面定义过:
type myCursor is ref cursor;

为什么我不能直接用cursor呢?
adailee 2004-09-07
  • 打赏
  • 举报
回复
TO: dinya2003(OK)
Thanks!我测试一下客户端ADO.Net的调用方法。稍后再发言。;)
dinya2003 2004-09-07
  • 打赏
  • 举报
回复
p_out:=rc 应该是.
dinya2003 2004-09-07
  • 打赏
  • 举报
回复
上面的看起来麻烦,其实不麻烦,写成过程也差不多是这个样子的.

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;
zwj0712 2004-09-07
  • 打赏
  • 举报
回复
haha !!^_^!!!
adailee 2004-09-07
  • 打赏
  • 举报
回复
客户端是ADO.Net,数据库是Ora9i。
写一个存储过程,返回表中的全部数据集。就是这么个需求。
5555555

adailee 2004-09-07
  • 打赏
  • 举报
回复
zhouweiwansui(为什么我就是这么性感) :
我也是这么认为。不过首先是Ora的语法、规则本来就不熟悉。手头也没有好的入门读物。
上手就开始用它。很为难啊。

我只是需要一个返回结果及的存储过程的例子,怎么就这么困难?
zhouweiwansui 2004-09-07
  • 打赏
  • 举报
回复
如果你很熟悉sqlserver语法,那么写oracle还不是小菜一碟.花两天时间熟悉一下就好了.
oralce没有sqlserver的联机帮助,这个是最大的问题.
sql的基本道理都是一样的.
adailee 2004-09-07
  • 打赏
  • 举报
回复
dinya2003(OK)
你给的例子里面,又是Package,又是function,可是存储过程怎么办???

对于高手或者熟手来说,写这个不是难事,可是对于初学者来说,为难死了。
Ora的帮助文档,一级烂。初学者根本找不到入口。这一点比MSSQL差太远。

如果MSSQL2005在性能上可以和Ora打成平手,Ora早晚死掉。

不过,请给出一个存储过程的例子。不要是Package或者function,好么?
ligenlee 2004-09-07
  • 打赏
  • 举报
回复
都差不多吧
各个版本个别语法不一样罢了
freddy2003 2004-09-07
  • 打赏
  • 举报
回复
支楼上!!
dinya2003 2004-09-07
  • 打赏
  • 举报
回复
这是过程返回记录集的例子.在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;
/
bzszp 2004-09-07
  • 打赏
  • 举报
回复
create or replace procedure p_name as
v_number number;
begin
...
end p_name;
/

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧