`

oracle随机取行

阅读更多

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 中抽取随机数是许多应用场景中常见的问题,例如在某个活动中需要随机取出一些符合条件的用户,以颁发获奖通知或其它消息。本文将通过实例讲解如何抽取随机数的多种方法。 首先,我们可以使用 Oracle 自带...

    oracle取随机数

    Oracle也提供了生成随机字符串的功能,主要通过`DBMS_RANDOM.STRING`函数实现,该函数接受两个参数:字符类型(如可打印字符)和长度。 ```sql SELECT DBMS_RANDOM.STRING('P', 20) FROM DUAL; ``` 其中,'P'代表...

    oracle中随机数的获取

    在Oracle数据库中,生成随机数是一项常见的需求,特别是在数据测试、模拟或数据分析场景中。本文将详细介绍如何在Oracle SQL中获取各种类型的随机数。 首先,Oracle提供了一个内置的函数DBMS_RANDOM,它包含了一...

    Oracle数据库操作

    3. **子程序_随机取汉字**: 如果应用程序需要生成随机的汉字字符串,可以使用Oracle的内置函数或者自定义过程来实现。一种可能的方法是利用DBMS_RANDOM包中的STRING函数结合字符集范围来随机选择汉字。同时,需要...

    oracle函数得到下一个法定工作日期

    在Oracle数据库中,获取下一个法定工作日期是一个常见的需求,尤其在进行日程安排或业务处理时。本篇文章将深入探讨如何使用Oracle内置函数以及自定义函数来实现这一功能。我们将结合具体的代码示例来理解这一过程。...

    随机获取oracle数据库中的任意一行数据(rownum)示例介绍

    Oracle数据库中的`ROWNUM`是一个非常实用的特性,它为查询结果集的每一行赋予一个唯一的数字标识,从1开始递增。这个标识符在查询过程中动态生成,并且与表中的实际行没有直接关联,因此它不是一个真正的列,不能与...

    数据库查询排序使用随机排序结果示例(Oracle/MySQL/MS SQL Server)

    Oracle查询结果集,随机排序 代码如下:select * from table1 order by dbms_random.value(); MySQL随机查询出一条记录: 代码如下: — 下面的查询语句效率高,不要使用 SELECT * FROM table1 ORDER BY rand() LIMIT ...

    为oracle调整和优化linux

    Oracle数据库在企业级应用中扮演着至关重要的角色,而其性能和稳定性往往取决于运行它的操作系统。对于基于Linux的Oracle系统,调整和优化Linux环境可以显著提升Oracle的可用性和可靠性。本文将针对Red Hat ...

    SQL随机提取N条记录

    随机抽取大量数据时,使用RAND()函数可能会导致性能问题,因为它会为表中的每行计算一个随机值。为优化性能,可以尝试在WHERE子句中添加条件,减少需要排序的行数。 7. **分页和随机性**: 如果你需要从特定位置...

    oracle ebs开发文档

    - **随机取前10条不同的记录**:通过组合使用 ROWNUM 和 SELECT DISTINCT 来实现。 - **TRUNC函数**:用于去除小数部分。 - **修改表的一些常用语法**:如 ADD、MODIFY 和 DROP 等,用于表结构的修改。 - **舍入函数...

    Oracle 汉字拼音简码获取

    其中,将汉字转换为其拼音简码(即取每个汉字拼音的首字母)是常见的需求之一,尤其是在数据检索、排序或创建基于拼音的索引时。本文将详细介绍Oracle数据库中实现这一功能的方法,包括函数的结构、工作原理以及实际...

    取不重复的N个随机数

    随机函数的用法,数组的用法,GOTO语句的用法

    ORACLEEBS_FORM

    - **随机取前10条不同的记录**:介绍了一种获取随机样本的方法。 - **修改表的一些常用语法**:包括添加、删除字段等操作。 - **舍入函数**:如`round`等函数用于数值处理。 - **实现类似 BREAK 语句**:虽然SQL...

    Oracle EBS 开发笔记

    - **随机取前10条不同的记录**:随机抽取数据样本。 - **TRUNC函数**:截断日期或数值。 - **修改表的一些常用语法**:SQL语句用于表结构的修改。 - **舍入函数**:对数值进行四舍五入操作。 - **实现类似BREAK...

    oracle例程高级应用窗口

    再来说说"子程序_随机取汉字"。在处理中文字符时,这个子程序可能是为了生成随机的汉字字符串,这在测试、数据填充或生成模拟数据时非常有用。它可能利用了Oracle的内置函数或者创建了一个自定义的函数,通过选择...

    SQLServer和Oracle的常用函数对比.docx

    - Oracle: `DBMS_RANDOM.VALUE(0,1)` 返回[0,1)的随机浮点数。 13. **取符号** - SQL Server 和 Oracle: 都有 `SIGN` 函数,如 `SIGN(-8)` 返回-1表示负数。 **数学函数** 14. **圆周率** - SQL Server: 可以...

    SQL Server和Oracle常用函数对比

    - SQL Server: `RAND()` 生成一个 [0,1) 区间的随机浮点数。 - Oracle: `DBMS_RANDOM.VALUE(0,1)` 生成相同区间内的随机数。 13. **取符号**: - SQL Server: `SIGN(-8)` 返回符号值 -1。 - Oracle: `SIGN(-8)`...

    Oracle应用常见傻瓜问题 1000问

    Oracle版本的位数主要取决于安装时选择的操作系统版本。一般来说,64位版本可以在64位操作系统上安装,而32位版本则只能安装在32位操作系统上。可以通过查看`$ORACLE_HOME/network/admin/listener.ora`文件或者在SQL...

Global site tag (gtag.js) - Google Analytics