我想找到游标中的行数。有关键字可以提供帮助吗?使用COUNT
,我们必须编写一个查询。任何帮助将不胜感激。
答案 0 :(得分:16)
cursor_variable.%ROWCOUNT
是解决方案。但如果你在打开后检查它,它的值将为0。您需要循环遍历所有记录,以获得总行数。示例如下:
DECLARE
cur sys_refcursor;
cur_rec YOUR_TABLE%rowtype;
BEGIN
OPEN cur FOR
SELECT * FROM YOUR_TABLE;
dbms_output.put_line(cur%rowcount);--returning 0
LOOP
FETCH cur INTO cur_rec;
EXIT WHEN cur%notfound;
dbms_output.put_line(cur%rowcount);--will return row number beginning with 1
dbms_output.put_line(cur_rec.SOME_COLUMN);
END LOOP;
dbms_output.put_line('Total Rows: ' || cur%rowcount);--here you will get total row count
END;
/
答案 1 :(得分:13)
您必须打开光标,然后获取并计算每一行。没有别的办法。
答案 2 :(得分:1)
您可以使用以下简单的单行代码打印光标计数
dbms_output.put_line(TO_CHAR(cur%rowcount));
答案 3 :(得分:0)
DECLARE @STRVALUE NVARCHAR(MAX),
@CREATEDDATE DATETIME,
@STANTANCEVALUE NVARCHAR(MAX),
@COUNT INT=0,
@JOBCODE NVARCHAR(50)='JOB00123654',
@DATE DATETIME=GETDATE(),
@NAME NVARCHAR(50)='Ramkumar',
@JOBID INT;
CREATE TABLE #TempContentSplitValue (ITEMS NVARCHAR(200))
SELECT @JOBID = i.Id FROM JobHeader_TBL i WHERE Id=1201;
IF EXISTS (SELECT 1 FROM JobHeader_TBL WHERE Id=@JOBID)
BEGIN
SELECT @STRVALUE= Description from ContentTemplate_TBL where Id=1
INSERT INTO #TempContentSplitValue SELECT * FROM dbo.split(@STRVALUE, '_')
SET @STRVALUE=''
DECLARE db_contentcursor CURSOR FOR SELECT ITEMS FROM #TempContentSplitValue
OPEN db_contentcursor
FETCH NEXT FROM db_contentcursor
INTO @STANTANCEVALUE
WHILE (@@FETCH_STATUS = 0)
BEGIN
SET @STRVALUE += @STANTANCEVALUE + 'JOB00123654'
SET @COUNT += 1
SELECT @COUNT
FETCH NEXT FROM db_contentcursor INTO @STANTANCEVALUE
END
CLOSE db_contentcursor
DEALLOCATE db_contentcursor
DROP TABLE #TempContentSplitValue
SELECT @STRVALUE
END
答案 4 :(得分:0)
在这里,我试图计算年龄大于25岁的客户总数。因此,请首先将结果存储在游标中。然后计算函数内部或主函数本身中游标的大小。
DECLARE
cname customer24.cust_name%type;
count1 integer :=0;
CURSOR MORETHAN is
SELECT cust_name
FROM customer24
where age>25;
BEGIN
OPEN MORETHAN;
LOOP
FETCH MORETHAN into cname;
count1:=count1+1;
EXIT WHEN MORETHAN%notfound;
END LOOP;
-- dbms_output.put_line(count1);
dbms_output.put_line(MORETHAN%ROWCOUNT);
CLOSE MORETHAN;
END;
答案 5 :(得分:0)
这应该为您工作
{"secret":"xxx","encrypted":"xxxgggxxx"}
答案 6 :(得分:0)
由于通过网络访问数据库服务器(例如,在使用Ajax调用时)会产生开销,因此可能存在一些有用/需要解决的问题
考虑一下:
CURSOR c_data IS
SELECT per_first_name , null my_person_count
FROM person
UNION
SELECT null as per_first_name , count( distinct per_id ) as my_person_count
FROM person
order by my_person_count ;
提取的第一行具有记录数。一个必须添加获取的特定列(使用*无效),并且一个可以添加其他过滤器。
答案 7 :(得分:0)
试试这个:
print(len(list(cursor)))
答案 8 :(得分:-1)
开始时无法使用光标计数。为此你需要获取完整的光标;这就是获取光标数的方式。
declare
cursor c2 is select * from dept;
var c2%rowtype;
i number :=0;
begin
open c2;
loop
fetch c2 into var;
exit when c2%NOTFOUND;
i: = i+1;
end loop;
close c2;
dbms_output.put_line('total records in cursor'||i);
end;
答案 9 :(得分:-2)
您可以使用游标的%ROWCOUNT
属性。
e.g:
DECLARE
CURSOR lcCursor IS
SELECT *
FROM DUAL;
BEGIN
OPEN lcCursor ;
DBMS_OUTPUT.PUT_LINE(lcCursor%ROWCOUNT);
CLOSE lcCursor ;
END;