内存表
我们知道, 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
分享到:
相关推荐
VirtualDAC v10.5.13 源码免安装版【内存表数据库访问组件】,该公司的系列产品都是好贵好贵但很好用!著名的数据访问组件厂家Devart公司,该公司其他产品有:UniDAC、ODAC,这下子你就懂了吧...。Virtual Data ...
delphi 内存表FDMemTable1
DELPHI XE 10 使用内存表的仓库标签打印源码,使用ReportMachine控件做的报表,带二维码显示
演示在Delphi上使用内存表存储数据的例子。TdxMemData 属于DevExpressVcl控件,TVirtualTable属于UniDAC控件,TFDMemTable属于FireDAC控件。经过测试证明,TFDMemTable性能最好!
内存表,运行速度优于kbmem,最重要的是支持SQL语句,懂行的拿去吧。
内存表操作,帮助大家学习,更好地为开发人员带来方便
内存表数据结构是指在内存中建立类似传统关系数据库管理系统(ORCALE、MS SQL SERVER)建立的表,区别在于内存表中的所有记录数据和索引数据都保存在内存,其中有序HASH内存表的索引采用有序HASH树数据结构,关于有序...
1)SQLMemTable_Thread多线程读写同一个内存表 2)启动时读取数据SMemDB.db 3)退出时保存数据SMemDB.db 4)循环操作中.两个线程写入,两个线程读取 注意:用到BMDThread控件,DBGridEh控件
该程序代码可以将内存表(Datatable)内的数据导出到外部Access内,外部的Access可以是现存的,或者是通过程序新建,然后将数据导出到数据库中的表内。该程序调试对相关的方法进行了时间的测定,可以对相关的方法...
window7小工具,很闹找的cpu内存小工具很好用
delphi内存表FDMemTable
利用delphi中的内存表来制作主从表,可以替代access或sqlserver
1.用途:用以实现任意TDataSet转换成JSON格式,并将JSON文本转成Unidac的内存表TVirtualTable 2.需引用的第三方控件:Unidac,QJSON 3.说明: 3.1.本单元不是处理TClientDataSet,可将TClientDataSet转成JOSN,反向...
内存表数据结构是指在内存中建立类似传统关系数据库管理系统(ORCALE、MS SQL SERVER)建立的表,区别在于内存表中的所有记录数据和索引数据都保存在内存. 本附加包括:动态库、头文件、用户文档、demo。
通过在规则引擎中引入内存表格的对象,我们可以把常用的数据字典类数据直接保存在内存中,这样在规则中 我们直接来访问内存中的数据,提高规则的执行效率,也可以把数据库中的数据读取出来,然后存储在内存表中,...
通过读取xml文件,来自动建表,内存表和硬盘表。代码在window和liunx下通用。 对已经有的表如果同名同数据库,可以自动检测并补上字段。主键是不自动的,sqlite自身机制的缺陷性。
FDMemTable内存表操作.rar
Delphi7-SQLMemTable 多线程 同时 修改内存表(SQLMemTable)例子
使用原生ADO+DataSet内存表进行分页显示.docx
总结 创建用时 Hash=list 内存表 读取用时 json 内存表 <list