请教个oracle数据库设计的问题 给个思路就好

geniuswk3619 2011-10-19 03:09:45
有表node表swimlane表schema代表流程
想查出当前流程 当前泳道的节点node sql语句为 select n.id from node n where n.swimlane_id in(select t.id from swimlane t where t.schema_id='vProcessId'); 返回是list 问题在于想对结果集存操作。用游标的话后面怎么将游标作为输入参数。。。
...全文
149 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
geniuswk3619 2011-10-19
  • 打赏
  • 举报
回复
额。可能我就是要这类似的 感谢了。。。
xiaobn_cn 2011-10-19
  • 打赏
  • 举报
回复
完全没问题啊

create or replace function funtmp3 return varchar
is
cur sys_refcursor;
cur2 sys_refcursor;
begin
cur := funtemp();
cur2:= funtmp2(cur);
return '';
end funtmp3;
geniuswk3619 2011-10-19
  • 打赏
  • 举报
回复
我想在function2中使用1的返回值
xiaobn_cn 2011-10-19
  • 打赏
  • 举报
回复
我测试建了两个函数,没有出现什么问题,不知道楼主是在哪里被卡住了。我建的函数代码如下:


-- 函数1
create or replace function funTemp return SYS_REFCURSOR
IS
v_rc SYS_REFCURSOR;
begin
open v_rc for select * from t_test;
return (v_rc);
end funTemp;

-- 函数2,入参数函数1的返回类型
create or replace function funtmp2(cur SYS_REFCURSOR) return SYS_REFCURSOR
is
begin
return cur;
end funtmp2;
geniuswk3619 2011-10-19
  • 打赏
  • 举报
回复
因为函数2用的是1的游标我就不知道该怎么定义了
geniuswk3619 2011-10-19
  • 打赏
  • 举报
回复
没关系 能跟我讨论这么久我已经很感激了。。。
geniuswk3619 2011-10-19
  • 打赏
  • 举报
回复
就是function1返回游标 函数2使用的话怎么从1中取出里面的属性
xiaobn_cn 2011-10-19
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 geniuswk3619 的回复:]
是我小白。。别讽刺我了。。
[/Quote]

呵呵,没有讽剌的意思,偶的数据库编程确是也在学习中,主要使用的项目代码量集中在客户端了。楼主不要多想。
forgetsam 2011-10-19
  • 打赏
  • 举报
回复
显式调用 用fetch into 变量
隐式调用 用游标变量.列名

不过还是不知道你想做什么。
geniuswk3619 2011-10-19
  • 打赏
  • 举报
回复
function getSwimLaneByProcessId(vProcessId varchar2) return sys_refcursor as
返回游标 想用function 2使用返回值作为参数
c_id sys_refcursor :=getSwimLaneByProcessId(vProcessId varchar2);想这样的 不过这样写报错 不知道正确的该怎么写
geniuswk3619 2011-10-19
  • 打赏
  • 举报
回复
主要就是对游标处理不是很熟悉。。
geniuswk3619 2011-10-19
  • 打赏
  • 举报
回复
是我小白。。别讽刺我了。。
xiaobn_cn 2011-10-19
  • 打赏
  • 举报
回复
偶数据库编程用的比较少,不是很理解楼主所说的list是什么概念?
按照我的理解,楼主在代码中生成一个查询结果集,也就是你的那条SQL。
然后将这条SQL传递给需要使用的代码段就可以了,在里对接收到的SQL进行游标处理就可以了。
geniuswk3619 2011-10-19
  • 打赏
  • 举报
回复
我最初是想用视图 可是返回的是list 视图可以返回list吗?
后来我就想分开写成函数再分别调用 可也是因为返回list并对list操作就不会弄了。。。
xiaobn_cn 2011-10-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 geniuswk3619 的回复:]
从里面再查询数据nodetype =‘start’
再以查出的id在表line中作为startid查询endid
再在查出的结果集中查出id为endid的节点再作为startid。。。
[/Quote]
那就继续子查询就好了,把你那条SQL做为一个视图来看待。
select * from 
(
select n.id from node n where n.swimlane_id in(select t.id from swimlane t where t.schema_id='vProcessId')
) as T
where t......
geniuswk3619 2011-10-19
  • 打赏
  • 举报
回复
从里面再查询数据nodetype =‘start’
再以查出的id在表line中作为startid查询endid
再在查出的结果集中查出id为endid的节点再作为startid。。。
forgetsam 2011-10-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 geniuswk3619 的回复:]
insert哪个表呢 node表?还是再建个表?
[/Quote]

你要那个结果集干什么,保存?
geniuswk3619 2011-10-19
  • 打赏
  • 举报
回复
insert哪个表呢 node表?还是再建个表?
forgetsam 2011-10-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 geniuswk3619 的回复:]
的确是个办法 如果不想改变表结构呢。。
[/Quote]

为什么要修改表结构,select 又不是只能查询一个表,又不是只能查询*
geniuswk3619 2011-10-19
  • 打赏
  • 举报
回复
的确是个办法 如果不想改变表结构呢。。

加载更多回复(1)

17,078

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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