(求助)在DBMS_SQL中打开游标是啥意思??

Strawberry79 2003-02-18 09:12:00
如这句:
v_CursorID := DBMS_SQL.OPEN_CURSOR;

这个CURSOR和普通的游标定义有什么不同?
...全文
96 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
heyday 2003-02-18
  • 打赏
  • 举报
回复
不清楚,你要建的表的列是什么
tuidler 2003-02-18
  • 打赏
  • 举报
回复
可以互相嵌套的,注意每个游标返回的指针不一样
Jimmy.Chiang 2003-02-18
  • 打赏
  • 举报
回复
为什么不用create table as select???
Strawberry79 2003-02-18
  • 打赏
  • 举报
回复
这种游标可以嵌套吗?比如我定义一个动态游标是DDL的,在LOOP在过程中我再OPEN一个动态游标可以吗?因为我要用动态游标建一个表,而这张表的字段名还依赖于一个被选出来的记录集(也就是上一个游标)的某一字段的记录内容,两个都是动态的,怎么办??
举例:
第一次游标的记录集:
Year xzq value
2000 北京 10
2003 天津 20
要建一个表:
2000 2003
10 20

请高手赐教,头都大了!:(
heyday 2003-02-18
  • 打赏
  • 举报
回复
返回一个句柄
Jimmy.Chiang 2003-02-18
  • 打赏
  • 举报
回复
动态游标不仅可以执行sql,还可以执行dml。
上面的过程游标就被定义为dml语句,动态创建表,这是静态游标不能完成的。执行后v_NumRows返回操作是否完成的信息。

静态游标只能执行查询语句。
Strawberry79 2003-02-18
  • 打赏
  • 举报
回复
CREATE OR REPLACE PROCEDURE CreateTable(
p_Description IN VARCHAR2
)IS
v_CURSOR NUMBER;
v_CreateString VARCHAR2(100);
v_NumRows INTEGER;
BEGIN
v_Cursor := DBMS_SQL.OPEN_CURSOR;
v_CreateString := 'CREATE TABLE temp_table'||p_Description;
DBMS_SQL.PARSE(v_CURSOR,v_CreateString,DBMS_SQL.V7);
v_NumRows := DBMS_SQL.EXECUTE(v_Cursor);
DBMS_SQL.CLOSE_CURSOR(v_Cursor);

END;
这个v_Cursor被定义的是什么?执行的时候返回的又是什么?(好不明白呀?):(
Jimmy.Chiang 2003-02-18
  • 打赏
  • 举报
回复
相对于普通的游标,一个是动态,一个是静态。

普通游标是由静态查询语句产生的,不能根据需要更改这个查询语句;而动态游标则提供了很强的灵活性。
tuidler 2003-02-18
  • 打赏
  • 举报
回复
这是在动态游标中使用的,上面是得到一个指针,
动态游标可以让你动态编辑要执行的SQL文,不需要事先写好。
还可以实现DDL语句的执行
heyday 2003-02-18
  • 打赏
  • 举报
回复
动态游标
Strawberry79 2003-02-18
  • 打赏
  • 举报
回复
好的,我试试大家说的方法,感激不尽~!一定给分:~)
heyday 2003-02-18
  • 打赏
  • 举报
回复
不是很清楚你要建的表的结构,你自己换一下试试.
还有,列名好像不能为数字或中文字符.我建了不成功.
create or replace procedure CreateTable is
v_col1 varchar2(20);
v_col2 varchar2(20);
v_col3 varchar2(20);
v_createtable varchar2(20);
v_Cursor number;
cursor createtable is
select year,xzq,value from table1;
begin
open createtable;
loop
fetch createtable into v_col1,v_col2,v_col3;
v_Cursor := Dbms_Sql.Open_Cursor;
v_createtable := '你建表的语句'
DBms_sql.Parse(v_Cursor,v_createtable,DBMS_Sql.v7);
Dbms_Sql.Close_Cursor(v_Cursor);

exit when createtable%notfound;
end loop;
close createtable;



end CreateTable;

17,090

社区成员

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

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