2012年3月5日星期一

乒乓球几种主要接发球的方法

几种主要接发球的方法

一、接急球
  
  所谓急球是指对方发出的直线、斜线或中路底线的长球,具有角度大、速度快的特点。
  回接急球时,站位应偏远一点,以便做好充分的准备,判断和起动都要快。根据来球的速度、旋转和落点,采取点、拉、冲、拨、推等方法来回接。接正手位的奔球、侧旋球或侧上旋球,都以点、攻、冲为主;接侧旋急长球,以拉冲为主;接反手位的奔球、侧旋或侧上旋球时,多以快推、快拨对方大角度或用反手攻和侧身点、冲方法。
  
  二、接下旋球
  
  接下旋球可用稳搓、摆短、劈长、挑、拉冲等方法
  对于初学者,回接下旋球的最基本方法就是稳搓,要求搓稳、搓低、不能下往。
  对具备一定水平的乒乓球运动员,接下旋球时,一定要积极主动,要加大回接难度质量。如对方发球旋转很强,就要用摆短、劈长方法回接,还要加大回接的旋转和落点难度。
  由于下旋球具有速度不是太快而旋转变化较大的特点,因此,接发球的准备时间较充足,而在判断旋转强度和回接球的手上控制难度要加大。
  强烈下旋球一般都用手法相似的不转发球相配套。这就要求接发球者判断要准确,看清来球旋转强度和落点后,敢于上手。如果没有胆量,求稳搓接,甚至托球,多半会被对方抢攻。
  搓接不转球,不会使球产生较大的旋转变化,容易被对方抢攻,造成被动或失分。
  在运用反手拉球技术回接反手位侧下旋长球时应注意:如对方发球的速度不是太快、角度不大、旋转一般时还比较容易回接。但如果对方发球质量较高,就要求两面拉球或冲球时手感要强,用摩擦旋转来克制对方的旋转。让位要充分,抢冲对方两大角。如能对来球判断准确,用搓挤的方法回接也很有效。如对方的发球是急下旋,用正常的搓球方法回接容易出高球,用推、拨的方法回接又容易下网。这时可用搓挤回接,还可使回球产生一定的急下旋,但要注意掌握好击球时间、拍形及用力方法。
三、接左、右侧上、下旋球
  
  站在反手位侧身用正手发球,可使球产生左侧上、下旋。站在反手侧身位,用反手发球,使球产生右侧上、下旋。无论是高抛还是低抛、反手还是正手发球,除下旋球和不转球外,基本上都是左、右侧上、下旋球。但左、右侧上、下旋球是一个统称,也只是一个旋转的概念,并不包括速度和落点的因素。左、右侧上、下旋球都有斜线长、短球,中路长短球,直线长、短球之分。
  在这其中还有以旋转落点为主或以速度落点为主之分。同样是左侧下旋斜线长球,一个是斜线角度大,旋转较强;另一个则可能斜线角度大、速度快。
  因此说,左、右侧上、下旋球是一个统称。如果详细用旋转、速度及落点划分起来,可分出几十种。
  对发球者来讲,较大的发球旋转变化,都是在球拍触球的一瞬间,通过调整拍形和触球用力方向而产生的。这就要求接发球者在判断准确的基础上采用相对固定的接发球模式,并在这一接发球模式的制约下,加强有针对性的强化训练,以提高接发球的质量和命中率。
  接出台长球或半出台球,无论是直、中、斜线侧上、下旋或半出台球,一定要立足于抢拉、抢冲或抢点。至于在什么情况下运用,则要根据对方发球的速度、旋转及落点而定。接旋转较强的侧下旋长球或半出台球,以抢拉高吊弧圈为主。
  四、接短球
  
  短球也是一个统称,从路线上可分为反手位、中路、正手位短球。从旋转上可分为上旋、下旋、侧旋、侧上旋、侧下旋和不转的短球。
  在接短球的方法上,要根据不同球性而异,当然不排除同一种发球可用几种回接方法。比如:接正手位一般侧下旋的短球,可摆短、也可劈长,可快挑、也可以晃接。在这种情况下,接发球的方法就取决于你本身接发球的能力。如能熟练地运用上述各项技术,就可以速度快、积极主动的挑、撇为主,以提高接发球的质量。
  目前,高水平的乒乓球运动员接发球的抢攻能力都很强,对出台或半出台球,无论其旋转速度如何,都能以质量较高的弧圈球进行接发球抢攻。这就迫使发球者多以短球来制约对方,而且短球发的落点严格,球的第二跳都不得从球台的边线或端线出台,同时还伴有手法极其相似的旋转反差变化。因此,要求回接短球时首先是头脑冷静,判断准确;然后是接球的手法合理,快挑、摆短、劈长等方法要合理运用。要根据来球的性质及本人的技术水平、打法特点来选择回接方法。
  值得注意的是,受固有的方法意识影响或恐惧对方弧圈球的心里作用,有些选手的回接短球以摆短多、而劈长、撇长少,显得接发球过于保守且威胁性差。应当讲,快速加转摆短球对制约对手抢攻是一个行之有效的方法,但一味的摆短,使回接球的落点、线路变化不多,也会削弱摆短威胁。
  发长球要有不怕对手拉的准备,主动打实力。劈长球也一样,迫使对方大幅度移动和让位,抢拉弧圈,然后,你有充分的时间准备和 落点制约,准备带、打弧圈,进行实力之争。如果摆短出半高球,易被动挨打,球靠近球网,易被对方抢攻。
  因此,接对方反差较大的短球进行摆短,要求回球快、短、低、转,缺一不可。
  劈长球,多半在正手空位或反手追身,回球 角度大、线路长,容易在下一板球转为相持。因此,回接短球时,一定要提倡积极主动,多以挑、点、撇为主。然后,是根据来球摆短、劈长灵活运用,不拘一格。回接的方法多、落点活。
  当然,接发球的方法不排除战术的需要,而且服从战术的需要还是第一位的。
  比如:对方发球抢攻是特长,是主要得分手段,尤其是擅长正手位和中路抢拉弧圈球。那么,就要求接发球的第一板,**对方反手大角度,使其很难侧身抢拉,只好再过渡一板。这样从整体战术的角度要求,就有效的破坏了发球者的抢攻。在回接球的方法上,要求落点严格是非常重要的。
  
  对发球的准确判断,是接好发球的基础和前提,也是处理好前三板球的首要环节。以下,从六个方面对发球的判断进行解析。
  一、发球种类的判断 
  首先,判断发的是左边球、右边球还是中间球。其次,判断球发的是长球还是短球。再次,判断发球的旋转和强度。根据发球的方向、长短和旋转强度,及时调整好站位和确定接球的方法。 
  
  二、运行方向的判断 
  判断发的是左边球、右边球还是中间球,这主要看触球的用力方向以及球拍的运行轨迹,向左,发的就是左边球,向右,发的就是右边球,居中的是中间球。 
  
  三、长短位置的判断 
  判断球发的是长球还是短球,这要看对方发球的第一落点离网的远近。离网近的,过来的是短球;离网远的,就是第一落点在发球端线附近的,过来的是长球。 
  
  四、旋转类别的判断 
  发球旋转类别大体上分为八种:上旋、下旋、左侧旋、右侧旋、左侧上旋、右侧上旋、左侧下旋、右侧下旋。虽然这八种发球说起来很简单,但准确判断识别,却又很困难。这是因为球拍的覆盖物的不同、力量的大小、出手的快慢、击球位置的区别、击球时机的变换、以及假动作的欺骗等等!都是造成对发球判断难度的基本因素。
  
  五、旋转强度的判断 
  要判断出球的八种旋转,业余选手经过努力是可以做到的,但要识别出旋转的强度确实相当困难,咱们不说业余的,就是专业的甚至是世界超一流选手,也经常在这一难点上出错。所以我说:咱们这些业余的能知道是啥转就不错了!!但既然提到了这个问题,我就给球友说上几句,凡是发球好的选手,四个部位(腰、臂、腕、指)的运用都比较合理,是一种合力,特别是手腕抖动的又快又狠,所以发出的球特别转。张晓鹏博士的物理测试:反胶能达到107转、正胶能达到97转。那么乒乓球选手发出的球,我看也只能达到70、80转就不错了!一般称在10转以下是不转球,10转以上又分为弱下和强下旋两种。 
  
  六、真假动作的判断
  目前而言,欧洲选手的发球普遍比亚洲选手要强,就逆向旋转发球是欧洲选手发明的,而且在实战中运用自如,威胁很大!还有欧洲选手是用大力发球,而中国用得是中力,所以发出的球就没有人家的转。特别是以瓦尔德内尔为代表的一批选手,从遮挡到晃动发球,也就是真假动作的转换到欺骗,更是表演的淋漓尽致!就发球的假动作而言,是指触球的前后,主要分为前期假、后期假和前后假三种,以达到以假乱真,真假难辩。再加上出手抖动的快,常常假的就误认为是"真"的了!这也灵验了一句话:"在这个世界上只有"假"的才是最真的"! 
   
  技巧: 
  ⒈ 注意发球动作要符合规则: 
  发球动作只有两部分组成,⑴一只手的上抛动作:上抛高度大于等于16cm,上抛动作要在球台端线外、高于台面且需垂直上抛;⑵另一只手的挥拍动作:若按照新规则,要高于台面,并且要使两侧居中的裁判和对方运动员的视线,能看清动作。 
  
  ⒉ 注意发球的针对性: 
  知已知彼,百战百胜。发球前,应尽可能地了解对方的基本情况和特点:基本情况主要有 ⑴是直拍还是横拍;⑵是左手还是右手;⑶ 是亚洲选手还是欧美选手;⑷是生胶还是半长胶;⑸是反胶还是正胶;⑹是近台快攻打法还是削攻打法;⑦是初次见面还是熟手。对上述情况,要做到心中有数。如果有条件的话,最好通过热身、录像、报导等,了解对方的特长,了解对方发球、击球、落点规律和球路。 
  
  ⒊ 注意发球直接得分: 
  通过学习研究各种螺旋发球,练就最拿手的发球和绝招发球,如练发擦边球、回头球、近网边线球,在发球的开局,直接得分。在开局和中局,就争取主动,把比分拉开,这在"+一分制" 中,显深得格外重要; 
  
  ⒋ 注意为发球抢攻做准备: 
  总体上来说,发球为抢攻做准备的宗旨:就是用各种方法提高发球的质量,增加对方接球的难度,使对方回球质量不高,从而为抢攻创造了条件。 
  
  具体说来,应注意下面几点: 
  ⑴利用对方的漏洞、和弱点,在落点、旋转、力量、曲线上不断地变化,从而提高发球的质量,创造抢攻的机会; 
  ⑵研究发球的规律,在发球时,就大体上可以预测对方回球的线路,从而提高抢攻成功的概率。 
  ⑶利用组合发球的威力,调动对方。如发近网、短而转的球,组合发底线,左、右、近身、长而急的球,往往能收到事半功倍的效果; 
  ⑷利用旋转的组合,如发近网转和不转的球,及发近网侧下旋球和"左爆冲侧上螺旋球" ,把球发到对方左边线。这样旋转的组合,使对方感到难于适应,从而控制了比赛的节奏,使攻球频频得分。 
  
  ⒌ 注意发球的力量: 
  谈到发球的力量,特别是发球加力,人们常会联想到加力的后果:不是球飞出界,就是球弹跳太高。但是实际上,发加力短球,球又短、又转、又低、落点好;发加力长球,球又长、又急、又转、落在左右边角上,正是体现了乒乓球的艺术性、和技术性。它不仅在实践中可以做得到,在理论上也是正确的。只要我们在加力时,控制好撞击力和磨擦力的比例,适当增加球在球拍上磨擦时的螺旋线的长度、减少磨擦厚度、适当延长球在球拍上磨擦的时间,就可以达到上述效果。 
⒍ 注意发球的旋转: 
  乒乓球旋转的多样性和由此产生的曲线的丰富性,在所有的球类运动中是独一无二的。那么如何制造出各种各样的旋转,特别是动作相似而性质不同的旋转呢?主要应注意如下几条: 
  ⑴用球拍不同部位击球和磨擦球,发出不同旋转的球。如用拍面下侧与拍面上侧击球和磨擦球,就可以发出相应时的转与不转球; 
  ⑵用螺旋线引拍,如果在不同阶段和不同方向击球和磨擦球,会产生不同旋转。下螺旋线方向触球会产生下螺旋;上螺旋线方向触球会产生上螺旋; 
  ⑶用手腕发力方式不同,产生不同的旋转:如果是弹击发力,则不太转,如果是上螺旋线形摩擦发力,则是上螺旋式旋转; 
  ⑷适当增加海绵厚度,增强球拍粘性,可以增强乒乓球的旋转。特别是在使用大球以后,这个问题显得更加重要; 
  ⑸增加合力作用在球拍上的时间和距离:如在发加转螺旋球时:应用靠近拍面右侧的部位摩擦球;如在发不转螺旋球时:应用靠近拍面左侧的部位摩擦球; 
  ⑹ 动作适当加大,加快摆速,并切得薄:这样在摆速方向远离球心的条件下,摆速越快,击球力量就越大,球拍摩擦球的力量也就加大了,因此球的旋转就得到加强; 
  
  ⒎ 注意发球的变化: 
  发球变化莫测,常使对方不知所措。但是我们常会看到:在比赛中,包括一些大赛中,有些运动员,从头到尾,只用一种或二种发球。发球单调,落点也单调,常使对方较快就适应,而处于被动挨打的境地。因此多准备几套发球,如正手、反手、侧身发球、上螺旋、下螺旋、长螺旋、短螺旋等等,充分发挥发球阶段主动时机,努力做到:六结合+组合,并在发球时就准备好几套发球抢攻的路线,常会使我们处于不败之地! 
  
  ⒏ 注意发球的创新: 
  不断提高发球质量,不断创造新的发球,是乒乓球运动发展的需要,也是乒乓球运动富有生命活力的体现。在一种高质量新的发球面前,由于对方对它陌生,头脑中尚未建立条件反射。因此在击球时,感到不协调、不顺手,甚至束手无策,这样就导致发球直接得分,或间接得分,这就充分显示了新发球的巨大威力。最近,笔者研究发一种"左爆冲侧上螺旋球" ,把球加力、加速、加螺旋,从本方左中端线,发到对方左边线,在对付横拍,特别是对付直拍和直拍长胶及削球手,收到很好的效果。

乒乓球横板发球的技巧与应用

这是一个业余球手的总结,有些道理。


许多朋友在打球时都会感叹,假如我有一个好的发球,就好了。因为往往在一场比赛中,你总是感觉到,对对方的发球有些不知所措。也正式因为如此,很多人利用自己独特的发球赢得了一场又一场比赛。可见,一个好的发球是多么的重要--好的发球是成功的一半。  
  下面以我的个人经验为例,向大家具体讲述一下我的发球:  
  我的发球多以正手居多,反手只是作为一种调节的手段。(在比赛过程当中,当你的正手发球被对手适应的情况下,换一换另外一种发球方式作为调节,是比较有效的)  
  站立姿势(即发球的预备姿势)(我所讲的所有动作均以球案的底线为基准)左脚在前,右脚在后(我是右手横握球拍)身体稍稍右转,这样有利于在以后的发球当中很好的运用腰部力量。左手将球置于掌心,右手手腕稍微回收,有利于手腕的发力,一切准备停当,下面就是发球的重头戏了,你的发球质量如何,就看以下的环节了。 
  一、身体重心下沉,两膝关节稍微弯曲,便于发出各种不同的旋转的球。左肩稍比右肩靠后,目的是便于从前向后收身体,在向前发力。身体稍稍有点弓。也是同样的道理。  
  二、将球向上抛起,同时整个身体舒展开,持拍手从身后由上至下用力挥下。  
  三、在球拍触及球的同时,可以发出各种不同旋转的球,也可以发出不同速度的球。(这是我发球的奥秘之所在)  
  我的发球的动作有时很大,有时很小,也是为了迷惑对方,因为在很多情况下,有很多的业余选手,是看你的动作,而不是同过你的来球方向和来球速度,所以这正好给了你一个可以利用的机会。  
  在球拍触及到球的同时,同样的一个动作可以发出不同的球,这是各位都知道的,但是当你在发球的时候,你的球的出去的时间差将是你制胜的关键。有时早,有是晚,对方将很难从你的动作中看出你是什么时候发的球。  
  发下旋球,你可以在球落到你的胸前的位置时,用球拍的正面去摩擦球的正底部,这是发出的球的旋转最强,但是对方却通过你的动作和你的出球时间,认为你所发的是不转的或是"上旋"――这是我惯用的招式。  
  发上旋球,你在球下落到快接近案子的时候,用拍子的上方去摩擦球的后上部(以球拍面与地面垂直为基准)这时的动作看上去象下旋球,但是它所发出的是上旋球,而且是旋转比较强的上旋,对手即便是对此球有所判断,也不会很果断的回击,因为他不会认为是上旋。这是我得分的重要手段。  
  发奔球--你用球拍的背面正对对方,在球下落时,利用球拍的粘性和球的下落速度。将球击出,击出的球速开始不是很快,但是在接触到对方的案子时,会突然的向上拱,所以很多人对付此球总是感到措手不及,但是此球不能一直使用,因为比较明显。与此球同样的动作还有一种下旋球,也是这样的动作,但是在击球的时候,拍子稍微向下磕一下,速度一样,却可以发出下旋球,在对手吃了第一个奔球后,紧跟着使用,比较有效。

MAC address lookup using Java

MAC address lookup using Java
Posted 2007-07-09 in Java.
Code to extract the MAC address of the network card has been in UUID for a long time now. Because some people download UUID for just the MAC address part, here is a short explanation of how that code works and how you can use it in your projects.
First, download UUID and open com.eaio.uuid.UUIDGen. The MAC address extraction is performed in the static initializer.
The code does a little bit of OS sniffing to find a suitable program which is then used to print the MAC address. The output of this program is read in and parsed.
Operating systems
HP-UX
On HP-UX, /usr/sbin/lanscan is started.
Linux/MacOSX/possibly other Unices
The /sbin/ifconfig command is used.
Windows
ipconfig /all is used.
Solaris
On Solaris, the first line of the host name list is used to call /usr/sbin/arp. The code is somewhat equivalent to /usr/sbin/arp `uname -n | head -1`.
Ripping the MAC code
    * Download the latest version of the UUID software and extract the archive.
    * Copy the following source files from the uuid-x.x.x/src/java folder into your project:
          o com/eaio/util/lang/Hex.java
          o com/eaio/uuid/MACAddressParser.java
          o com/eaio/uuid/UUIDGen.java
    * Copy the static initializer up to and including
      if (macAddress != null) {
          if (macAddress.indexOf(':') != -1) {
              clockSeqAndNode |= Hex.parseLong(macAddress);
          }
          else if (macAddress.startsWith("0x")) {
              clockSeqAndNode |= Hex.parseLong(macAddress.substring(2));
          }
      }
      into a new class.
    * Retrieve the MAC address as clockSeqAndNode variable.
That's all.

这几个常见俚语的变迁,还真不知道

    1,"嫁鸡随鸡,嫁狗随狗",原为"嫁乞随乞,嫁叟随叟"意思是一个女人即使嫁给乞丐或者是年龄大的人也要随其生活一辈子。随着时代的变迁,这一俗语转音成鸡成狗了。
  2,"三个臭皮匠,顶个诸葛亮","皮匠"实际上是"裨将"的谐音,"裨将"在古代是指"副将",原意是指三个副将的智慧合起来能顶一个诸葛亮。流传中,人们将"裨将"说成了"皮匠"。
  3,"不见棺材不落泪",本是"不见亲棺不落泪",并不是见了任何棺材都落泪。讹变为"不见棺材不落泪",如果不管谁的棺材,只要见到就落泪,那就有点太莫名其妙了。
  4,"有眼不识金镶玉",本是"有眼不识荆山玉"。荆,指古代楚国;"荆山玉",是玉匠在荆山发现的玉。
  5,"不到黄河心不死",本是"不到乌江心不死"。乌江,项羽他老人家自刎的地方。乌江讹变成黄河,真是让人无从解释了。
  6,"舍不得孩子套不住狼"本是"舍不得鞋子套不住狼"意思是要打到狼,就要不怕跑路,不怕费鞋。不过这个我还能理解点,因为好像四川那边管鞋叫孩子。如果真的拿生的孩子去套狼,也太恐怖啦!
  7,"狗屁不通",这个成语最初是"狗皮不通"。狗的表皮没有汗腺,酷夏,狗要借助舌头来散发体内的燥热。"狗皮不通"就是指狗的身体这个特点,"屁"是污浊都象征,对于文理不通的东西,以屁来喻,也就将就吧!
  8,"王八蛋"这是民间的一句骂人话。实际上,这句话的原来面目是"忘八端"。古代是,"八端"指"孝,悌,忠,信,礼,义,廉,耻",此八端指的是做人之根本,忘记了这"八端"也就是忘了基本的做人根本,可是后来却被讹变成"王八蛋"。

Oracle在Windows下的操作系统认证总结


一、普通用户

1. 在 windows 下创建用户 niu,或将域用户加入本地组。

2. 修改参数文件 os_authent_prefix 默认值“ops$”。

3. 修改注册表,oracle/home0 下添加 OSAUTH_PREFIX_DOMAIN 项,如果使用域,设为 true,否则设为 false;如果不是在域中,并且将其设为 true,域用机器名代替,如果不添加该项,默认值为 true。

4. 修改 SQLNET.ORA 中的 SQLNET.AUTHENTICATION_SERVICES = (NTS) 或将其注释掉,不能设为 NONE。(该项说明使用操作系统认证)

5. 连接到 Oracle,创建相应的用户:

OSAUTH_PREFIX_DOMAIN 为 TRUE 时:

Create User “OPS$DOMAIN_NAME\NIU” IDENTIFIED EXTERNALLY;
注:在使用 DOMAIN_NAME\ 时,因为有特殊符号 \,所以要用双引号包起来,此时双引号中所有字符必须用大写。

OSAUTH_PREFIX_DOMAIN为 FALSE 时:
Create User OPS$niu IDENTIFIED EXTERNALLY;
赋予给用户一些权限,如:
SQL>GRANT CONNECT TO "OPS$DOMAIN_NAME\NIU"(OPS$niu);
Grant succeeded.
SQL>
6. 以 NIU 用户登录操作操作系统
SQL> connect /
connected
SQL> show user;
USER is "<OPS$><DOMAIN_NAME>\niu"
SQL>
7. 通常情况下,数据库用户登录后,即使没有 ALTER USER 的权限,也是可以修改自己密码的,但若是以此认证方式登录数据库,则不可以(未经确认,只是尝试失败得到的结论,但仔细想想,这样要求也合理)


二、超级管理员用户

1. 与普通用户差不多,需要在创建 windows 中创建组 ora_dba(默认情况安装 oracle 的时候已经建立,ORA_<sid>_DBA 只对指明的 sid 有超级管理员权限),并将本地用户或域用户加入该组。(无需再创建 oracle 用户,相当于用 sys 登陆,os_authent_prefix 也就不起作用。)

2. 用该用户登陆 windows
连接 oracle :

SQL> connect / as sysdba
connected
SQL> show user;
USER is "sys"
SQL>


三、几个参数说明

1. 初始化文件中的 os_authent_prefix: 指明 Oracle 帐户对应 OS 帐户的前缀。

2. 注册表中的 OSAUTH_PREFIX_DOMAIN :如果不指明域(或机器名),一定要将其设为 false,通常这是造成认证失败的原因。

3. sqlnet.ora 中 sqlnet.authentication_services=(nts) 否则产生 ora-01004 错误。

4. 初始化文件中 remote_os_authent=true :该参数不一定要设,除非要用到客户端的操作系统认证(没有试验)。

5. 初始化文件中 REMOTE_LOGIN_PASSWORD :只是用于超级管理员用户,设为 NONE 则只使用操作系统认证,EXCLUSIVE 可用非共享的密码文件认证,SHARED 可用共享的密码文件认证(但只能有 sys 用户为超级管理员)。注:操作系统认证优先于密码文件认证。

四、参考:

http://www.itpub.net/showthread.php?s=&threadid=207909
http://www.itpub.net/162971,1.html
http://www.cnoug.org/viewthread.php?tid=15082
http://www.cnoug.org/viewthread.php?tid=27294&sid=DU7tZYea
http://www.cnblogs.com/zyk/archive/2004/11/09/61786.aspx

Oracle merge usage


CREATE OR REPLACE PACKAGE etl AS

    c_inserting CONSTANT PLS_INTEGER := 0;
    c_updating  CONSTANT PLS_INTEGER := 1;

    FUNCTION merge_counter (
             action_in IN PLS_INTEGER DEFAULT c_inserting
             ) RETURN PLS_INTEGER;

    FUNCTION get_merge_update_count RETURN PLS_INTEGER;

    FUNCTION get_merge_update_count (
             merge_count_in IN PLS_INTEGER
             ) RETURN PLS_INTEGER;

    FUNCTION get_merge_insert_count RETURN PLS_INTEGER;

    FUNCTION get_merge_insert_count (
             merge_count_in in PLS_INTEGER
             ) RETURN PLS_INTEGER;

    PROCEDURE reset_counters;

 END etl;
 /

 CREATE OR REPLACE PACKAGE BODY etl AS

    g_update_counter PLS_INTEGER NOT NULL := 0;
    g_insert_counter PLS_INTEGER NOT NULL := 0;

 /*-------------- START OF FUNCTION merge_counter --------------------*/
 FUNCTION merge_counter (
          action_in IN PLS_INTEGER DEFAULT c_inserting
          ) RETURN PLS_INTEGER IS
 BEGIN
    CASE action_in
       WHEN c_updating
          THEN g_update_counter := g_update_counter + 1;
       WHEN c_inserting
          THEN g_insert_counter := g_insert_counter + 1;
       ELSE
          RAISE PROGRAM_ERROR;
    END CASE;
    RETURN 0;
 END merge_counter;

 /*----------- START OF FUNCTION get_merge_update_count V1 ---------------*/
 FUNCTION get_merge_update_count
    RETURN PLS_INTEGER is
 BEGIN
    RETURN g_update_counter;
 END get_merge_update_count;

 /*----------- START OF FUNCTION get_merge_update_count V2 ---------------*/
 FUNCTION get_merge_update_count (
          merge_count_in IN PLS_INTEGER
          ) RETURN PLS_INTEGER IS
 BEGIN
    RETURN NVL( merge_count_in - g_insert_counter, 0 );
 END get_merge_update_count;

 /*----------- START OF FUNCTION get_merge_insert_count V1 ---------------*/
 FUNCTION get_merge_insert_count
    RETURN PLS_INTEGER IS
 BEGIN
    RETURN g_insert_counter;
 END get_merge_insert_count;

 /*----------- START OF FUNCTION get_merge_insert_count V2 ---------------*/
 FUNCTION get_merge_insert_count (
          merge_count_in IN PLS_INTEGER
          ) RETURN PLS_INTEGER IS
 BEGIN
    RETURN NVL( merge_count_in - g_update_counter, 0 );
 END get_merge_insert_count;

 /*-------------- START OF FUNCTION reset_counters --------------------*/
 PROCEDURE reset_counters IS
 BEGIN
    g_update_counter := 0;
    g_insert_counter := 0;
 END reset_counters;

 END etl;
 /






2. 创建一个验证的sql文件:run_mrg.sql
SQL code
set serverout on
set echo on
set pagesize 100
--
-- Run merge...
--
begin


   etl.reset_counters;


   merge into target tgt
      using source src
      on (src.id = tgt.id)
   when matched then
      update
      set value = (case etl.merge_counter(etl.c_updating)
                        when 0
                       then src.value
                    end)
    when not matched then
       insert
          ( tgt.id
          , tgt.value )
       values
          ( case etl.merge_counter(etl.c_inserting)
               when 0
               then src.id
            end
          , src.value );

    /* Use update count... */
    dbms_output.put_line(sql%rowcount || ' rows merged.');
    dbms_output.put_line(etl.get_merge_update_count || ' rows updated.');
    dbms_output.put_line(etl.get_merge_insert_count(sql%rowcount) || ' rows inserted.');

    /* Use insert count... */
    dbms_output.put_line(etl.get_merge_update_count(sql%rowcount) || ' rows updated.');
    dbms_output.put_line(etl.get_merge_insert_count || ' rows inserted.');

 end;
 /






3. 验证上述用法:
create table source ( id int, value varchar2(1) );
create table target ( id int, value varchar2(1) );


insert into source select rownum, substr(object_type,1,1) from user_objects where rownum <= 15;
insert into target select * from source where rownum <= 10;
commit;


运行结果如下:
SQL> insert into source select rownum, substr(object_type,1,1) from user_objects where rownum <= 15;


已创建11行。


SQL> insert into target select * from source where rownum <= 10;


已创建10行。


SQL> commit;


提交完成。
SQL> @E:\MyDocument\notes\oracle_run_merge.sql
SQL> set serverout on
SQL> set echo on
SQL> set pagesize 100
SQL> --
SQL> -- Run merge...
SQL> --
SQL> begin
  2
  3 etl.reset_counters;
  4
  5 merge into target tgt
  6 using source src
  7 on (src.id = tgt.id)
  8 when matched then
  9 update
 10 set value = (case etl.merge_counter(etl.c_updating)
 11 when 0
 12 then src.value
 13 end)
 14 when not matched then
 15 insert
 16 ( tgt.id
 17 , tgt.value )
 18 values
 19 ( case etl.merge_counter(etl.c_inserting)
 20 when 0
 21 then src.id
 22 end
 23 , src.value );
 24
 25 /* Use update count... */
 26 dbms_output.put_line(sql%rowcount || ' rows merged.');
 27 dbms_output.put_line(etl.get_merge_update_count || ' rows updated.');
 28 dbms_output.put_line(etl.get_merge_insert_count(sql%rowcount) || ' rows inserted.');
 29
 30 /* Use insert count... */
 31 dbms_output.put_line(etl.get_merge_update_count(sql%rowcount) || ' rows updated.');
 32 dbms_output.put_line(etl.get_merge_insert_count || ' rows inserted.');
 33
 34 end;
 35 /
22 rows merged.
20 rows updated.
2 rows inserted.
20 rows updated.
2 rows inserted.


PL/SQL 过程已成功完成。


SQL>


上述过程我是从asktom上整理出来的。希望对你有所帮助。
merge本身是不带有updated和inserted的详细信息的。