[转]oracle 12c 中的分页子句

转自:http://blog.itpub.net/271063/viewspace-1061279/

-- 连接数据库 创建测试用户
-- Connected to Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 
-- Connected as [email protected]_192.168.56.120

create user scott identified by tiger default tablespace users;
grant connect,resource to scott;
grant unlimited tablespace to scott;

-- 创建测试表
create table big_table
as
select rownum id, a.*
  from all_objects a
 where 1=0
/
alter table big_table nologging;

-- 添加200万测试记录
declare
    l_cnt number;
    l_rows number := &1;
begin
    insert /*+ append */
    into big_table
    select rownum, a.*
      from all_objects a
     where rownum <= &1;
    l_cnt := sql%rowcount;
    commit;
    while (l_cnt < l_rows)
    loop
        insert /*+ APPEND */ into big_table
        select rownum+l_cnt, 
               OWNER, OBJECT_NAME, SUBOBJECT_NAME, OBJECT_ID, DATA_OBJECT_ID,
               OBJECT_TYPE, CREATED, LAST_DDL_TIME, TIMESTAMP, STATUS,
               TEMPORARY, GENERATED, SECONDARY, NAMESPACE, EDITION_NAME,
               SHARING,EDITIONABLE,ORACLE_MAINTAINED  
          from big_table
         where rownum <= l_rows-l_cnt;
        l_cnt := l_cnt + sql%rowcount;
        commit;
    end loop;
end;
/
alter table big_table add constraint big_table_pk primary key(id);
exec dbms_stats.gather_table_stats( user, ‘BIG_TABLE‘, estimate_percent=> 1);

-- 查看占用磁盘空间大约280兆
SQL> select 35862*8 from dual;
   35862*8
----------
    286896

-- 开始使用oracle自带的分页子句,去前三条记录。
SQL> set timing on
SQL> 
SQL> select id,object_name from big_table
  2  order by id fetch first 3 rows only ;
        ID OBJECT_NAME
---------- --------------------------------------------------------------------------------
         1 ORA$BASE
         2 DUAL
         3 DUAL
Executed in 0.531 seconds

SQL> select id,object_name from big_table
  2  order by id
  3  offset 3 rows fetch next 3 rows only;
        ID OBJECT_NAME
---------- --------------------------------------------------------------------------------
         4 MAP_OBJECT
         5 SYSTEM_PRIVILEGE_MAP
         6 SYSTEM_PRIVILEGE_MAP
Executed in 0.407 seconds

SQL> select id,object_name from big_table
  2  order by id
  3  offset 6 rows fetch next 3 rows only;
        ID OBJECT_NAME
---------- --------------------------------------------------------------------------------
         7 TABLE_PRIVILEGE_MAP
         8 TABLE_PRIVILEGE_MAP
         9 USER_PRIVILEGE_MAP
Executed in 0.406 seconds

SQL> select id,object_name from big_table order by id
  2  offset 0 rows fetch next 3 rows only;
        ID OBJECT_NAME
---------- --------------------------------------------------------------------------------
         1 ORA$BASE
         2 DUAL
         3 DUAL
Executed in 0.406 seconds

SQL>

在省厅查人时,可以使用这项技术。原来离不了rownum. IBATIS是否有适应oracle12c的设置呢?

时间: 2024-11-09 09:52:18

[转]oracle 12c 中的分页子句的相关文章

Oracle 12c中增强的PL/SQL功能

英文链接:http://www.oracle.com/technetwork/issue-archive/2013/13-sep/o53plsql-1999801.html Oracle 12c增强了一系列定义和执行PL/SQL程序单元的方式.本文覆盖了Oracle 12c几个新特性: 1.为结果缓存条件优化了调用者权限函数 2.可以在SQL语句中定义和执行PL/SQL函数 3.通过ACCESSIBLE BY条件指定一个白名单来限制程序单元的访问 4.可直接授权角色给指定程序单元 调用者权限和P

如何在oracle 12c中创建普通用户

-------如何在oracle 12c中创建普通用户------- [[email protected] ~]$ sqlplus / as sysdba SQL*Plus: Release 12.1.0.2.0 Production on Sun Nov 29 21:43:50 2015 Copyright (c) 1982, 2014, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edit

Oracle数据库中的分页--rownum

1. 介绍 当我们在做查询时,经常会遇到如查询限定行数或分页查询的需求,MySQL中可以使用LIMIT子句完成,在MSSQL中可以使用TOP子句完成,那么在Oracle中,我们如何实现呢? Oracle提供了一个rownum的伪列,它会根据返回记录生成一个序列化的数字. rownum和rowid都是伪列,但是两者的根本是不同的.rownum是根据SQL查询出的结果给每行分配一个逻辑编号,所以SQL不同也就会导致最终rownum不同:rowid是物理结构上的,在每条记录INSERT到数据库中时,都

如何在Oracle 12C中添加多个分区 (Doc ID 1482456.1)

How to Add Multiple Partitions in Oracle 12C (Doc ID 1482456.1) APPLIES TO: Oracle Database - Enterprise Edition - Version 12.1.0.1 and laterOracle Database Exadata Cloud Machine - Version N/A and laterOracle Cloud Infrastructure - Database Service -

Oracle 12C中pga_aggregate_limit参数的修改

应用某个批量无法正常进行,通过报错排查是由于在12c中参数pga_aggregate_limit参数的限制导致,此参数限制为硬性限制.此参数的修改非常简单,修改之后立即生效,需要注意的是此处CDB.PDB的pga_aggregate_limit参数都做了限制,调整的时候都做了调整. [dayu1:oracle]:/oracle/app/oracle/diag/rdbms/cluacdb/CLUACDB1/trace>sqlplus / as sysdba SQL*Plus: Release 12

oracle 12c 中scott账户与表问题

之前安装了12c版本,最近做练习发现怎么没有scott用户和11g自带的emp,dept等等的表.于是尝试解锁用户,发现用户不存在 SQL> alter user scott account unlock; alter user scott account unlock            * ERROR at line 1: ORA-01918: user 'SCOTT' does not exist 手动创建用户,出错,和11g不太一样 SQL> create user scott id

oracle 12c中导入dmp数据文件步骤

oracle版本为12c的导入步骤:1.新建用户:CREATE USER c##zj_szda IDENTIFIED BY zjdaszda DEFAULT TABLESPACE USERS QUOTA 50M ON USERS; 2.授予dba权限给zj_szdagrant dba to zj_szda 3.导入szda.dmp文件$imp c##zj_szda/zjdaszda fromuser=zj_szda touser=c##zj_szda file=f:/szda.dmp 注:1.c

oracle 12c中的隐含列

Invisible Columns 使用select * from ,desc 等看不到该列, DROP TABLE tab1 PURGE; CREATE TABLE tab1 ( id NUMBER, description VARCHAR2(50) INVISIBLE ); DESC tab1; Name Null? Type ----------------------------------------- -------- ---------------------------- ID

Oracle 12c创建用户是出现“ORA-65096: invalid common user or role name”的错误

这篇文章主要介绍CDB和PDB的基本管理,资料来源oracle官方. 基本概念: Multitenant Environment:多租户环境 CDB(Container Database):数据库容器 PD(Pluggable Database):可插拔数据库 CDB与PDB关系图 COMMON USERS(普通用户):经常建立在CDB层,用户名以C##或c##开头: LOCAL USERS(本地用户):仅建立在PDB层,建立的时候得指定CONTAINER. 在oracle 12c中,使用了一个