`
winie
  • 浏览: 223299 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

内存表

阅读更多

内存表
我们知道, oracle, sqlserver等关系数据库最善于处理的数据类型是集合, 而不是单独的记录. 同样的100条记录, 如果逐条循环处理和批量处理其效率的差别将是几何单位的.

所以, 为了提高查询效率, 我们这里考虑将给定的客户字符串转变为一个集合或者临时表来处理. Oracle使用全局临时表和复杂数据类型集合来支持这一点.

这里我们介绍一下使用复杂数据类型集合来处理的方式.

首先我们定义一个复杂类型.

create or replace type ctl.type_jax_varc2tab is table of varchar2(2000);

然后定义一个函数实现将给定的字符串转换为嵌套内存表.

CREATE OR REPLACE FUNCTION f_jax_str2tab(p_str IN VARCHAR2,
p_sep varchar2 default ','
) RETURN ctl.type_jax_varc2tab IS
  /******************************************************************
  Ver1.0 Created by jaxzhang on 2009-06-08
  把字符串(1*2*3*4*5)转换为内存表形式
  create or replace type type_jax_varc2tab is table of varchar2(2000);
  测试用例:SELECT * FROM TABLE(f_jax_str2tab('1*2*3*4*5','*'));
  ******************************************************************/
  v_str varchar2(2000);
  v_cnt NUMBER ;
  v_numtab type_jax_varc2tab := type_jax_varc2tab(); --返回内存表
BEGIN
  select decode(substr(p_str,-1),p_sep,p_str,p_str || p_sep) into v_str from dual;
  select  length(v_str) - length(REPLACE(v_str, p_sep)) into v_cnt from dual;

  FOR i IN 1 .. v_cnt LOOP
    v_numtab.EXTEND;
    v_numtab(i) := substr(v_str, 1, instr(v_str, p_sep) - 1);
    v_str := substr(v_str, instr(v_str,p_sep) + 1);
  END LOOP;

  RETURN v_numtab;
EXCEPTION
  WHEN OTHERS THEN
    v_numtab.DELETE;
END;
上述函数的功能就是要将类似于’客户1,客户2,客户3’的字符串转换为如下形式.

SELECT * FROM TABLE(f_jax_str2tab('客户1,客户2,客户3',','));

COLUMN_VALUE
 
客户1
 
客户2
 
客户3
 

得到上述的内存表之后, 我们就可以使用类似于一个表或者视图的方式来与正式表t_order_cust关联得到我们需要的查询结果.

Select /*+ ordered use_nl(a b)*/

  From TABLE(f_jax_str2tab('客户1,客户2,客户3',',')) a,

        T_order_cust b

   Where b.o_customer = a.column_value

 



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/47522341/archive/2009/06/10/4257755.aspx

分享到:
评论

相关推荐

    利用delphi中的内存表来制作主从表

    在Delphi编程环境中,内存表(TClientDataSet)是一种非常实用的数据处理工具,它可以在内存中存储和操作数据,无需连接到数据库服务器。利用TClientDataSet制作主从表是数据库应用设计中的常见方法,可以有效地管理...

    内存表操作(帮助大家学习)

    内存表操作是数据库管理系统中的一个重要概念,特别是在进行高效数据处理和分析时。内存表,也称为内存中的数据结构,是指将数据存储在计算机的主内存中,而不是传统的磁盘存储。这种方式可以显著提高数据访问速度,...

    DELPHI XE 10使用内存表的仓库标签打印源码 报表带二维码显示

    在DELPHI XE 10的开发环境中,内存表(Memory Table)是一种非常实用的数据容器,它允许开发者在不依赖数据库的情况下存储和处理数据。内存表的优势在于其灵活性和速度,尤其适合小规模的数据处理或者临时数据的存储...

    memSQL内存表控件

    【标题】"memSQL内存表控件"是一个专为Delphi开发者设计的高效数据库解决方案,其核心特性在于它能够在内存中创建和管理表,从而提供比传统的基于硬盘的数据库系统如kbmem更快的运行速度。由于它支持SQL(结构化查询...

    delphi 内存表FDMemTable1

    FireDAC(Firebird Data Access Components)是Embarcadero开发的一个全面的数据访问框架,旨在提供高效、低延迟的数据访问,支持多种数据库系统...限于SQL Server、Oracle、MySQL、PostgreSQL以及本地数据存储如内存表...

    Delphi内存表使用(TdxMemData,TVirtualTable,TFDMemTable)例子.

    Delphi内存表使用(TdxMemData,TVirtualTable,TFDMemTable)例子.演示在Delphi上使用内存表存储数据的例子。TdxMemData 属于DevExpressVcl控件,TVirtualTable属于UniDAC控件,TFDMemTable属于FireDAC控件。经过测试...

    VirtualDAC v10.5.13 源码免安装版【超贵好用的内存表数据库访问组件】

    VirtualDAC v10.5.13 源码免安装版【内存表数据库访问组件】,该公司的系列产品都是好贵好贵但很好用!著名的数据访问组件厂家Devart公司,该公司其他产品有:UniDAC、ODAC,这下子你就懂了吧...。Virtual Data ...

    Delphi内存表使用(TdxMemData,TVirtualTable,TFDMemTable)例子.rar

    演示在Delphi上使用内存表存储数据的例子。TdxMemData 属于DevExpressVcl控件,TVirtualTable属于UniDAC控件,TFDMemTable属于FireDAC控件。经过测试证明,TFDMemTable性能最好!

    delphi 7 SQLMemTable_Thread多线程读写同一个内存表

    1)SQLMemTable_Thread多线程读写同一个内存表 2)启动时读取数据SMemDB.db 3)退出时保存数据SMemDB.db 4)循环操作中.两个线程写入,两个线程读取 注意:用到BMDThread控件,DBGridEh控件

    有序HASH内存表 win32 SDK V2.0

    内存表数据结构是指在内存中建立类似传统关系数据库管理系统(ORCALE、MS SQL SERVER)建立的表,区别在于内存表中的所有记录数据和索引数据都保存在内存,其中有序HASH内存表的索引采用有序HASH树数据结构,关于有序...

    Datatable内存表数据导出到Access

    该程序代码可以将内存表(Datatable)内的数据导出到外部Access内,外部的Access可以是现存的,或者是通过程序新建,然后将数据导出到数据库中的表内。该程序调试对相关的方法进行了时间的测定,可以对相关的方法...

    delphi内存表FDMemTable

    Delphi内存表FDMemTable是Embarcadero Delphi编程环境中用于处理内存数据的一个重要组件。它属于FireDAC库的一部分,FireDAC是Delphi提供的一个高效、全面的数据访问层,支持多种数据库系统。FDMemTable允许开发人员...

    sqlite3 window和liunx通过读取xml自动建内存表和硬盘表

    这个场景中,我们讨论的是如何在Windows和Linux环境下利用SQLite3通过读取XML文件自动生成内存表和硬盘表。 首先,XML文件是一种结构化的数据存储格式,通常用于数据交换或配置。在本例中,XML文件`collect_5k_...

    内存表,,json,Tstringlset查询速度比较.rar

    本话题主要关注内存表、JSON以及TStringList在查询速度方面的对比。以下是对这些概念的详细解析和它们在实际应用中的表现。 首先,我们来看“内存表”。内存表,通常指的是在程序运行时存储在内存中的数据结构,...

    3-SMCL通讯协议、内存表及规格书-20200904

    这份20200904版的文档详细介绍了该协议的原理、内存表结构以及相关规格书,帮助开发者更好地理解和应用这一技术。 首先,3-SMCL(可能代表3rd Generation Servo Motor Communication Language,第三代伺服电机通信...

    同一个内存表中进行目录树分层显示

    在IT领域,尤其是在软件开发和用户界面设计中,"同一个内存表中进行目录树分层显示"是一个常见的需求。这通常涉及到数据结构和图形用户界面(GUI)的设计,特别是对于文件管理器、数据库浏览器或者复杂的软件工程...

    JSON_UniDac_内存表_Demo

    1.用途:用以实现任意TDataSet转换成JSON格式,并将JSON文本转成Unidac的内存表TVirtualTable 2.需引用的第三方控件:Unidac,QJSON 3.说明: 3.1.本单元不是处理TClientDataSet,可将TClientDataSet转成JOSN,反向...

    MySQL内存表的特性与使用介绍

    MySQL内存表,也称为HEAP表,是一种存储引擎,它将数据存储在内存中,以实现快速的读写操作。这种类型的表对于处理大量小规模数据的查询特别有用,因为它们能够利用内存的高速访问来提升性能。在MySQL中,内存表的...

    通用内存数据表 linux32 SDK V3.0

    内存表数据结构是指在内存中建立类似传统关系数据库管理系统(ORCALE、MS SQL SERVER)建立的表,区别在于内存表中的所有记录数据和索引数据都保存在内存. 本附加包括:动态库、头文件、用户文档、demo。

    规则引擎-内存计算表

    通过在规则引擎中引入内存表格的对象,我们可以把常用的数据字典类数据直接保存在内存中,这样在规则中 我们直接来访问内存中的数据,提高规则的执行效率,也可以把数据库中的数据读取出来,然后存储在内存表中,...

Global site tag (gtag.js) - Google Analytics