oracle如何定义并使用动态游标

abcynic 2004-03-19 05:19:47
动态游标, 也就是说您可以运行过程中 动态地形成游标的select 子句
例如PRO*中能做到:
EXEC SQL declare cur_restoreseq cursor for :DSQL;(实际中这样写是不行的)

其中DSQL是变量;
...全文
285 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
skystar99047 2004-03-20
  • 打赏
  • 举报
回复
就是定义一个游标变量
zhpsam109 2004-03-20
  • 打赏
  • 举报
回复
学习!
huazaijiajia 2004-03-20
  • 打赏
  • 举报
回复
实际上当表名不确定的时候才要用上动态游标,如
....
v_CursorID integer;
v_SumCount integer;
v_Sql varchar2(1024);
v_column1 varchar2(15);
v_column2 varchar2(15);
begin
......
for i in 0..10 loop
v_Sql:='select column1,column2'
||' from table'||to_char(i)
||' where id='||VarID
v_CursorID :=DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(v_CursorID,v_Sql,DBMS_SQL.NATIVE);
DBMS_SQL.DEFINE_COLUMN(v_CursorID,1 , v_column1,15);
DBMS_SQL.DEFINE_COLUMN(v_CursorID,2 , v_column2,15);
v_SumCount:=DBMS_SQL.EXECUTE(v_CursorID);
loop
if DBMS_SQL.FETCH_ROWS(v_CursorID) = 0 then
exit;
end if;
DBMS_SQL.COLUMN_VALUE(v_CursorID,1 , v_column1);
DBMS_SQL.COLUMN_VALUE(v_CursorID,2 , v_column2);
.......
.......
end loop;
DBMS_SQL.CLOSE_CURSOR(v_CursorID);
end loop;
......
end;
beckhambobo 2004-03-19
  • 打赏
  • 举报
回复
create package test_age
as
type t_sor is ref cursor;
end;
/
create procedure pro(p_table in varchar2,p_col in varchar2,p_rc out test_age.t_sor)
as
str varvhar2(100);
begin
str:='select '||p_col||' from '||p_table;
open p_rc for str;
end;
/
ATCG 2004-03-19
  • 打赏
  • 举报
回复
给你一个例子
create or replace procedure test
as
type ref_cursor is ref cursor;
your_cursor ref_cursor;
yourvar varchar2(8);
begin
open your_cursor for select 1 from dual;
loop
fetch your_cursor into yourvar;
exit when your_cursor%notfound;
end loop;
close your_cursor;
end test;
/

17,078

社区成员

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

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