Oracle访问数据的基本方法有:
1.全表扫描
2.采样表扫描
全表扫描(Full table Scan)
全表扫描返回表中所有的记录。
执行全表扫描,Oracle读表中的所有记录,考查每一行是否满足WHERE条件。Oracle顺序的读分配给该表的每一个数据块,这样全表扫描能够受益于多块读.
每个数据块Oracle只读一次.
采样表扫描(sample table scan)
采样表扫描返回表中随机采样数据。
这种访问方式需要在FROM语句中包含SAMPLE选项或者SAMPLE BLOCK选项.
SAMPLE选项: 当按行采样来执行一个采样表扫描时,Oracle从表中读取特定百分比的记录,并判断是否满足WHERE子句以返回结果。
使用采样扫描方式,会自动触发oracle的优化器CBO。
100万数据,使用 sample方式时 平均15-31毫秒就可以返回记录,而使用order by dbms_random.random则平均需要400毫秒
SELECT accountnumber, batchno, sequence FROM e_pin WHERE sequence= (SELECT sequence FROM (SELECT sequence FROM e_pin WHERE salecardflag='0' AND rownum<1000 ORDER BY dbms_random.random) WHERE rownum=1); SELECT accountnumber, batchno, sequence FROM e_pin sample(10) where salecardflag='0' and rownum<=1;
存储过程:
CREATE OR REPLACE PROCEDURE p_e_pin( i_result OUT NUMBER, s_accountnumber OUT VARCHAR2, s_batchno OUT VARCHAR2, s_sequence OUT VARCHAR2 ) AS no_evoucher EXCEPTION; BEGIN i_result:=0; BEGIN SELECT accountnumber, batchno, sequence INTO s_accountnumber, s_batchno, s_sequence FROM u_uvc_evoucher sample(10) where salecardflag='0' and rownum<=1 FOR UPDATE skip locked; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE no_evoucher; END; UPDATE e_pin SET salecardflag='4' WHERE sequence = s_sequence AND salecardflag='0'; IF SQL%NOTFOUND THEN RAISE no_evoucher; END IF; COMMIT; EXCEPTION WHEN no_evoucher THEN i_result:=-1; s_accountnumber:=''; s_batchno:=''; s_sequence:=''; ROLLBACK; END p_e_pin; /
相关推荐
Oracle 里取随机数的几种具体的方法 Oracle 是一个功能强大的关系数据库管理系统,它提供了多种方法来生成随机数。随机数生成是许多应用程序的重要组件,例如抽奖活动、验证码生成、密码生成等。在本文中,我们将...
在 Oracle 中抽取随机数是许多应用场景中常见的问题,例如在某个活动中需要随机取出一些符合条件的用户,以颁发获奖通知或其它消息。本文将通过实例讲解如何抽取随机数的多种方法。 首先,我们可以使用 Oracle 自带...
Oracle也提供了生成随机字符串的功能,主要通过`DBMS_RANDOM.STRING`函数实现,该函数接受两个参数:字符类型(如可打印字符)和长度。 ```sql SELECT DBMS_RANDOM.STRING('P', 20) FROM DUAL; ``` 其中,'P'代表...
在Oracle数据库中,生成随机数是一项常见的需求,特别是在数据测试、模拟或数据分析场景中。本文将详细介绍如何在Oracle SQL中获取各种类型的随机数。 首先,Oracle提供了一个内置的函数DBMS_RANDOM,它包含了一...
3. **子程序_随机取汉字**: 如果应用程序需要生成随机的汉字字符串,可以使用Oracle的内置函数或者自定义过程来实现。一种可能的方法是利用DBMS_RANDOM包中的STRING函数结合字符集范围来随机选择汉字。同时,需要...
在Oracle数据库中,获取下一个法定工作日期是一个常见的需求,尤其在进行日程安排或业务处理时。本篇文章将深入探讨如何使用Oracle内置函数以及自定义函数来实现这一功能。我们将结合具体的代码示例来理解这一过程。...
Oracle数据库中的`ROWNUM`是一个非常实用的特性,它为查询结果集的每一行赋予一个唯一的数字标识,从1开始递增。这个标识符在查询过程中动态生成,并且与表中的实际行没有直接关联,因此它不是一个真正的列,不能与...
Oracle查询结果集,随机排序 代码如下:select * from table1 order by dbms_random.value(); MySQL随机查询出一条记录: 代码如下: — 下面的查询语句效率高,不要使用 SELECT * FROM table1 ORDER BY rand() LIMIT ...
Oracle数据库在企业级应用中扮演着至关重要的角色,而其性能和稳定性往往取决于运行它的操作系统。对于基于Linux的Oracle系统,调整和优化Linux环境可以显著提升Oracle的可用性和可靠性。本文将针对Red Hat ...
随机抽取大量数据时,使用RAND()函数可能会导致性能问题,因为它会为表中的每行计算一个随机值。为优化性能,可以尝试在WHERE子句中添加条件,减少需要排序的行数。 7. **分页和随机性**: 如果你需要从特定位置...
- **随机取前10条不同的记录**:通过组合使用 ROWNUM 和 SELECT DISTINCT 来实现。 - **TRUNC函数**:用于去除小数部分。 - **修改表的一些常用语法**:如 ADD、MODIFY 和 DROP 等,用于表结构的修改。 - **舍入函数...
其中,将汉字转换为其拼音简码(即取每个汉字拼音的首字母)是常见的需求之一,尤其是在数据检索、排序或创建基于拼音的索引时。本文将详细介绍Oracle数据库中实现这一功能的方法,包括函数的结构、工作原理以及实际...
随机函数的用法,数组的用法,GOTO语句的用法
- **随机取前10条不同的记录**:介绍了一种获取随机样本的方法。 - **修改表的一些常用语法**:包括添加、删除字段等操作。 - **舍入函数**:如`round`等函数用于数值处理。 - **实现类似 BREAK 语句**:虽然SQL...
- **随机取前10条不同的记录**:随机抽取数据样本。 - **TRUNC函数**:截断日期或数值。 - **修改表的一些常用语法**:SQL语句用于表结构的修改。 - **舍入函数**:对数值进行四舍五入操作。 - **实现类似BREAK...
再来说说"子程序_随机取汉字"。在处理中文字符时,这个子程序可能是为了生成随机的汉字字符串,这在测试、数据填充或生成模拟数据时非常有用。它可能利用了Oracle的内置函数或者创建了一个自定义的函数,通过选择...
- Oracle: `DBMS_RANDOM.VALUE(0,1)` 返回[0,1)的随机浮点数。 13. **取符号** - SQL Server 和 Oracle: 都有 `SIGN` 函数,如 `SIGN(-8)` 返回-1表示负数。 **数学函数** 14. **圆周率** - SQL Server: 可以...
- SQL Server: `RAND()` 生成一个 [0,1) 区间的随机浮点数。 - Oracle: `DBMS_RANDOM.VALUE(0,1)` 生成相同区间内的随机数。 13. **取符号**: - SQL Server: `SIGN(-8)` 返回符号值 -1。 - Oracle: `SIGN(-8)`...
Oracle版本的位数主要取决于安装时选择的操作系统版本。一般来说,64位版本可以在64位操作系统上安装,而32位版本则只能安装在32位操作系统上。可以通过查看`$ORACLE_HOME/network/admin/listener.ora`文件或者在SQL...