一个Oracle自定义聚集函数的例子
前天有人提了需求,想对某个字段进行按位的或操作。本来建议查询出来之后在应用程序里面处理,但是数据量比较大,觉得还是返回一个分组计算之后的值比较合适。
两个问题,一个是按为或的操作,这个参考了别人的文档,用bitand函数实现。 原文如下:
http://blog.chinahr.com/blog/hewy0526/post/112968
然后就是自定义的聚集函数了。这个参考了官方文档的例子,就不列出原文出处了。
全部代码如下:
-- 1. Implement the type BitOrImpl to contain the ODCIAggregate routines:
create type BitOrImpl as object
(
bitorval NUMBER, -- result.
static function ODCIAggregateInitialize(sctx IN OUT BitOrImpl)
return number,
member function ODCIAggregateIterate(self IN OUT BitOrImpl,
value IN number) return number,
member function ODCIAggregateTerminate(self IN BitOrImpl,
returnValue OUT number, flags IN number) return number,
member function ODCIAggregateMerge(self IN OUT BitOrImpl,
ctx2 IN BitOrImpl) return number
);
/
-- 2. mplement the type body for BitOrImpl:
create or replace type body BitOrImpl is
static function ODCIAggregateInitialize(sctx IN OUT BitOrImpl)
return number is
begin
sctx := BitOrImpl(0);
return ODCIConst.Success;
end;
member function ODCIAggregateIterate(self IN OUT BitOrImpl, value IN number) return number is
begin
self.bitorval := (self.bitorval + value) - bitand(self.bitorval, value);
return ODCIConst.Success;
end;
member function ODCIAggregateTerminate(self IN BitOrImpl,
returnValue OUT number, flags IN number) return number is
begin
returnValue := self.bitorval;
return ODCIConst.Success;
end;
member function ODCIAggregateMerge(self IN OUT BitOrImpl, ctx2 IN BitOrImpl) return number is
begin
self.bitorval := (self.bitorval + ctx2.bitorval) - bitand(self.bitorval, ctx2.bitorval);
return ODCIConst.Success;
end;
end;
/
-- 3. Create the user-defi
相关文档:
SVRMGR> select * from dba_jobs;
初始化相关参数job_queue_processes
alter system set job_queue_processes=39 scope=spfile;//最大值不能超过1000 ;job_queue_interval = 10 //调度作业刷新频率秒为单位
DBA_JOBS describes all jobs in the database.
USER_JOBS describes all jobs owned by the c ......
sql server
替换null:isnull(arg,value)
如:select isnull(price,0.0) from orders ,如果price为null的话,用0 ......
declare
n number(10);
tsql varchar2(100);
begin
select test_seq.nextval into n from dual;
n:=-(n-1);
tsql:='alter ......
一. Oracle 控制文件主要包含如下条目
DATABASE ENTRY
CHECKPOINT PROGRESS RECORDS
REDO THREAD RECORDS
LOG FILE RECORDS
DATA FILE RECORDS
TEMP FILE RECORDS
TABLESPACE RECORDS
LOG FILE HISTORY RECORDS
OFFLINE RANGE RECORDS
ARCHIVED LOG RECORDS
BACKUP SET RECORDS
BACKUP PIECE RECORD ......
在ORACLE里如果遇到特别大的表,可以使用分区的表来改变其应用程序的性能。
1.1 分区表PARTITION table
在ORACLE里如果遇到特别大的表,可以使用分区的表来改变其应用程序的性能。
1.1.1 分区表的建立:
某公司的每年产生巨大的销售记录,DBA向公司建议每季度的数据放在一个分区内,以下示范的是该公司1999年的数据( ......