在oraclesql中使用游标如何解决这个问题



下面是我的代码。

declare
vdate tblstudent.retdate%type;
vnum number := 1;
-- studentSeq tblstudent.studentSeq%type;
-- studentSeq number;
CURSOR CUR --declare a cursor
IS
SELECT
STUDENTSEQ,
retdate
FROM
TBLSTUDENT;
-- where
-- status = 'Class completed' and
-- COMPLETIONSTATUS='Completed' and
-- vnum = STUDENTSEQ;
begin
open cur;
-- FETCH EX_CUR INTO PRODUCT_ID, PRODUCT_NAME; --Get data from cursor
dbms_output.PUT_LINE(vdate);
loop
fetch cur into vnum, vdate;
dbms_output.PUT_LINE(vdate);
dbms_output.PUT_LINE(vnum);
EXIT WHEN CUR %NOTFOUND;
end loop;
CLOSE cur; -- close cursor
END;

结果是

[2021-05-29 20:45:39] 20/09/24
[2021-05-29 20:45:39] 1
[2021-05-29 20:45:39] 18/10/21
[2021-05-29 20:45:39] 2
[2021-05-29 20:45:39] 20/02/16
[2021-05-29 20:45:39] 3
[2021-05-29 20:45:39] 20/12/23
[2021-05-29 20:45:39] 4
[2021-05-29 20:45:39] 21/07/24
[2021-05-29 20:45:39] 5
...
[2021-05-29 20:45:39] 18/02/02
[2021-05-29 20:45:39] 297
[2021-05-29 20:45:39] 21/05/25
[2021-05-29 20:45:39] 298
[2021-05-29 20:45:39] 16/12/12
[2021-05-29 20:45:39] 299
[2021-05-29 20:45:39] 20/04/21
[2021-05-29 20:45:39] 300
[2021-05-29 20:45:39] 16/02/19
[2021-05-29 20:45:39] 301
[2021-05-29 20:45:39] 16/02/19
[2021-05-29 20:45:39] 301

在这种状态下,我尝试编写以下代码来获取与where条件对应的数据。

declare
vdate tblstudent.retdate%type;
vnum number := 1;
studentSeq tblstudent.studentSeq%type;
-- studentSeq number;
CURSOR CUR --declare a cursor
IS
SELECT
STUDENTSEQ,
retdate
FROM
TBLSTUDENT
where
status = 'Class completed' and
COMPLETIONSTATUS='Completed' and
vnum = STUDENTSEQ;

但是,所需的where条件不能正常工作,因此只输出一行。

我想知道如何解决这个问题。最佳

vnum=STUDENTSEQ;查询末尾的条件似乎导致了这里的问题。

首先,简要说明。标准做法是在左边写列名,在右边写与之比较的变量/常量。所以STUDENTSEK=vnum;会更容易理解。

正如William在上面的评论中指出的那样,由于vnum的值没有变化,所以选择查询获取的结果是对应于STUDENTSEQ=1的记录。

如果我们希望获得STUDENTSEQ的所有值的记录,我们真的需要这个条件吗?

最新更新