Author Archive
Saturday, September 13th, 2008
今天有个需求,要求把一个表里的根据一列(例如id)分组并且将每行的任意几列的数据挨着拼装在一起中间加特殊字符,
然后分组之后每个id对应的几行合成一条记录,例如:
SQL> select * from test;
P_ID NAME VALUE
---------- -------------------- --------------------
1 AAA aaa
2 BBB bbb
1 ABC abc
3 CCC ccc
2 DDD ddd
SQL> SELECT P_ID, Mystrcat_n(NAME||chr(01)||value) NAME FROM TEST GROUP BY P_ID;
P_ID
----------
NAME
--------------------------------------------------------------------------------
1
AAAaaaABCabc
2
BBBbbbDDDddd
3
CCCccc
寻求Sky.Jian(简朝阳)帮助,给我了一个他自己搞的一个函数,结果不满足我的要求,
在他的基础上修改一下,可以满足以上要求,中间是用chr(01)来分隔的,函数体如下:
(执行此函数到底消耗多少资源没有测试过)
create or replace type Mystrcat_new as object
(
str varchar2(4000),
static function ODCIAggregateInitialize(sctx IN OUT Mystrcat_new) return number,
member function ODCIAggregateIterate(self IN OUT Mystrcat_new,value IN varchar2) return ...
Posted in 大话技术 | 2 Comments »
Sunday, August 31st, 2008
<!-- @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } -->
个人认为科学技术之间存在一定的相关性的,先举一个例子,来比较浅显的了解一下latch的一些特点。下图为一张十字路口照片,来来往往的车辆就是靠十字路口的一个交通信号灯来指挥的,当然有时候也会有按照交通警察的指令来执行。
<!-- @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } -->
中国的交通,十字路口有交通信号灯,信号灯周期性的变化。当东西直行的信号灯是绿的时,东西方向的汽车可以行走,此时南北方向的车需要等待;当南北方向的信号灯是绿的时候,南北方向的车是可以行走的,东西方向的车要等待。当一个方向为绿灯时另一个方向一定是红灯,除非线路故障。看到这个图,我突然想到和latch很有一比,到底有多少呢,让我们一起看看下面几个问题:
1、那么信号灯是起一个什么作用呢?
告诉行使的车里和行人你能不能通过十字路口。
2、汽车等待的是什么?
汽车在等待交通信号灯变成绿色,这样可以通过。
3、汽车是使用信号灯呢还是使用十字路口的那一块马路呢?
汽车得到绿色信号灯之后,会立即行使通过路口,他使用的就是那一个马路。
4、 同时得到这个绿色信号灯的是不是不仅仅一辆车?
同时看到绿灯的车辆有很多,并发的比较多。
5、信号灯变化时间越长是不是就堵的更严重?
信号灯的时间越长,导致一次等待的时间过长,押车的长度会变长,通过路口的速度要明显小于正常形式的速度,这样导致车会越来越多的堵在路上。
6、是不是有的车得不到中间的道路资源他就不等待信号灯而直接右柺呢?
有些车辆在直行的时候没有得到绿灯,他们还有别的方向可以选择,就会右转来直接走掉
7、是不是车辆的个头越大,同时通过路口的车辆就越少?
一次占用整个车道,那岂不是要让后边的车没法通过?
8、当一辆车在一次信号灯没有通过路口时,是不是继续等待,下一次绿色信号灯亮的时候是不是他第一时间可以通过?
当一次绿灯正好没有通过路口,下一次绿灯到来的时候他就可以比较迅速的得到绿灯信号,而快速通过。
发现交通信号灯这个设计很有意思,和oracle的latch很像,不知道是谁学习的谁.
Latch到底是什么呢?
是能不能独自访问或执行某一种共享资源的信号灯。从程序上来讲就是一个变量,标记了某个资源的一个状态。
Latch有三种类型,父latch,子latch,独立latch。其中,在v$latch_parent这个表中存放的是独立latch和父latch,每一个latch存放一条记录。子latch放在 v$latch_children表中,每个子latch存放一条记录,只有少数的latch有子latch,所以在v$latch_children表中,其latch name是一样的,但是其地址不一样,表明他保护的block不想同。在v$latch表中,保存了所有的latch的聚合信息,在这里能看到宏观的latch信息,在v$latch_children中可以看到微观的每个latch的信息。
根据概念理解,对于共享的数据结构都是需要使用latch进行保护的,有些数据结构使用一个latch,有些数据结构使用多个latch(子latch),多个latch的使用可以增加并发度,因为不用访问一个资源而占用了整个链表的latch,latch的访问是独享的。
<!-- @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } -->
看了latch的概念,那么进程如何得到latch呢?
进程得到latch的方式:willing-to-wait和no_wait两种方式:
Willing-to-wait方式是请求一个latch,如果一次请求没有获得,然后又有经过spin和try again,经过多次的spin(_SPIN_COUNT)如果还没有得到latch则进入到sleep状态,进入sleep前,它需要先安排一下他的后事,不能一睡不起呀(如何醒来,超时和repost),还有就是通知v$session_wait自己发生了latch free wait了,从这里可以知道,每次sleep都会对应着一个latch ...
Posted in 大话技术 | 4 Comments »
Friday, January 25th, 2008
一日上午,突然发现被推荐去春节晚会节目组,甚为高兴,终于有了人生第一次登台献丑的机会,哈哈。
午饭后,去找导演面试,心想,该导演会不会玩潜规则,嘎嘎。没想到导演乃一美女,说话手捂嘴,心想该美女是不是兔唇,汗!
晚上排练,突然发现是跳舞,我狂晕,本以为会是小品相声,舞蹈 舞蹈 如何是好!!!
舞蹈老师来了,更是一大美女,心想还是兄弟好,见美女的机会都让给我。
开始跳舞了,老师把衣服(外套)一脱,同学们异口同声的说“里面是什么?”,老师说“先跳!”,同学们又说“跳完再看?”。
又一日,老师教动作,某男怎么也不会,老师就说你上小学的时候没有学过广播体操呀?某男很不好意思地说我没有上过小学,全倒。
还有我,某一动作,手和腿总是不一致,老师单独教我,大家都在看,10分钟了,还没有学会,张导受不了了“见过没基础的,没见过这么没基础的!”
感想:
评审前大家都很紧张,我更紧张,万一忘了怎么办?
没想到上台后大家都还可以,眼睛已经来不及看下面的观众了,看不到观众心里当然什么也不会想,心里什么都不想,当然也不紧张。
原来上台没有想象的那么可怕。
辛辛苦苦排练这么多天,希望最后一次评审不要被砍掉。
Posted in 生活八卦 | 8 Comments »