`
lhw0531
  • 浏览: 8786 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

在oracle里使用UTL_RAW做汇总【转载】

阅读更多

我有一个表用来反映在不同时段下几个商店对某个物品的销售情况, 
period_key   item_key store_key

19980104     1      1
19980104     1      2
19980104     2      1
19980104     2      3
19990104     2      1
19990104     2      3

我主要想知道几个时段内物品在几家店有售。一般都用下面的sql来做
select count(distinct store_key)  from *
where period_key between ? and ?
and item_key =?


但数据太多, 统计时间太长, 所以想建一个汇总表来减少数据量. 象这样

period_key    item_key  distinct_store_key
19990104     1        1,2,5,7,9
20010104     2        2,5,6,8
..

但用distinct_store_key来找distinct count, 是字符操做, 也太慢, 我想把distinct_store_key变成其它格式, 下面用bit和位置来代表distinct_store_key

这样
{1,2,5,7,9} --> 101010011
{2,5,6,8} --> 010110010

然后进行或操作。

基本上,你的primary key有多少种取值可能,你用来代表这个table的数在二进制下就有多少位

UTL_RAW里有个函数BIT_OR很有用,我先把不同时段的store key放到一table的string字段里, 然后每次统计时用UTL_RAW.BIT_OR来得出几个时段中store key的并集, 再计算出并集中的count.

procedure test_raw_or IS
lvc_cursor ref_cursor;
lvn_counter BINARY_INTEGER;
lvs_a varchar2(4000);
RAW_a RAW(4000);
RAW_b RAW(4000);
RAW_c RAW(4000);
begin

OPEN lvc_cursor FOR
select bitmap_data from yh_bitmap;

lvn_counter := 0;
lvs_a := '';
LOOP
EXIT WHEN lvc_cursor%NOTFOUND;
lvn_counter := lvn_counter + 1;

FETCH lvc_cursor
INTO lvs_a;
RAW_a := UTL_RAW.CAST_TO_RAW(lvs_a);
if lvn_counter > 1 then
RAW_c := UTL_RAW.BIT_OR(RAW_a, RAW_b);
RAW_b := RAW_c;
else
RAW_b := RAW_a;
end if;

END LOOP;
CLOSE lvc_cursor;

insert into yh_calc_bitmap values (UTL_RAW.CAST_TO_varchar2(RAW_c));
commit;

end;

UTL_RAW.BIT_OR执行速度很快

分享到:
评论

相关推荐

    通过ORACLE的UTL_HTTP工具包发送包含POST参数的请求

    在Oracle环境中,经常需要与外部系统进行交互,特别是在需要从Web服务器获取数据或向其发送数据的情况下。`UTL_HTTP`是Oracle提供的一款强大工具包,它允许用户通过SQL和PL/SQL编写程序来调用HTTP协议,实现与Web...

    oracle plsql 通过utl_http调用 webservice

    Oracle PL/SQL是一种在Oracle数据库中编写存储过程和函数的语言,它结合了SQL的数据库操作能力和PL/SQL的编程灵活性。在本示例中,我们将深入探讨如何利用UTL_HTTP包来调用Web Service,这是一个非常实用的功能,...

    oracle注入utl_http方法.doc

    Oracle 注入 utl_http 方法是指攻击者使用 Oracle 数据库的 UTL_HTTP 包来实现注入攻击的方法。UTL_HTTP 是 Oracle 提供的一个包,用于通过 HTTP 协议从远程服务器获取数据。攻击者可以使用 UTL_HTTP 包来注入恶意...

    oracle utl_file包的用法

    然而,使用`UTL_FILE`包前,需确保数据库用户拥有足够的操作系统权限,并且在`init.ora`文件中正确配置了`UTL_FILE_DIR`参数。 #### 创建文件目录 在使用`UTL_FILE`之前,必须首先创建一个数据库目录对象。这可以...

    oralce plsql 使用utl_tcp实现上传文件的功能

    Oracle PL/SQL是一种强大的数据库编程语言,它允许开发者在数据库级别执行复杂的业务逻辑。UTL_TCP是Oracle提供的一种实用程序包,用于处理TCP/IP网络通信。在这个场景中,我们将探讨如何利用UTL_TCP来实现文件的...

    Oracle UTL_FILE的使用

    Oracle学习]ORACLE的UTL_FILE包简析 包UTL_FIle用于读写操作系统的文件,前提是首先创建Directory对象、授权。然后就可以使用UTL_FILE包中提供的类型、过程、函数来读取

    在oracle9i中设置utl_file_dir参数.txt

    在Oracle 9i数据库系统中,`UTL_FILE_DIR`参数是用于控制PL/SQL程序在执行时可以访问的文件目录的重要配置项。这个参数的设置对于实现数据的读写操作、日志记录以及与其他文件系统的交互至关重要。下面将详细探讨...

    ORACLE使用UTL_FILE记录日志简介

    Oracle数据库系统提供了丰富的内置工具和包,以满足各种复杂的需求,其中之一就是UTL_FILE包,它允许我们在PL/SQL程序中直接操作文件,包括读取、写入和管理文件。这篇博客将深入介绍如何利用UTL_FILE在Oracle中记录...

    utl_http.request包探测基本信息.txt

    根据提供的文件信息,我们可以推断出此文档与Oracle数据库中的UTL_HTTP包有关,并涉及到如何利用该包进行一些基本信息的探测。以下将详细介绍UTL_HTTP包的基本概念、用途以及示例代码中的具体应用场景。 ### UTL_...

    UTL_FILE用法详解

    UTL_FILE 用法详解 UTL_FILE 是 Oracle 数据库中提供的一个包,提供了在操作系统层面上对...使用 UTL_FILE 的优点是可以在 Oracle 数据库中直接操作文件系统,但是需要注意文件权限和路径的正确性,以避免异常的发生。

    utl_file包介绍

    Oracle UTL_FILE 包概述 UTL_FILE 包是 Oracle 提供的一个文件操作包,主要用于读写文件和目录。该包的应用非常广泛,且非常实用,因为 Oracle 虽然有 SQL*Loader 可以将文本的内容读到数据库里,但是不能将数据库...

    oracle利用UTL-HTTP包访问SOAP、HTTP接口并通过管道函数解析xml响应文件用游标以表方式输出

    ### Oracle 使用 UTL_HTTP 访问 SOAP/HTTP 接口并解析 XML 响应 #### 一、使用 utl_http 包之前需要做的数据库配置 为了确保 Oracle 数据库能够通过网络进行 HTTP 请求,首先需要对数据库进行一些配置,具体包括...

    oracle 范文http request接口获取XML,创建表 并把样例结果入库

    13 l_r:=l_r||utl_raw.cast_to_varchar2(l_raw); 14 end loop; 15 utl_http.end_response(http_resp); 16 exception 17 when utl_http.end_of_body then 18 utl_http.end_response(http_resp); 19 end; 20 return l_...

    oracle中utl_file包读写文件操作实例学习

    首先,要在Oracle中使用UTL_FILE,需要创建一个DIRECTORY对象,这实际上是Oracle数据库对操作系统目录的一个引用。在创建directory对象后,必须将其权限授予相应的用户,以便他们可以访问和操作目录下的文件。例如:...

    Oracle P/L SQL实现文件压缩、解压功能(最新版)

    这个"Oracle P/L SQL实现文件压缩、解压功能"的资源,包含了一个名为`UTL_ZIP.plb`的PL/SQL包体以及一个`ZIP包头说明和调用例子.txt`的文本文件,这将帮助我们理解如何在Oracle环境中处理ZIP文件。 `UTL_ZIP`是...

    utl_mail_scheduler

    通过UTL_MAIL,开发人员可以在Oracle环境中轻松实现邮件通知功能,这对于系统监控、错误报告及日常业务处理都非常有用。 ##### 安装与配置UTL_MAIL 1. **SMTP服务器设置** - 首先,需要正确配置SMTP服务器参数。...

    UTL_FILE操作文件代码

    这段代码展示了如何使用Oracle的UTL_FILE包来处理文件的读写操作,并且能够将文件内容存储到数据库的BLOB字段中。下面将对各个部分进行详细解读。 ### UTL_FILE简介 UTL_FILE是Oracle提供的一个用于文件I/O操作的...

    utl_tcp.zip

    delphi7做Socket的服务器端,oracle的utl_tcp做Socket的Cliient端.Utl_tcp向server发送信息,并从Server端接收反馈。utl_tcp在PL/SQL Developer 中实现。全部源码。

    oracle 触发器实时调用java 中http接口

    在Oracle数据库中,触发器是一种特殊类型的存储过程,它会在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行。在这个场景中,我们关注的是一个特定的触发器,它在插入数据后被调用,并通过存储过程来...

    utl_file.txt

    现在建议使用`CREATE DIRECTORY`特性来替代`UTL_FILE_DIR`,这不仅提供了更多的灵活性和细粒度控制,还与Oracle的其他工具保持一致,且可以在不停机的情况下动态维护。 #### 文件所有权与保护 在UNIX系统上,由`...

Global site tag (gtag.js) - Google Analytics