ORACLE游标

eason2000 2010-03-19 11:06:20
我有一个SQL游标,请问怎么写才能在ORACLE里执行?
declare @djid varchar2(255),
@dwid varchar2(255),
@je number(20,8),
@xde number(20,8),
@sumjine number(20,8),
@zjjine number(20,8)
Declare Source Cursor For
select djid from #a

Open Source



Fetch Next From Source Into @djid
While @@Fetch_Status = 0
Begin
declare source1 cursor for
select djid,je from tmp_fxb where djid=@djid
order by dwid,djid

Open Source1

Fetch Next From Source1 Into @djid,@je
Select @sumjine = @je
select @hjjine=isnull(sum(je),0) from t_djmx
select @zjjine=@sumjine+@hjjine

While @@Fetch_Status = 0
Begin
Fetch Next From Source1 Into @djid,@je
if @zjjine<=@xde
begin
insert into t_djmx(djid,je)values(@djid,@je)
end


End
Close Source1
Deallocate Source1

Fetch Next From Source Into @djid
End
Close Source
Deallocate Source
end
...全文
108 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qicai841125 2010-03-21
  • 打赏
  • 举报
回复
学习一下六楼给的例子
心中的彩虹 2010-03-21
  • 打赏
  • 举报
回复
DECLARE
v_djid VARCHAR2(255);
v_dwid VARCHAR2(255);
v_je NUMBER(20, 8);
v_xde NUMBER(20, 8);
v_sumjine NUMBER(20, 8);
v_zjjine NUMBER(20, 8);
cursor source is select djid from a;
cursor source1 is SELECT djid, je FROM tmp_fxb WHERE djid = djid ORDER BY dwid,djid;

BEGIN
OPEN SOURCE;
FETCH SOURCE
INTO v_djid;
WHILE SOURCE%FOUND LOOP
OPEN Source1;
FETCH Source1
INTO v_djid, v_je;
v_sumjine := v_je;
SELECT isnull(SUM(je), 0) INTO v_hjjine FROM t_djmx;
v_zjjine := v_sumjine + v_hjjine;
WHILE SOURCE1%FOUND LOOP
FETCH Source1
INTO v_djid, v_je;
IF v_zjjine <= v_xde THEN
INSERT INTO t_djmx (djid, je) VALUES (v_djid, v_je);
END IF;
END LOOP;
CLOSE Source1;
FETCH SOURCE
INTO v_djid;
END LOOP;
CLOSE SOURCE;
END;
friendjin 2010-03-21
  • 打赏
  • 举报
回复
你还是先看看oracle pl/sql编程吧,很简单的。
eason2000 2010-03-19
  • 打赏
  • 举报
回复
是的,是MSSQL游标,ORACLE的游标不会弄
ojuju10 2010-03-19
  • 打赏
  • 举报
回复
你的是mssql的游标,楼主先熟悉下oracle游标的语法后,再慢慢调试吧
eason2000 2010-03-19
  • 打赏
  • 举报
回复
不会啊。好像是语法错误!
tzc 2010-03-19
  • 打赏
  • 举报
回复
pl_sql 就可以调试 传参
tangren 2010-03-19
  • 打赏
  • 举报
回复
--改了一下(不保证正确),自己调试一下
DECLARE
v_djid VARCHAR2(255);
v_dwid VARCHAR2(255);
v_je NUMBER(20, 8);
v_xde NUMBER(20, 8);
v_sumjine NUMBER(20, 8);
v_zjjine NUMBER(20, 8);
SOURCE CURSOR FOR
SELECT djid FROM a;

source1 CURSOR FOR
SELECT djid, je FROM tmp_fxb WHERE djid = djid ORDER BY dwid, djid;

BEGIN
OPEN SOURCE;
FETCH SOURCE
INTO v_djid;
WHILE SOURCE%FOUND LOOP
OPEN Source1;
FETCH Source1
INTO v_djid, v_je;
v_sumjine := v_je;
SELECT isnull(SUM(je), 0) INTO v_hjjine FROM t_djmx;
v_zjjine := v_sumjine + v_hjjine;
WHILE SOURCE1%FOUND LOOP
FETCH Source1
INTO v_djid, v_je;
IF v_zjjine <= v_xde THEN
INSERT INTO t_djmx (djid, je) VALUES (v_djid, v_je);
END IF;
END LOOP;
CLOSE Source1;
FETCH SOURCE
INTO v_djid;
END LOOP;
CLOSE SOURCE;
END;
duqiangcise 2010-03-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 eason2000 的回复:]
我有一个SQL游标,请问怎么写才能在ORACLE里执行?
declare @djid varchar2(255),
@dwid varchar2(255),
@je number(20,8),
@xde number(20,8),
@sumjine number(20,8),
@zjjine number(20,8)
Declare Source Cursor For
select……
[/Quote]
你这个东东好像不是使用的是oracle数据库吧???可能在oracle上不能够执行。

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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