日历

« 2008-07-24  
  12345
6789101112
13141516171819
20212223242526
2728293031  

统计信息

  • 访问量: 589
  • 日志数: 7
  • 图片数: 2
  • 建立时间: 2007-05-30
  • 更新时间: 2008-07-03

RSS订阅

爱,并为之奋斗;兑现自己心灵深处爱的想法!

我的最新日志

  • 三十种适合你的健康菜单

    2008-7-03

     1.聪明地锻炼 

        如果你在健身馆里只知道发狠用劲的话,最好不要浪费奔洹R话愦讲,十个人中只有一个人了解正确的健身方法,绝大多数人的锻炼目的似乎只是让自己疲劳,这种方法很容易受伤,而且收获甚微,最好是对自己的锻炼方法进行一次正确的评估?

    2.多骑自行车  

        人们应该多骑自行车,以中速骑车,对心肺功能的提高很有帮助,对减肥也有特效。  

    3.散步半小时  

        尽量每周散步四到五次,每次3040分钟,这对身体非常有益,有规律的活动有助于身体健康,还具有减肥功效。无需花费巨资参加健身俱乐部,只要买一双舒适的鞋穿就行了。 

    4.多走楼梯  

        最好少乘电梯,多走楼梯。爬楼梯是一种非常好的锻炼形式,对心血管有益,还可以改善你的腿部肌肉。此外,腹部肌肉也会得到锻炼。 

    5.保持正确的行走姿势  

        保持正确的行走和坐立姿势对健康非常有益,很多人都养成了懒散的坏习惯,一些不良姿势会导致背部痉挛和头疼等毛病。请在行走时放松双肩,保持颈部直立、骨盆肌肉紧张,挺胸收腹,这样你就会看起来更棒一些,自我感觉也会更好。

     6.经常伸伸脖子

            每天最好抽时间轻轻地伸一伸脖子,很多慢性头疼病都是由于颈骨接合处和神经损伤引起的,而人们长时间保持坐姿最容易引发这种损伤。尽量将下巴压低,抵住胸口,使两耳低于双肩,样可以帮助你预防或减轻头疼。

     7.要吃好早餐  

        也许去年一年你都不怎么吃早餐,但今年请不要这样了。吃一些麦片粥或牛奶什锦早餐等,它们可以缓慢释放糖分,使你不会在午餐之前就感到肚子空空如也。

     8.多吃有机食品

        人们应该尽量多吃有机食品,即使是有机的根茎蔬菜也行。这些食物对身体健康非常有好处,种植方便,成本低,味道也不错。

     9.多吃核桃

            大家应该多吃核桃,它的脂肪含量低,是最好的坚果类食品。最近的研究发现,常吃核桃可延长寿命五到十年。它们可以保护心脏,降低胆固醇。

     10.少喝碳酸饮料  

        牙科医生警告称,最好少喝碳酸饮料,因为这些饮料中的酸性物质可以慢慢地腐蚀牙齿表面保护层,这在儿童中是很常见的一个问题,因为很多家长都认为碳酸饮料不会对牙齿产生任何危害。果汁中也含有酸性物质和果糖等,因此最好在饮用之前先用三分之二的水稀释一下。 

    11.多吃鱼  

        多吃鲭鱼、沙丁鱼和鲑鱼等深海鱼类是最好的,每周吃两次为宜。鱼油中发现的Omega3长链脂肪酸似乎无病不治,对关节炎、痴呆症、皮肤病等都有好处。如果你需要恶补的话,最好多吃些鱼油。

     12.食用更多的酸酵母  

        每天早上最好吃一片加奶酪的面包。奶酪中富含叶酸,这是一种维生素B,可以解决贫血症和肠类疾病等问题。考虑怀孕的女性应该服用叶酸,因为它可以帮助防止某些孕期疾病。

     13.多吃绿色食品

            提高矿物质硒的摄入量可以保护人体免受癌症和免疫系统疾病的困扰,因为硒元素对于清除血液中的致癌分子来说非常关键。深绿色叶菜和根茎菜中富含硒元素,可惜的是绝大多数人在日常生活中都很少食用这些蔬菜。大家需要记住一点,食补是最好的进补方式。

     14.补充更多的维生素 

        建议大家每天服用1000毫克的维生素C,这样可以全天保持充沛体力,同时还可以少患感冒。

     15.为怀孕做好充分准备  

        如果你计划今年怀孕生孩子,请马上开始健康的生活方式,远离化学污染。接触化学污染的男性,精子质量会受影响,孩子也更容易患某些疾病。准妈妈们应该戒酒,保持均衡饮食。 

    16.听自己的“心声”  

        经常听听你的“心声”,看看你的心脏在告诉你什么信息。休息时,如果胸部出现短暂疼痛,你可以不用担心。但是如果你在正常的活动中或在步入办公室的时候发现此类疼痛,即使它们并不剧烈,而你却感到呼吸短促,这时最好去看医生,因为你的身体在告诉你可 能出现了一些问题。

     17.不要压抑自己  

        不要刻意控制自己的情绪,不要在意人们说些什么,哭泣并非脆弱的表现,至少它是一种在意与关心的体现,是一种爱与关怀的证明。发泄出自己的感情要比压抑它们好得多。 

    18.表达自己  

        人们应该找到自己富于创造性的一面,这样可以提高自己的总体健康。成年人通常不会表达自己的创造性,因为他们害怕失败,他们已经开始认为最重要的事情就是总是做正确的事情,如果你学会以不同角度看待问题的话,你就不会遇到表达困难或其他脑力问题了。

     19.尽情地唱歌  

        音乐是一种创造性的活动,可以愉悦身心。有研究证明,唱歌可以促进一种感觉良好的荷尔蒙的产生,有益于身体健康。

     20.记笔记  

        要经常在身边放上一个笔记本和一支笔,每当你在睡觉时突然想起什么事时,就可以随手将它们记下来,然后安心睡个好觉。早上醒来时,你可以从一种更为清醒的角度看待晚上想到的问题。

     21.每天睡八小时  

        每天保持八小时的睡眠是至关重要的,很多人似乎永远处于缺觉状态,尽量不要熬夜。早睡的时候最好不要喝酒,这样才能得到一个真正熟睡的夜晚。

     22.关怀双脚  

        英国肌肉与骨骼医学研究所皮特·斯库建议说,最好每天晚上都蜷着双脚(就像双手握拳一样),用双脚外脚掌着地保持平衡,行走十分钟。这种练习可以提高平衡能力,增强脚弓和脚踝的力量,帮助你解决由于常穿高跟鞋或不舒适的平底鞋而造成的脚部损伤问题。 

    23.及时进行身体检查  

        男性到了45岁以后都应该定期检查自己的前列腺,无论是否发生病变。如果癌症发现及时,还是可以治疗的。男人们不应该像?鸵鸟一样把自己的头埋在沙子里装作事不关己的样子,毕竟到医生那里进行检查也不是什么难事。

     24.增强骨骼强度 

        健身专家提醒,请关注自己的骨骼发育,避免骨质疏松症,50岁的女性中有三分之一都患有这种病,然而这种病是可以预防的,实践证明负重练习可以有效增强骨质健康。园艺、家务和爬楼梯等活动效果都不错,而抽烟则会导致骨质疏松。

     25.少用漂白剂

             最好扔掉家中的漂白剂和清洁剂等,这些物品中都含有害化学成分。多花些体力,使用一些柠檬汁或醋也可达到相同的洗涤效果。家中的化学物品越少越好,有研究发现儿童哮喘病与清洁产品的挥发性物质有着直接的关系。

     26.留住耳垢 

        最好不要用棉签清洁内耳的耳垢,很多人都是在掏耳朵时造成耳部受伤,在掏出耳垢时可能引发感染。在某些情况下,还可能损害耳鼓。其实耳朵具有自清能力,耳垢可以在无需外力帮助的情况下自行清除。

     27.进行扫描检查  

        如果你是一名已婚女性的话,对自己进行一次妇科衣原体扫描检查,最好带上你的那一位,因为他也有可能携带病菌。有4%的成人都感染这种病菌,但毫无症状。衣原体病菌很容易治疗,但是如果不予理睬的话,它可能会导致宫颈疤痕,阻碍精子行进,造成不孕。

     28.善待你的眼睛  

        新的一年要远离结膜炎,这种病的交叉感染很普遍,甚至擦一擦眼睛或是碰一下门把手都能将疾病传染给他人。请在擦眼或用药之后洗洗双手,使用专用毛巾,不要与他人共享。  

    29.躲在阴凉里  

        请尽量避免阳光强烈直射。紫外线能够破坏皮肤的胶原质和弹性蛋白,加速皮肤老化,促进皱纹的产生。最好享受柔和的阳光,阳光可以帮助人体产生维生素D,它对于骨骼生长和牙齿健康非常有益。

     30.扔掉所有垃圾  

        新年应有新气象,建议大家扔掉所有多余无用的东西,乱东西过多会影响你的脑力健康,如果你的床下已经没有任何空间,衣柜里也已爆满的话,说明你的垃圾太多了,到了应该清理的时候了。

  • 七个关于有效沟通的哲理故事(ZT)

    2008-7-03

        有效沟通是企业经营管理和我们个人在社会生活经常需要遇到的基本问题。人与人之间要达成真正的沟通并不是一件易事。以下一些简洁而寓意深刻的故事,可能比我和其他沟通专家所著的专业文章对你更直接,更具有震憾作用和启发意义。
       1、有一个秀才去买柴,他对卖柴的人说:荷薪者过来!卖柴的人听不懂荷薪者(担柴的人)三个字,但是听得懂过来两个字,于是把柴担到秀才前面。
       秀才问他:其价如何?卖柴的人听不太懂这句话,但是听得懂这个字,于是就告诉秀才价钱。 秀才接着说:外实而内虚,烟多而焰少,请损之。(你的木材外表是干的,里头却是湿的,燃烧起来,会浓烟多而火焰小,请减些价钱吧。)卖柴的人因为听不懂秀才的话,于是担着柴就走了。
       管理者平时最好用简单的语言、易懂的言词来传达讯息,而且对于说话的对象、时机要有所掌握,有时过分的修饰反而达不到想要完成的目的。
       2、 美国知名主持人林克莱特一天访问一名小朋友,问他说:你长大后想要当甚么呀?小朋友天真的回答:我要当飞机的驾驶员!林克莱特接着问:如果有一天,你的飞机飞到太平洋上空所有引擎都熄火了,你会怎么办?小朋友想了想:我会先告诉坐在飞机上的人绑好安全带,然后我挂上我的降落伞跳出去。当在现场的观众笑的东倒西歪时,林克莱特继续着注视这孩子,想看他是不是自作聪明的家伙。没想到,接着孩子的两行热泪夺眶而出,这才使的林克莱特发觉这孩子的悲悯之情远非笔墨所能形容。于是林克莱特问他说:为甚么要这么做?小孩的答案透露出一个孩子真挚的想法:我要去拿燃料,我还要回来!!
       你听到别人说话时……你真的听懂他说的意思吗?你懂吗?如果不懂,就请听别人说完吧,这就是听的艺术1. 听话不要听一半。2. 不要把自己的意思,投射到别人所说的话上头。
       3、 AB说:"我要离开这个公司。我恨这个公司!"B建议道:"我举双手赞成你报复!!破公司一定要给它点颜色看看。不过你现在离开,还不是最好的时机。" A问:为什么?B说:"如果你现在走,公司的损失并不大。你应该趁着在公司的机会,拼命去为自己拉一些客户,成为公司独挡一面的人物,然后带着这些客户突然离开公司,公司才会受到重大损失,非常被动。"A觉得B说的非常在理。于是努力工作,事遂所愿,半年多的努力工作后,他有了许多的忠实客户。再见面时BA现在是时机了,要跳赶快行动哦!”A淡然笑道:老总跟我长谈过,准备升我做总经理助理,我暂时没有离开的打算了。
       其实这也正是B的初衷。一个人的工作,只有付出大于得到,让老板真正看到你的能力大于位置,才会给你更多的机会替他创造更多利润。
       4、 曾经有个小国的人到中国来,进贡了三个一模一样的金人,把皇帝高兴坏了。可是这小国的人不厚道,同时出一道题目:这三个金人哪个最有价值?皇帝想了许多办法,请来珠宝匠检查,称重量,看做工,都是一模一样的。
       怎么办?使者还等着回去汇报呢。泱泱大国,不会连这个小事都不懂吧?最后,有一位退位的老大臣说他有办法。皇帝将使者请到大殿,老臣胸有成足地拿着三根稻草,插入第一个金人的耳朵里,这稻草从另一边耳朵出来了。第二个金人的稻草从嘴巴里直接掉出来,而第三个金人,稻草进去后掉进了肚子,什么响动也没有。老臣说:第三个金人最有价值!使者默默无语,答案正确。最有价值的人,不一定是最能说的人。老天给我们两只耳朵一个嘴巴,本来就是让我们多听少说的。善于倾听,才是成熟的人最基本的素质。
       5、 有一位表演大师上场前,他的弟子告诉他鞋带松了。大师点头致谢,蹲下来仔细系好。等到弟子转身后,又蹲下来将鞋带解松。有个旁观者看到了这一切,不解地问:大师,您为什么又要将鞋带解松呢?大师回答道:因为我饰演的是一位劳累的旅者,长途跋涉让他的鞋带松开,可以通过这个细节表现他的劳累憔悴。” “那你为什么不直接告诉你的弟子呢?”“他能细心地发现我的鞋带松了,并且热心地告诉我,我一定要保护他这种热情的积极性,及时地给他鼓励,至于为什么要将鞋带解开,将来会有更多的机会教他表演,可以下一次再说啊。
       6、 一个女儿对父亲抱怨她的生活,抱怨事事都那么艰难。她不知该如何应付生活,想要自暴自弃了。她已厌倦抗争和奋斗,好象一个问题刚解决,新的问题就又出现了。
       她的父亲是位厨师,他把她带进厨房。他先往三只锅里倒入一些水,然后把它们放在旺火上烧。不久锅里的水烧开了。他往一只锅里放些胡萝卜,第二只锅里放只鸡蛋,最后一只锅里放入碾成粉末状的咖啡豆。他将它们侵入开水中煮,一句话也没有说。
       女儿咂咂嘴,不耐烦地等待着,纳闷父亲在做什么。大约20分钟后,他把火闭了,把胡萝卜捞出来放入一个碗内,把鸡蛋捞出来放入另一个碗内,然后又把咖啡舀到一个杯子里。做完这些后,他才转过身问女儿,亲爱的,你看见什么了?”“胡萝卜、鸡蛋、咖啡,她回答。
       他让她靠近些并让她用手摸摸胡萝卜。她摸了摸,注意到他们变软了。父亲又让女儿拿一只鸡蛋并打破它。将壳剥掉后,他看到了是只煮熟的鸡蛋。最后,他让她喝了咖啡。品尝到香浓的咖啡,女儿笑了。她怯生问到:父亲,这意味着什么?
       他解释说,这三样东西面临同样的逆境——煮沸的开水,但其反应各不相同。胡萝卜入锅之前是强壮的,结实的,毫不示弱;但进入开水之后,它变软了,变弱了。鸡蛋原来是易碎的,它薄薄的外壳保护着它呈液体的内脏。但是经开水一煮,它的内脏变硬了。而粉状咖啡豆则很独特,进入沸水之后,它们倒改变了水。哪个是你呢?他问女儿。当逆境找上门来时,你该如何反应?你是胡萝卜,是鸡蛋,还是咖啡豆?
       7、 有一个人因为生意失败,逼不得已变卖了新购的住宅,而且连他心爱的小跑车也脱了手,改以电单车代步。有一日,他太太一起,相约了几对私交甚笃的夫妻出外游玩,其中一位朋友的新婚妻子因为不知详情,见到他们夫妇共乘一辆电单车来到约定地点,便冲口而出地问:「为甚么你们骑电单车来?」众人一时错愕,场面变得很尴尬,但这位妻子不急不缓地回应答:「我们骑电单车,因为我想抱着他。」

     

  • 受益终生的八大经典管理学定律(ZT)

    2008-6-27

     

    1、  彼得原理 

      每个组织都是由各种不同的职位、等级或阶层的排列所组成,每个人都隶属于其中的某个等级。彼得原理是美国学者劳斯·彼得在对组织中人员晋升的相关现象研究后,得出一个结论:在各种组织中,雇员总是趋向于晋升到其不称职的地位。彼得原理有时也被称为向上爬的原理。 这种现象在现实生活中无处不在:一名称职的教授被提升为大学校长后,却无法胜任;一个优秀的运动员被提升为主管体育的官员,而无所作为。对一个组织而言,一旦相当部分人员被推到其不称职的级别,就会造成组织的人浮于事,效率低下,导致平庸者出人头地,发展停滞。因此,这就要求改变单纯的根据贡献决定晋升的企业员工晋升机制,不能因某人在某个岗位上干得很出色,就推断此人一定能够胜任更高一级的职务。将一名职工晋升到一个无法很好发挥才能的岗位,不仅不是对本人的奖励,反而使其无法很好发挥才能,也给企业带来损失。

    2、酒与污水定律

      酒与污水定律是指把一匙酒倒进一桶污水,得到的是一桶污水;如果把一匙污水倒进一桶酒,得到的还是一桶污水。在任何组织里,几乎都存在几个难弄的人物,他们存在的目的似乎就是为了把事情搞糟。最糟糕的是,他们像果箱里的烂苹果,如果不及时处理,它会迅速传染,把果箱里其他苹果也弄烂。 烂苹果的可怕之处,在于它那惊人的破坏力。一个正直能干的人进入一个混乱的部门可能会被吞没,而一个无德无才者能很快将一个高效的部门变成一盘散沙。组织系统往往是脆弱的,是建立在相互理解、妥协和容忍的基础上的,很容易被侵害、被毒化。破坏者能力非凡的另一个重要原因在于,破坏总比建设容易。一个能工巧匠花费时日精心制作的陶瓷器,一头驴子一秒钟就能毁坏掉。如果一个组织里有这样的一头驴子,即使拥有再多的能工巧匠,也不会有多少像样的工作成果。如果你的组织里有这样的一头驴子,你应该马上把它清除掉,如果你无力这样做,就应该把它拴起来。

    3、木桶定律

      水桶定律是讲一只水桶能装多少水,这完全取决于它最短的那块木板。这就是说任何一个组织,可能面临的一个共同问题,即构成组织的各个部分往往是优劣不齐的,而劣势部分往往决定整个组织的水平。水桶定律与酒与污水定律不同,后者讨论的是组织中的破坏力量,最短的木板却是组织中有用的一个部分,只不过比其他部分差一些,你不能把它们当成烂苹果扔掉。强弱只是相对而言的,无法消除,问题在于你容忍这种弱点到什么程度,如果严重到成为阻碍工作的瓶颈,你就不得不有所动作。

    4、华盛顿合作规律

    华盛顿合作规律说的是一个人敷衍了事,两个人互相推诿,三个人则永无成事之日。多少有点类似于我们三个和尚的故事。人与人的合作,不是人力的简单相加,而是要复杂和微妙得多。在这种合作中,假定每个人的能力都为1,那么,10个人的合作结果有时比10大得多,有时,甚至比1还要小。因为人不是静止物,而更像方向各异的能量,相互推动时,自然事半功倍,相互抵触时,则一事无成。 我们传统的管理理论中,对合作研究得并不多,最直观的反映就是,目前的大多数管理制度和行为都是致力于减少人力的无谓消耗,而非利用组织提高人的效能。换言之,不妨说管理的主要目的不是让每个人做得更好,而是避免内耗过多。

    5、手表定理

      手表定理是指一个人有一只表时,可以知道现在是几点钟,当他同时拥有两只表时,却无法确定。两只手表并不能告诉一个人更准确的时间,反而会让看表的人失去对准确时间的信心。手表定理在企业经营管理方面,给我们一种非常直观的启发,就是对同一个人或同一个组织的管理,不能同时采用两种不同的方法,不能同时设置两个不同的目标,甚至每一个人不能由两个人同时指挥,否则将使这个企业或这个人无所适从。手表定理所指的另一层含义在于,每个人都不能同时选择两种不同的价值观,否则,你的行为将陷于混乱。

    6、不值得定律

    不值得定律最直观的表述是:不值得做的的事情,就不值得做好。这个定律再简单不过了,重要性却时时被人们忽视遗忘。不值得定律反映人们的一种心理,一个人如果从事的是一份自认为不值得做的事情,往往会保持冷嘲热讽,敷衍了事的态度,不仅成功率低,而且即使成功,也不觉得有多大的成就感。 因此,对个人来说,应在多种可供选择的奋斗目标及价值观中挑选一种,然后为之奋斗。选择你所爱的,爱你所选择的,才可能激发我们的斗志,也可以心安理得。而对一个企业或组织来说,则要很好地分析员工的性格特性,合理分配工作,如让成就欲较强的职工单独或牵头完成具有一定风险和难度的工作,并在其完成时,给予及时的肯定和赞扬;让依附欲较强的职工,更多地参加到某个团体*同工作;让权力欲较强的职工,担任一个与之能力相适应的主管。同时要加强员工对企业目标的认同感,让员工感觉到自己所做的工作是值得的,这样才能激发职工的热情。

    7、蘑菇管理

    蘑菇管理是许多组织对待初出茅庐者的一种管理方法,初学者被置于阴暗的角落(不受重视的部门,或打杂跑腿的工作),浇上一头大粪(无端的批评、指责、代人受过),任其自生自灭(得不到必要的指导和提携)相信很多人都有过这样一段蘑菇的经历,这不一定是什么坏事,尤其是当一切刚刚开始的时候,当几天蘑菇,能够消除我们很多不切实际的幻想,让我们更加接近现实,看问题也更加实际。一个组织,一般对新进的人员都是一视同仁,从起薪到工作都不会有大的差别。无论你是多么优秀的人才,在刚开始的时候,都只能从最简单的事情做起,蘑菇的经历,对于成长中的年轻人来说,就象蚕茧,是羽化前必须经历的一步。所以,如何高效率地走过生命的这一段,从中尽可能汲取经验,成熟起来,并树立良好的值得信赖的个人形象,是每个刚入社会的年轻人必须面对的课题。

    8、奥卡姆剃刀定理

    英国奥卡姆的威廉主张唯名论,只承认确实存在的东西,认为那些空洞无物的普遍性概念都是无用的累赘,应当被无情地剃除。他主张如无必要,勿增实体。这就是常说的奥卡姆剃刀。这把剃刀曾使很多人感到威胁,被认为是异端邪说,威廉本人也因此受到迫害。然而,并未损害这把刀的锋利,相反,经过数百年的岁月,奥卡姆剃刀已被历史磨得越来越快,并早已超载原来狭窄的领域,而具有广泛、丰富、深刻的意义。  奥卡姆剃刀定律在企业管理中可进一步演化为简单与复杂定律:把事情变复杂很简单,把事情变简单很复杂。这个定律要求,我们在处理事情时,要把握事情的主要实质,把握主流,解决最根本的问题,尤其要顺应自然,不要把事情人为地复杂化,这样才能把事情处理好。

     

  • 软件测试心得

    2008-6-24

        两年前离开一家制造纺织专用电机的国企来到杭州这个陌生的城市,两眼一摸黑;没有开发经验的我失去了进入开发阵营的砝码,不情愿的进入了软件测试行业。经过一年的工作和学习,跳槽,成了一家软件公司的测试TeamLeader。转眼间已经从事测试工作整整两个年头,期间苦乐相伴,荣辱相随,使自己的心灵得到了很大的锻炼;我知道,自己是一个成熟的软件测试工程师了。

        个人观点:做软件测试一定要熟悉所测试软件的行业知识,精通软件后台数据存储与流转结构,懂得和人交流的技巧。懂得行业知识是为了更深刻的理解需求,更好的与开发交流,可以以专家的身份和客户交流;精通数据流转和数据存储结构是为了更好的完成对需求、设计文档和程序的测试工作,以行业专家的身份和开发交流;懂得交流技巧是为了顺畅的和上司,同伴,开发,客户进行沟通。

        我们生活的国家正处在高速发展阶段,软件行业正以前所未有的高速度在各行各业遍地开花,如果有能力,你就不愁收不到米。估计自动化测试会在1-2年内在软件行业普及,所以学习是我们不断进步的源泉;自己要坚信“没有比脚更远的路,没有比人更高的山”,你就一定能芝麻开花节节高。

        自动化测试:我认为自动化测试就是对软件中比较复杂的需要多组数据验证的功能进行测试会相对省时一些;然后就是对成熟的模块做回归测试。自动化测试不仅仅是会使用那么几种自动化测试工具,应该是可以根据测试内容的需要决定是使用自动化测试工具还自己编写测试工具,主要在于自己编写更合适的测试小程序;因为测试要追求最准确,最直接,更直观的发现软件的问题。

        刚进入一个行业做软件测试时需要注意的问题:自信,虚心学习的心态,努力,不卑不亢。自信是做好所有事情的第一个要具备的条件;虚心学习是因为对一个陌生的行业肯定有很多东西需要你学习总结,原来工作的那一套必定是不适用的;努力是为了给领导一个好印象。不卑不亢是和开发的交流中要注意的,因为现实中存在开发和测试交流的态度极端可恶;你必须以牙还牙,以眼还眼,你不是替他工作,你是在替公司工作;因为“人善被人欺”这绝对是一句真理名言。

       “生命不息,奋斗不止”借这句名言结束这篇散文。为了自尊的生存,努力吧,软件测试的兄弟姐妹;明天一定更美好

  • JAVA连接数据库汇总

    2008-6-12

    1、Oracle8/8i/9i数据库(thin模式)
    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
    String url="jdbc:oracle:thin:@localhost:1521:orcl";
    //orcl为数据库的SID
    String user="test";
    String password="test";
    Connection conn= DriverManager.getConnection(url,user,password);

    2、DB2数据库
    Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
    String url="jdbc:db2://localhost:5000/sample";
    //sample为你的数据库名
    String user="admin";
    String password="";
    Connection conn= DriverManager.getConnection(url,user,password);

    3、Sql Server7.0/2000数据库
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
    String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb";
    //mydb为数据库
    String user="sa";
    String password="";
    Connection conn= DriverManager.getConnection(url,user,password);

    4、Sybase数据库
    Class.forName("com.sybase.jdbc.SybDriver").newInstance();
    String url =" jdbc:sybase:Tds:localhost:5007/myDB";
    //myDB为你的数据库名
    Properties sysProps = System.getProperties();
    SysProps.put("user","userid");
    SysProps.put("password","user_password");
    Connection conn= DriverManager.getConnection(url, SysProps);

    5、Informix数据库
    Class.forName("com.informix.jdbc.IfxDriver").newInstance();
    String url =
    "jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver;
    user=testuser;password=testpassword";
    //myDB为数据库名
    Connection conn= DriverManager.getConnection(url);

    6、MySQL数据库
    Class.forName("org.gjt.mm.mysql.Driver").newInstance();
    String url ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1"
    //myDB为数据库名
    Connection conn= DriverManager.getConnection(url);

    7、PostgreSQL数据库
    Class.forName("org.postgresql.Driver").newInstance();
    String url ="jdbc:postgresql://localhost/myDB"
    //myDB为数据库名
    String user="myuser";
    String password="mypassword";
    Connection conn= DriverManager.getConnection(url,user,password);

  • Oracle学习笔记

    2008-6-12

    Oracle 安装与卸载
    组件介绍
    Oracle9i Database 9.2.0.1.0
    1、Oracle9i 9.2.0.1.0 数据服务,必选
    2、Enterprise Edition Options 9.2.0.1.0 必选
    2.1、Oracle Advanced Security 9.2.0.1.0 网络安全支持
    2.2、Oracle Partioning 9.2.0.1.0 分区支持,xRisk必选
    2.3、Oracle Spatial 9.2.0.1.0 存储/控制空间数据支持
    2.4、Oracle Label Security 9.2.0.1.0 标签安全性
    2.5、Oracle OLAP 9.2.0.1.0(On-Line Analytical Processing)
    2.6、Oracle Data Mining 9.2.0.1.0 内置数据分析系统
    2.7、Oracle COM Automation Feature 9.2.0.1.0 通过PLSQL控制COM组件
    3、Oracle Net Services 9.2.0.1.0 必选
    3.1、Oracle Net Listener 9.2.0.1.0 监听程序,必选
    3.2、Oracle Connection Manager 9.2.0.1.0 连接管理
    3.3、Oracle Names 9.2.0.1.0 网络名称地址管理
    4、Oracle Enterprise Manager Products 9.2.0.1.0 Web浏览器对控制台的支持
    4.1、Oracle Intelligent Agent 9.2.0.1.0 远程操作助手,作业/事件
    4.2、Enterprise Manager WebSite 9.2.0.1.0
    4.3、Oracle Management Server 9.2.0.1.0
    4.4、Oracle Management Client 9.2.0.1.0
    4.5、Oracle Change Management Pack 9.2.0.1.0
    4.6、Oracle Diagnostics Pack 9.2.0.1.0
    4.7、Oracle Tuning Pack 9.2.0.1.0
    4.8、Oracle Management Pack for Oracle Application 9.2.0.1.0
    4.9、Oracle Management Pack for Oracle Standard Edition 9.2.0.1.0
    5、Oracle9i Development Kit 9.2.0.1.0 开发接口,必选
    5.1、Oracle C++ Call Interface 9.2.0.1.0
    5.2、Oracle Call Interface 9.2.0.1.0
    5.3、Oracle Objects for OLE 9.2.0.1.0
    5.4、Oracle ODBC Driver 9.2.0.1.0
    5.5、Oracle Provider for OLEDB 9.2.0.1.0 xRisk项目所用数据连接驱动,必须
    5.6、Oracle Programmer 9.2.0.1.0
    5.7、Oracle XML Developer's Kit 9.2.0.1.0
    6、Oracle Windows Documentation 9.2.0.1.0 文档
    7、Oracle HTTP Server 9.2.0.1.0 Oracle的Http服务
    8、Oracle Windows Interfaces 9.2.0.1.0 Windows专用接口
    9、Oracle Transparent Gateways 9.2.0.1.0 企业透明网关,建立和选定产品的直接访问通道(如果选择了,需要仔细设置)
    10、iSQL*Plus 9.2.0.1.0 通过Internet执行PLSQL的支持
    11、Oracle JDBC/OCI Interface 9.2.0.1.0 Java类库,通过java访问数据库的支持
    附:因为命名方法中,默认用的是Oracel服务所在的机器的机器名,如果修改的话,容易出错而导致ONS无法正常使用。当然,如果你一定要改的话,你可以到
    D:\oracle\ora92\network\admin\下面去查看tnsnames.ora文件(D:\oracle\ora92是Oracle安装的路径),研究一下再修改。其中listener.ora是监听程序的配置,tnsnames.ora是网络服务名及命名方法配置。这些文件都是txt文件,可以用记事本打开。
    对Oracle进行内存分配。基本的原则就是:
    1、 共享池:高速缓冲:Java池:大型池:PGA = 6:3:4:1:3
    2、 共享池+高速缓冲+Java池+大型池+PGA <= 2G
    注意:在32位的操作系统上,Oracle能使用的物理内存,不能超过2G。如果你想使用超过2G的内存(最多2.8G),那么可以使用4GT技术来实现(只能在Win2000 Advanced Server及2003 Server上使用)。如果你想超过3G(不过4G),可以使用PSE36来实现。具体使用方法可参考http://www.dba-oracle.com/oracle_tips_ram_waste.htm
    一、创建表空间
    在sqlplus中输入如下命令:
    注意:
    1、请先以system登录
    2、创建表空间时,请确保表空间数据文件所在的驱动器有足够的磁盘空间(不少于16G)。
    --建立数据表空间
    CREATE TABLESPACE RISK
    DATAFILE
    'D:\ORACLE\ORADATA\RISK1.DBF' SIZE 5120M AUTOEXTEND OFF,
    'D:\ORACLE\ORADATA\RISK2.DBF' SIZE 5120M AUTOEXTEND OFF
    LOGGING ONLINE PERMANENT BLOCKSIZE 8K SEGMENT SPACE MANAGEMENT MANUAL;
    --建立索引表空间
    CREATE TABLESPACE RISK_INDEX DATAFILE
    'D:\ORACLE\ORADATA\RISK_INDEX.DBF' SIZE 5120M AUTOEXTEND OFF
    LOGGING ONLINE PERMANENT BLOCKSIZE 8K SEGMENT SPACE MANAGEMENT MANUAL;
    二、创建用户
    在sqlplus中输入如下命令:
    注意:请以system用户登录
    CREATE USER xrisk --建立用户xrisk
    IDENTIFIED BY xrisk --密码为xrisk
    DEFAULT TABLESPACE RISK --默认表空间为Risk
    TEMPORARY TABLESPACE TEMP --临时表空间为Temp
    PROFILE DEFAULT
    ACCOUNT UNLOCK;
    -- 1 Role for XRISK
    GRANT DBA TO XRISK; --赋予DBA权限
    ALTER USER XRISK DEFAULT ROLE ALL; --赋予DBA的所有管理权限,非必须
    -- 1 System Privilege for XRISK
    GRANT UNLIMITED TABLESPACE TO XRISK; --赋予xrisk用户无限表空间权限,非必须,因为在前面创建表空间时,其大小都已经限定了
    数据备份与恢复
    1、导出数据:
    输入如下命令:exp xrisk/xrisk@xriskv22 ōwner=xrisk file='d:\xrisk.dmp' log='d:\xrisk_exp.log'
    说明:如果你不清楚参数意义,请输入exp help=y查看
    2、导入数据:
    输入如下命令:imp xrisk/xrisk@xriskv22 fromuser=xrisk touser=xrisk file='d:\xrisk.dmp' log='d:\xrisk_imp.log' ignore=y
    说明:如果你不清楚参数意义,请输入imp help=y查看。在导入时,有可能会出现directories创建失败的提示,这不影响使用。如果想避免这种情况,在导入时,可以先导入表结构,再导入表数据。
    在Oracle安装结束后,由于多种不可预知的原因,会存在Oracle的数据连接驱动没有自动注册的可能性,这时,就需要我们手动注册。
    Oledb驱动文件存在于目录D:\oracle\ora92\bin。(注意是Oracle的安装目录)。主要包括以下文件:
    图32
    命令如下:regsvr32 D:\oracle\ora92\bin\OraOLEDB.dll
    图33
    注册成功的结果如下:
    34
    Oracle卸载
    1、 Oracle Installation Products-> Universal Installer 卸装所有Oracle产
    2、 运行regedit,删除HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE
    3、 运行regedit,删除HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services下oracle内容
    4、 运行regedit,删除HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application下oracle内容
    在pl/sql plus 中测试返回单条记录的命令
    set serveroutput on variable b1 number; variable b2 number; variable b3 number; execute totalforop('S060064','ZYX138-2',:b1,:b2,:b3);
    在pl/sql plus 中测试返回记录集的命令
    variable b1 refcursor;
    set autoprint off;
    execute Huxb01.Huxb001('cyf',:b1);
    print b1;
    通过函数返回记录集,示例:
    1、建包头
    CREATE OR REPLACE package pkg_test as type myrctype is ref cursor; function get(a1 varchar2) return myrctype; end pkg_test;
    2、建包体
    CREATE OR REPLACE package body pkg_test as function get(a1 varchar2) return myrctype is rc myrctype; begin open rc for SELECT distinct Pdfactoryid FROM Sfp_Pdreceivingsh WHERE ōperator = a1 ORDER BY Pdfactoryid; return rc; end get; end pkg_test;
    3、用pl/sql plus 测试包
    declare
    w_rc pkg_test.myrctype; w_id varchar2(20); begin w_rc := pkg_test.get('cyf'); loop fetch w_rc into w_id; exit when w_rc%notfound; dbms_output.put_line(w_id); end loop; end;
    合并相关记录的函数:
    表tt:
    ID STR ---------- ---------- aa 11 aa 22 aa 33 bb 44 bb 55 cc 66 合并后的表:
    ID CONSTR(ID)
    ---------- --------------------------------
    aa 11,22,33,44
    bb 11,22,33
    cc 11,22,33
    调用的方法:
    select ID,constr(ID) from tt group by ID;
    合并调用的函数:
    CREATE OR REPLACE FUNCTION Constr(a1 varchar2) RETURN varchar2 AS cstr VARCHAR2 (10000); CURSOR cur_str IS SELECT Num FROM tt WHERE ID = a1; cc cur_str%ROWTYPE; BEGIN OPEN cur_str; LOOP
    FETCH cur_str INTO cc; EXIT WHEN cur_str%NOTFOUND; cstr := cstr || cc.Num|| ','; END LOOP; cstr := RTRIM (cstr, ','); RETURN cstr; CLOSE cur_str; EXCEPTION WHEN OTHERS THEN RETURN ''; END;
    删除tt表中ID字段重复的纪录:
    delete from tt a where a.rowid > (select min(rowid) from tt b where a.ID = b.ID group by ID having count(ID) > 1); Exits 的用法测试:(与in相似)
    delete from tt a where exists (select b.Num
    from Test b
    where b.ID = a.ID); 查询tt表中第5—10条记录:
    SELECT * FROM tt WHERE ROWNUM<11
    minus
    SELECT * FROM tt WHERE ROWNUM<5;
    生成序列:
    create sequence StudentID
    INCREMENT BY 1
    START WITH 1
    MINVALUE 0
    MAXVALUE 999999999
    NOCYCLE
    NOORDER
    CACHE 20;
    新建带分区的表:
    create table TBSI_ANTE_GROUPDETAIL
    (
    PGI_ID NUMBER(16) not null,
    P_ID NUMBER(16) not null,
    I_CODE VARCHAR2(30) not null,
    A_TYPE VARCHAR2(10) not null,
    M_TYPE CHAR(1) not null,
    )
    PARTITION BY RANGE (P_ID)
    (
    PARTITION TBSI_ANTE_GROUPDETAIL2 VALUES LESS THAN (3)
    TABLESPACE RISK
    PCTFREE 10
    PCTUSED 0
    INITRANS 1
    MAXTRANS 255
    STORAGE
    (
    INITIAL 64K
    NEXT 0K
    MINEXTENTS 1
    MAXEXTENTS 2147483645
    PCTINCREASE 0
    ),
    PARTITION TBSI_ANTE_GROUPDETAIL5 VALUES LESS THAN (6)
    TABLESPACE RISK
    PCTFREE 10
    PCTUSED 0
    INITRANS 1
    MAXTRANS 255
    STORAGE
    (
    INITIAL 64K
    NEXT 0K
    MINEXTENTS 1
    MAXEXTENTS 2147483645
    PCTINCREASE 0
    ),
    PARTITION TBSI_ANTE_GROUPDETAIL20000 VALUES LESS THAN (MAXVALUE)
    TABLESPACE RISK
    PCTFREE 10
    PCTUSED 0
    INITRANS 1
    MAXTRANS 255
    STORAGE
    (
    INITIAL 64K
    NEXT 0K
    MINEXTENTS 1
    MAXEXTENTS 2147483645
    PCTINCREASE 0
    )
    );
    alter table TBSI_ANTE_GROUPDETAIL
    add constraint PK_TBSI_ANTE_PG_PGD primary key (PGI_ID,P_ID,I_CODE,A_TYPE,M_TYPE);
    alter table TBSI_ANTE_GROUPDETAIL
    add constraint FK_TBSI_ANTE_PG_PGD foreign key (PGI_ID)
    references TBSI_ANTE_GROUP (PGI_ID) on delete cascade;
    create unique index PK_TBSI_ANTE_GROUPDETAIL on TBSI_ANTE_GROUPDETAIL (PGI_ID,P_ID,I_CODE,A_TYPE,M_TYPE)
    tablespace RISK_INDEX
    pctfree 10
    initrans 2
    maxtrans 255
    storage
    (
    initial 64K
    minextents 1
    maxextents unlimited
    );
    VB连接 Oracle的方法
    一、通过ODBC连接
    o 新版本:
    "Driver={Microsoft ODBC for oracle};Server=OracleServer.world;Uid=Username;
    Pwd=asdasd;"
    o 旧版本:
    "Driver={Microsoft ODBC Driver for oracle};ConnectString=OracleServer.world;
    Uid=myUsername;Pwd=myPassword;"
    二、通过OLE DB, OleDbConnection (.NET) 连接
    o 标准连接(Standard Security):
    "Provider=msdaora;Data Source=MyOracleDB;User Id=UserName;Password=asdasd;"
    这是Microsoft的格式, 下面是Oracle的格式(提供者不同)
    "Provider=OraOLEDB.Oracle;Data Source=MyOracleDB;User Id=Username;
    Password=asdasd;"
    注意:"Data Source=" 必须根据相应的命名方法设置为Net8名称。例如对于局部命名,它是tnsnames.ora中的别名,对于Oracle命名,它是Net8网络服务名
    o 信任连接(Trusted Connection):
    "Provider=OraOLEDB.Oracle;Data Source=MyOracleDB;OSAuthent=1;"
    或者设置user ID为 "/"
    "Provider=OraOLEDB.Oracle;Data Source=MyOracleDB;User Id=/;Password=;"
    · OracleConnection (.NET)
    o 标准连接:
    "Data Source=Oracle8i;Integrated Security=yes";
    这只对Oracle 8i release 3或更高版本有效
    o OracleConnection声明:
    C#:
    using System.Data.OracleClient;
    OracleConnection ōracleConn = new OracleConnection();
    OracleConn.ConnectionString = "my connectionstring";
    OracleConn.Open();
    VB.NET:
    Imports System.Data.OracleClient
    Dim OracleConn As ōracleConnection = New OracleConnection()
    OracleConn.ConnectionString = "my connectionstring"
    OracleConn.Open()
    · Data Shape
    o MS Data Shape:
    "Provider=MSDataShape.1;Persist Security Info=False;Data Provider=MSDAORA;Data Source=orac;user id=username;password=mypw"
    VB调用存储过程
    返回单个记录,示例:
    Option Explicit
    Dim Cn As ADODB.Connection
    Dim CPw1 As ADODB.Command
    Dim Conn As String
    Dim b1 As String
    Private Sub Form_Load()
    Conn = "Provider=OraOLEDB.Oracle.1;
    Persist Security Info=False;
    User ID=zhongyaerp;PASSWORD=zhongya;Data Source=Huxb0001_Huxb"
    Set Cn = New ADODB.Connection
    With Cn
    .ConnectionString = Conn
    .CursorLocation = adUseClient
    .Open
    End With
    Set CPw1 = New ADODB.Command
    With CPw1
    .ActiveConnection = Cn
    .CommandText = "Huxb0003"
    .CommandType = adCmdStoredProc
    .Parameters.Append CPw1.CreateParameter("b1", adVarChar, adParamOutput, 4, b1)
    .Execute
    End With
    b1 = CPw1("b1")
    Text1.Text = b1
    End Sub
    Private Sub Form_Unload(Cancel As Integer)
    Cn.Close
    Set Cn = Nothing
    Set CPw1 = Nothing
    End Sub
    返回记录集,示例:
    Option Explicit
    Dim Cn As ADODB.Connection
    Dim CPw1 As ADODB.Command
    Dim Rs As ADODB.Recordset
    Dim Conn As String
    Dim Prm1 As New ADODB.Parameter
    Private Sub cmdGetEveryone_Click()
    Dim Num As Integer
    Num = 1
    Set Rs.Source = CPw1
    Rs.Open
    While Not Rs.EOF
    MsgBox "这是查询到的第" & Num & "条数据:" & Rs.Fields(0)
    Num = Num + 1
    Rs.MoveNext
    Wend
    Rs.Close
    End Sub
    Private Sub Form_Load()
    Set Rs = New ADODB.Recordset
    With Rs
    .CursorType = adOpenStatic
    .LockType = adLockReadOnly
    End With
    Conn = "Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=zhongyaerp;PASSWORD=zhongya;Data Source=Huxb0001_Huxb"
    Set Cn = New ADODB.Connection
    With Cn
    .ConnectionString = Conn
    .CursorLocation = adUseClient
    .Open
    End With
    Set CPw1 = New ADODB.Command
    With CPw1
    .ActiveConnection = Cn
    .CommandText = "Huxb01.Huxb001"
    '.CommandText = "{call Huxb01.Huxb001(?, {resultset 1000,b1})}"
    '.CommandType = adCmdText
    .CommandType = adCmdStoredProc
    .Properties("PLSQLRSet") = True
    Set Prm1 = .CreateParameter("a1", adVarChar, adParamInput, 4, "cyf")
    .Parameters.Append Prm1
    .Execute
    .Properties("PLSQLRSet") = False
    End With
    End Sub
    Private Sub Form_Unload(Cancel As Integer)
    Cn.Close
    Set Cn = Nothing
    Set CPw1 = Nothing
    Set Rs = Nothing
    End Sub
    网络测试命令:
    ping IP地址或主机名 [-t] [-a] [-n count] [-l size]
    参数含义:
    -t不停地向目标主机发送数据;
    -a 以IP地址格式来显示目标主机的网络地址 ;
    -n count 指定要Ping多少次,具体次数由count来指定 ;
    -l size 指定发送到目标主机的数据包的大小。
    tracert IP地址或主机名 [-d][-h maximumhops][-j host_list] [-w timeout]
    参数含义:
    -d 不解析目标主机的名字;
    -h maximum_hops 指定搜索到目标地址的最大跳跃数;
    -j host_list 按照主机列表中的地址释放源路由;
    -w timeout 指定超时时间间隔,程序默认的时间单位是毫秒。
    netstat [-r] [-s] [-n] [-a]
    参数含义:
    -r 显示本机路由表的内容;
    -s 显示每个协议的使用状态(包括TCP协议、UDP协议、IP协议);
    -n 以数字表格形式显示地址和端口;
    -a 显示所有主机的端口号。
    winipcfg [/?] [/all]
    参数含义:
    /all 显示所有的有关IP地址的配置信息;
    /batch [file] 将命令结果写入指定文件;
    /renew_ all 重试所有网络适配器;
    /release_all 释放所有网络适配器;
    /renew N 复位网络适配器 N;
    /release N 释放网络适配器 N。
    Oracle备份策略
    作为 DBA,有责任从以下三个方面维护数据库的可恢复性: ·使数据库的失效次数减到最少,从而使数据库保持最大的可用性; ·当数据库不可避免地失效后,要使恢复时间减到最少,从而使恢复的效率达到最高; ·当数据库失效后,要确保尽量少的数据丢失或根本不丢失,从而使数据具有最大的可恢复性。
    oracle触发器介绍
    一 触发器介绍
    触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力。数据库触发器有以下的作用:
    * 安全性。可以基于数据库的值使用户具有操作数据库的某种权利。
    # 可以基于时间限制用户的操作,例如不允许下班后和节假日修改数据库数据。
    # 可以基于数据库中的数据限制用户的操作,例如不允许股票的价格的升幅一次超过10%。
    * 审计。可以跟踪用户对数据库的操作。
    # 审计用户操作数据库的语句。
    # 把用户对数据库的更新写入审计表。
    * 实现复杂的数据完整性规则。
    # 实现非标准的数据完整性检查和约束。触发器可产生比规则更为复杂的限制。与规则不同,触发器可以引用列或数据库对象。例如,触发器可回退任何企图吃进超过自己保证金的期货。
    # 提供可变的缺省值。
    * 实现复杂的非标准的数据库相关完整性规则。触发器可以对数据库中相关的表进行连环更新。例如,在auths表author_code列上的删除触发器可导致相应删除在其它表中的与之匹配的行。
    # 在修改或删除时级联修改或删除其它表中的与之匹配的行。
    # 在修改或删除时把其它表中的与之匹配的行设成NULL值。
    # 在修改或删除时把其它表中的与之匹配的行级联设成缺省值。
    # 触发器能够拒绝或回退那些破坏相关完整性的变化,取消试图进行数据更新的事务。当插入一个与其主健不匹配的外部键时,这种触发器会起作用。例如,可以在books.author_code列上生成一个插入触发器,如果新值与auths.author_code列中的某值不匹配时,插入被回退。
    * 同步实时地复制表中的数据。
    * 自动计算数据值,如果数据的值达到了一定的要求,则进行特定的处理。例如,如果公司的帐号上的资金低于5万元则立即给财务人员发送警告数据。
    ORACLE与SYBASE数据库的触发器有一定的区别,下面将分别讲述这两种数据库触发器的作用和写法。
    二 ORACLE 触发器
    ORACLE产生数据库触发器的语法为:
    create [or replace] trigger 触发器名 触发时间 触发事件
    on 表名
    [for each row]
    pl/sql 语句
    其中:
    触发器名:触发器对象的名称。由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。
    触发时间:指明触发器何时执行,该值可取:
    before---表示在数据库动作之前触发器执行;
    after---表示在数据库动作之后触发器执行。
    触发事件:指明哪些数据库动作会触发此触发器:
    insert:数据库插入会触发此触发器;
    update:数据库修改会触发此触发器;
    delete:数据库删除会触发此触发器。
    表 名:数据库触发器所在的表。
    for each row:对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。
    举例:下面的触发器在更新表auths之前触发,目的是不允许在周末修改表:
    create trigger auth_secure
    before insert or update or delete //对整表更新前触发
    on auths
    begin
    if(to_char(sysdate,'DY')='SUN'
    RAISE_APPLICATION_ERROR(-20600,'不能在周末修改表auths');
    end if;
    end
    oracle--序列(SEQUENCE)
    序列是一数据库对象,利用它可生成唯一的整数。一般使用序列自动地生成主码值。
    一个序列的值是由特殊的Oracle程序自动生成,因此序列避免了在应用层实现序列而引起的性能瓶颈。
    Oracle序列允许同时生成多个序列号,而每一个序列号是唯一的。当一个序列号生成时,序列是递增,
    独立于事务的提交或回滚。允许设计缺省序列,不需指定任何子句。该序列为上升序列,由1开始,增量为1,没有上限。
    1) 建立序列命令
    CREATE SEQUENCE [user.]sequence_name
    [increment by n]
    [start with n]
    [maxvalue n | nomaxvalue]
    [minvalue n | nominvalue];
    INCREMENT BY: 指定序列号之间的间隔,该值可为正的或负的整数,但不可为0。序列为升序。忽略该子句时,缺省值为1。
    START WITH:指定生成的第一个序列号。在升序时,序列可从比最小值大的值开始,缺省值为序列的最小值。对于降序,序列可由比最大值小的值开始,缺省值为序列的最大值。
    MAXVALUE:指定序列可生成的最大值。
    NOMAXVALUE:为升序指定最大值为1027,为降序指定最大值为-1。
    MINVALUE:指定序列的最小值。
    NOMINVALUE:为升序指定最小值为1。为降序指定最小值为-1026。
    2) 更改序列命令
    ALTERSEQUENCE [user.]sequence_name
    [INCREMENT BY n]
    [MAXVALUE n| NOMAXVALUE ]
    [MINVALUE n | NOMINVALUE];
    修改序列可以:
    ? 修改未来序列值的增量。
    ? 设置或撤消最小值或最大值。
    ? 改变缓冲序列的数目。
    ? 指定序列号是否是有序。
    3) 删除序列命令
    DROP SEQUENCE [user.]sequence_name;
    从数据库中删除一序列。
    ////////////////////////////////////////////////////////////////////////////////////////
    创建一个序列号的语句:
    CREATE SEQUENCE EXAM_NO_SEQ
    START WITH 1484
    MAXVALUE 9999999999
    MINVALUE 1
    CYCLE
    CACHE 20
    NOORDER;
    /////////////////////////////////////////////////////////////////////////////////////////
    PB中取序列号的用法:
    string v_exam_no
    //获取申请序号
    SELECT exam_no_seq.nextval INTO :v_exam_no FROM dual
    using ghis_database;
    if ghis_database.SQLCODE<>0 then
    messagebox("","取检查序号出错")
    return
    end if
    触发器详解
    触发器是特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用户不能直接调用他们。
    功能:
    1、 允许/限制对表的修改
    2、 自动生成派生列,比如自增字段
    3、 强制数据一致性
    4、 提供审计和日志记录
    5、 防止无效的事务处理
    6、 启用复杂的业务逻辑 开始
    create trigger biufer_employees_department_id before insert or update of department_id
    on employees referencing old as old_value new as new_value for each row when (new_value.department_id<>80 ) begin :new_value.commission_pct :=0; end; / 触发器的组成部分: 1、 触发器名称 2、 触发语句 3、 触发器限制 4、 触发操作
    1、 触发器名称 create trigger biufer_employees_department_id 命名习惯: biufer(before insert update for each row) employees 表名 department_id 列名 2、 触发语句 比如: 表或视图上的DML语句 DDL语句 数据库关闭或启动,startup shutdown 等等 before insert or update of department_id on employees referencing old as old_value new as new_value for each row 说明:1、 无论是否规定了department_id ,对employees表进行insert的时候
    2、 对employees表的department_id列进行update的时候
    3、 触发器限制 when (new_value.department_id<>80 ) 限制不是必须的。此例表示如果列department_id不等于80的时候,触发器就会执行。 其中的new_value是代表更新之后的值。
    4、 触发操作 是触发器的主体 begin :new_value.commission_pct :=0; end;
    主体很简单,就是将更新后的commission_pct列置为0
    触发:
    insert into employees(employee_id, last_name,first_name,hire_date,job_id,email,department_id,salary,commission_pct ) values( 12345,’Chen’,’Donny’, sysdate, 12, "mailt‘donny@hotmail.com’,60,10000,.25" ‘donny@hotmail.com’,60,10000,.25);
    select commission_pct from employees where employee_id=12345;
    触发器不会通知用户,便改变了用户的输入值。
    触发器类型: 1、 语句触发器 2、 行触发器 3、 INSTEAD OF 触发器 4、 系统条件触发器 5、 用户事件触发器 1、 语句触发器 是在表上或者某些情况下的视图上执行的特定语句或者语句组上的触发器。能够与INSERT、UPDATE、DELETE或者组合上进行关联。但是无论使用什么样的组合,各个语句触发器都只会针对指定语句激活一次。比如,无论update多少行,也只会调用一次update语句触发器。 例子: 需要对在表上进行DML操作的用户进行安全检查,看是否具有合适的特权。 Create table foo(a number);
    Create trigger biud_foo Before insert or update or delete
    On foo
    Begin
    If user not in (‘DONNY’) then Raise_application_error(-20001, ‘You don’t have access to modify this table.’); End if; End; / 即使SYS,SYSTEM用户也不能修改foo表
    [试验] 对修改表的时间、人物进行日志记录。 1、 建立试验表 create table employees_copy as select *from hr.employees
    2、 建立日志表 create table employees_log( who varchar2(30), when date);
    3、 在employees_copy表上建立语句触发器,在触发器中填充employees_log 表。 Create or replace trigger biud_employee_copy Before insert or update or delete On employees_copy Begin Insert into employees_log(
    Who,when) Values( user, sysdate);
    End; / 4、 测试 update employees_copy set salary= salary*1.1; select *from employess_log; 5、 确定是哪个语句起作用? 即是INSERT/UPDATE/DELETE中的哪一个触发了触发器? 可以在触发器中使用INSERTING / UPDATING / DELETING 条件谓词,作判断: begin if inserting then ----- elsif updating then ----- elsif deleting then ------ end if; end; if updating(‘COL1’) or updating(‘COL2’) then
    ------
    end if;
    [试验] 1、 修改日志表 alter table employees_log add (action varchar2(20)); 2、 修改触发器,以便记录语句类型。 Create or replace trigger biud_employee_copy Before insert or update or delete On employees_copy Declare L_action employees_log.action%type; Begin if inserting then l_action:=’Insert’; elsif updating then l_action:=’Update’; elsif deleting then l_action:=’Delete’; else raise_application_error(-20001,’You should never ever get this error.’); Insert into employees_log( Who,action,when) Values( user, l_action,sysdate); End;
    /
    3、 测试 insert into employees_copy( employee_id, last_name, email, hire_date, job_id) values(12345,’Chen’,’Donny@hotmail’,sysdate,12); select *from employees_log

我的最新图片

Open Toolbar