请问各位大侠,Oracle中如何写一个返回结果集的过程,并可以通过'execute sp_name'的方法调用.

guo 2000-12-08 09:14:00
学习SQLSERVER已经非常长的时间,但确是刚刚接触ORACLE,在欣赏PLSQL的功能强大的同时,也感到改变习惯时的痛苦.想在ORACLE下写一个返回结果集的过程(在SQLSERVER中是非常简单的),但这个问题一直折磨我几天,现向各位请教!

另,哪里能找到DESIGNER6I当,另送50分!
...全文
230 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
guo 2000-12-15
  • 打赏
  • 举报
回复
为什么不能给部分的分数? 我的问题还没有解决完,对不起rabbit,zheng我只能晚些给了!
guo 2000-12-15
  • 打赏
  • 举报
回复
感谢大家的专注: RABBIT的方法是可以但我感觉只是在BDE,PLSQL环境等支持游标类型的语言中.在ODBC中,ADO及其它SQL语言中如何调用呢? 当我仔细研究过ORACLE8I的文档后我感觉到ORACLE公司也推荐用VIEW或SELECT语句进行多记录的获取,而用过程进行底层的数据处理.所以我也不愿意再进行这方面的研究,虽然我在SQLSERVER中使用过程很上瘾.
我感觉ORACLE在易用性及与SQL的通用性上还做的不够(指它本身的SQL与PLSQL的通用性,比如T-SQL就不一样).
我的看法是用VIEW或SELECT语句进行多记录的获取或通过数组进行逐个赋值,不知各位在实际应用中是如何处理的?
zheng 2000-12-12
  • 打赏
  • 举报
回复
rabbit的方法是可以的。而且delphi用也认识ftcursor类型。
guo 2000-12-09
  • 打赏
  • 举报
回复
rabbit说的方法我试过,在DELPHI中却无法将参数设为ftCursor,并且在设计阶段就报错.
rabbit 2000-12-09
  • 打赏
  • 举报
回复
use Procedure not Function.
The Return Value Must be the First Parameter.
Try Again.
guo 2000-12-08
  • 打赏
  • 举报
回复
不要吓我!如果真是如此,我岂不是只能用视图来实现了?好苦呀!
土豆 2000-12-08
  • 打赏
  • 举报
回复
我直接告诉你吧,ORACLE不提供在存储过程中返回记录集的功能,不要白做努力了。
rabbit 2000-12-08
  • 打赏
  • 举报
回复
我们有理由相信oracle。
如此定义一个类型(RETURN return_type在下面的例子中应该省略)
CREATE OR REPLACE PACKAGE cv_types AS
-- TYPE GenericCurTyp is REF CURSOR RETURN return_type;
TYPE GenericCurTyp is REF CURSOR;
END cv_types;
过程如此建立。
PROCEDURE open_cv (generic_cv IN OUT cv_types.GenericCurTyp, choice NUMBER) IS
BEGIN
IF choice = 1 THEN
OPEN generic_cv FOR SELECT * FROM emp;
ELSIF choice = 2 THEN
OPEN generic_cv FOR SELECT * FROM dept;
ELSIF choice = 3 THEN
OPEN generic_cv FOR SELECT * FROM salgrade;
END IF;
END;
注意:返回的游标必须是第一个参数,且要指明参数类型为ftCursor
相信对你会很有帮助。

不足:oracle现在不能返回动态SQL的查询结果。
但可以使用以下方法达到同样的效果
OPEN generic_cv FOR 'SELECT * FROM emp WHERE empid > '|| Parameter ;
zheng 2000-12-08
  • 打赏
  • 举报
回复
可以的。
你先建一个游标类型,过程的 in out 参数为游标类型即可。搜索一下以前的问题,
有过的。

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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