情况是这样的,已知一条sql语句,select * from tb编程,执行这条sql语句,一条一条fetch取返回值前,我想知道这条sql语句会返回多少条记录集,我好再做其它操作。所以我需要一个功能,就是要知道这条sql语句的返回记录数。有一些数据库,如mysql,会提供get_row_num api,能够取得记录集数。
但我所知oracle没有提供这样的api,sqlserver也没有。在sqlserver中,我想到了一个办法,就是建立一个存储过程,用游标方式执行这条sql语句,并通过sqlserver提供的功能返回记录集个数。CREATE PROCEDURE GetRowNum
@sqlstr nvarchar(4000)
as
set nocount on
declare @P1 int,
@rowcount int
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
select @rowcount as sqlrowcount
exec sp_cursorfetch @P1
exec sp_cursorclose @P1
set nocount off这样,执行这个存储过程,就能同时返回记录集个数,和记录集。但在oracle中,我找不到相应的东西。请达人指教在oracle如何取得一条sql语句的记录个数,不要告诉我用select count(*) from (subsql),这样的话,我认为效率是很低的。
但我所知oracle没有提供这样的api,sqlserver也没有。在sqlserver中,我想到了一个办法,就是建立一个存储过程,用游标方式执行这条sql语句,并通过sqlserver提供的功能返回记录集个数。CREATE PROCEDURE GetRowNum
@sqlstr nvarchar(4000)
as
set nocount on
declare @P1 int,
@rowcount int
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
select @rowcount as sqlrowcount
exec sp_cursorfetch @P1
exec sp_cursorclose @P1
set nocount off这样,执行这个存储过程,就能同时返回记录集个数,和记录集。但在oracle中,我找不到相应的东西。请达人指教在oracle如何取得一条sql语句的记录个数,不要告诉我用select count(*) from (subsql),这样的话,我认为效率是很低的。
allcount就是条数
数据量大的时候慎用
不一样把
select count(1) from tb
怎么会和 select * from tb
一样 不解??????
也不知道有什么好的办法,
不过fetch的时候 可以 cursorname%rowcount 来统计fetch的次数帮鼎
select count(*) over() from tb
over() 加在 檢索對象後面有什麽用途,爲什麽要加,能詳細介紹下over() 麽?謝謝
同学...看来你还没有搞清楚ORACLE COUNT(*)与COUNT(1)的关系.
COUNT(1)是统计该表第一列的所有行.
COUNT(*)是统计该表的所有列的所有行.
select 只能与into连用而且只能返回一条记录
如果不是在plsql块中所有的sql语句oracle都认为是隐式cursor
想得到sql语句所影响的行数就可以通过sql%rowcount属性得到