oracle存储过程 rownum
时间: 2023-09-14 17:14:25 浏览: 45
ROWNUM是Oracle数据库中的一个伪列,它可以帮助我们对查询结果进行编号。它的使用方法如下:
```
SELECT ROWNUM, column1, column2, ...
FROM table_name
WHERE conditions;
```
在存储过程中使用ROWNUM与在SELECT语句中使用ROWNUM类似,只需要将查询语句放在存储过程中即可。例如:
```
CREATE OR REPLACE PROCEDURE my_proc AS
BEGIN
FOR rec IN (SELECT ROWNUM, column1, column2, ...
FROM table_name
WHERE conditions) LOOP
-- do something with rec
END LOOP;
END;
```
在存储过程中使用ROWNUM的一个常见用途是对结果集进行分页。例如,我们可以在存储过程中使用ROWNUM来获取第1页的结果:
```
CREATE OR REPLACE PROCEDURE my_proc (p_page_number IN NUMBER, p_page_size IN NUMBER) AS
BEGIN
FOR rec IN (SELECT ROWNUM, column1, column2, ...
FROM (SELECT column1, column2, ...
FROM table_name
WHERE conditions
ORDER BY column1) t
WHERE ROWNUM <= p_page_number * p_page_size)
LOOP
IF rec.ROWNUM > (p_page_number - 1) * p_page_size THEN
-- do something with rec
END IF;
END LOOP;
END;
```
这个存储过程可以接受两个参数:页码和每页的记录数。它会根据这些参数来返回指定页码的结果集。注意,在内部查询中我们使用了ORDER BY语句来排序结果集。这个语句必须放在内部查询中而不是外部查询中,因为ROWNUM是在内部查询中计算的。如果我们把ORDER BY语句放在外部查询中,那么结果集的顺序会被打乱。