大家看看我这个 SQL 语句为什么不能重复执行?

NewCenturyNewPage 2004-09-23 02:17:36
int GetUserInfo(USER_INFO *user_info)
{
EXEC SQL DECLARE MyCursor CURSOR FOR
SELECT Tel,Status,Flag FROM User
WHERE (flag = 0) and (ROWNUM> 0) and(ROWNUM<=500);

EXEC SQL CLOSE MyCursor;
EXEC SQL DELETE MyCursor;
}

在我的程序中第一次调用这个函数的时候,可以正确的执行,
第二次执行的时候就报错,根本不能取得用户表的信息。
什么原因?
...全文
153 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
NewCenturyNewPage 2004-09-23
  • 打赏
  • 举报
回复

晕哦,经提醒, 现在发现是由于自己的SQL语句错了,改正为:

EXEC SQL DECLARE MyCursor CURSOR FOR
SELECT Tel,Status,Flag FROM
(SELECT rownum rm ,flag,tel,status from user where rm<=500)
where (rm>=0) and (flag=0);

zhobin 2004-09-23
  • 打赏
  • 举报
回复
rownum不是用来取范围的,它像Sql server中的top只是取得固定的行数
NewCenturyNewPage 2004-09-23
  • 打赏
  • 举报
回复
现在我找到原因了,这个函数还是可以循环执行的,只是这个ROWNUM是怎么定义的,为什么有时结果那么怪呢?如我上面的所说的。
NewCenturyNewPage 2004-09-23
  • 打赏
  • 举报
回复
还有就是那个 ROWNUM ,很困惑,
1)
select rownum ,flag ,tel from chuser_tbl where flag =0 and rownum<=500;

可以得到500条记录。

2)
select rownum ,flag ,tel from chuser_tbl where flag =0 and rownum<=500 and rownum>=100

竟然得到的记录是0。
NewCenturyNewPage 2004-09-23
  • 打赏
  • 举报
回复
游标是好像一次定义了一次以后,下次就存在着(全局变量?),

因此必须删去,以便下次使用?我是这样理解的,对吗?
drabit 2004-09-23
  • 打赏
  • 举报
回复
游标怎么能delete?

EXEC SQL DELETE MyCursor;

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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