posts - 8  atricles - 95  comments - 112 
没事来找我
<2009年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

最新随笔

留言簿

随笔档案

文章分类

文章档案

  •  

最新评论

2009年最新的会计法(包括外资企业会计)中英对照版和税法(包括外资企业税法) 全英文版本的也行,电话0769-82275992 (sandy zhou)
这篇文章写出了做人的一些无赖, 想做完美的人,却不得不让自己不完美! 欢迎来到我的空间。www.yuzhouzhilei.cn (在看你的md5加密介绍)
谢谢你的资料~O(∩_∩)O哈哈~ (。)
全部符合……我就不信以后找不到女朋友…… (123)
只有8不符合,哈哈,果然。 (allen)
not bad (ai)
到此一游~看也看~感觉在理~于是转了哦 (碟恋花)
照这样说~那回自己老家盖房子是最实际打算的了!!!!! (碟恋花)
只有6不符合,果然!唉! (sofa)
真的很好,谢谢老师们,你们真的很有才,很佩服你们!!! (ying)

阅读排行榜

评论排行榜

  2008年2月18日

【来源:北京新东方 刘一男】

    单词有好记的和不好记的两种。我们有一个共同的经验,当单词量扩展到一定程度的时候会遇到一个瓶颈,也就是说,有些不好记的单词,总也是记不下来,现在我根据历年六级考试出现以下难记单词的频率(同时这些单词也是新东方六千词汇单项班的同学最常向我提问的单词),我把它们的科学记忆方法详细讲解清楚,请大家在即将考试的最后这段时间,扎实地把他们记忆下来。
 
    abrupt 突然的,意外的;唐突的,鲁莽的 2次

  【一男讲词】:ab/rupt。ab-加强语气 +rupt-词根:突、破 =abrupt唐突的,突然的(突然而出)

  【刨根问底】:为什么“rupt-突、破”呢?开头辅音字母“r-小草”表示“生长、破土而出”的含义,“-upt”是词根中表音成分。

  【同类举例】:r-象“小草”形→rupt-突、破 →r-表义,upt-表音 →解释:似“小草”破土而出

  c-象“手抓”形→cept-抓、拿 →c-表义,ept-表音→accept-接受(ac-往里)

  【造词奥秘】:辅音字母“r”开头的单音节词汇有三大含义“草、长、顶破”、“跑”、“旋转”。“生长”群举例:“rise-升起”、“ripple-起涟漪”、“rust-起锈”

  【同根扩展】:erupt [i'r8pt] vi. 爆发 (e-往外 +rupt-突、破[像小草一样破地而出]=火山爆发)

  bankrupt ['b16kr4pt] n. 破产(bank-银行[本义:财产] +rupt-突、破=破产)

  absurd 荒谬的,荒唐的 2次

  【一男讲词】:ab/sur/d。ab-不+sur-过、通过 +d-的=absurd-荒谬的(不能通过,不被同意的)

  【刨根问底】:怎么记“sur-超过、通过”?由“surpass-超过(sur-超 +pass-过)”反向记。

  【再刨再问】:为什么“sur”老是代表“超过、通过”——它是“super-超、过”的缩影。

  【同根扩展】:surplus ['s4:pl4s] n.过剩,盈余(sur-超、过 +plus-加=surplus过剩、盈余)

  acute 严重的,激烈的;敏锐的;急性的 2次

  【一男讲词】:ac/ute。ac-尖角、尖的 +ute-后缀 =acute-尖锐的,敏锐的

  【刨根问底】:怎么记住“ac-尖角、尖的”——

  已知:从“angle-角度” 提取词根“ang-角,尖角”

  求证:ac=ang=尖角

  因为:记得“an=a=un-非”吧,说明“an”和“a”是可以互换的

  又因为:“c”发音类似于“g”——均读[k/g],又一次浊清互变

  所以:ac=ang=尖角

  【再刨再问】:怎么记住“ute-名词后缀或形容词后缀”——

  用“mini-词根:小 +ute-后缀=minute-分钟(一分钟就是一个小份儿)”反记。

  acknowledge 承认,承认……的权威;告知收到,确认; 5次

  【一男讲词】:ac/knowledge。ac-往里 +knowledge-知识,认识 =acknowledge-承认(“承”就是“往里”拿,往里拿一个知识——承认、认知)

  【刨根问底】:“ac”怎么既有“尖角”又有“往里”的意思呢?记住,“ac-往里”是正宗的前缀;而“ac-尖角”,只不过是“ang-角,尖角”的变体,重点强化一下吧。

  acquaint 熟悉,认识。 2次

  【一男讲词】:ac/qu/aint。ac-往里 +qu-取、获得 +aint-无义=acquaint-熟悉(取得、掌握)

  【刨根问底】:怎么记“qu-词根:取、求”——“qu”“”

  allege 断言,宣称,硬说 2次

  【一男讲词】:al/leg/e。al-加强语气 +leg-说 +e-无义 =allege-断言、宣称(就是去说)

  【刨根问底】:怎么记“leg-说”——用熟词“lecture-讲座(lect-词根:说)”去记,lect=leg。

  【再刨再问】:为什么“leg-说”——首辅音字母“l”这里代表舌头(口条、长条的),有舌

  头才能说,又比如“linguist-语言学家”,“language-语言”中的词根“ling=lang-语言”,“l=舌头”。

  ambiguous 模棱两可的 暧昧的, 不明确的 5次(且5次全部是正确答案)

  【一男讲词】:ambi/gu/ous。ambi-二、两+gu-go +ous-的=ambiguous-模棱两可(两边走)

  【刨根问底】:怎么记“ambi-二、双”——用熟词“bicycle-自行车、二轮车”记住“bi-二”。

  ambitious 有野心的,雄心勃勃的 2次

  【一男讲词】:ambi/tious。ambi-二、两 +itious-复合后缀 =ambitious-有野心的(心事二主的)

  ascend 渐渐上升,升高;攀登,登上 2次

  【一男讲词】:a/scend。a-加强语气 +scend-词根:上升 =ascend-升高

  【刨根问底】:为什么“scend-上升”——首辅音字母“sc”是单词“scale-攀登 ”的缩影。

  【再刨再问】:怎么记“scale-攀登”——scale-刻度,比例尺,等级,攀登(sc-雕刻、切割)

  【一词多义】:“scale-刻度”,“刻度”引申出了“增长”、“攀登”的含义。

  【同根扩展】:descend-下降(de-向底下,scend-攀登)

  ascribe 把……归因于,把……归属于 6次

  【一男讲词】:a/scribe。a-加强语气 +scribe-词根:写 =ascribe-归因于(写在…名下)

  【刨根问底】:为什么“scribe-写”——因为“scr”是“爪子”,用爪子来写。

  assert 肯定的说,断言;维护,坚持 2次

  【一男讲词】:as/sert。as-加强语气 +sert-插入 =assert-断言(插一杠子、打断别人)

  【刨根问底】:怎么记“sert-插入”——用熟词“insert-插入、嵌入”去记。

  【灵机一动】:“sert”谐音“射”,“射入”也类似“插入”。

  authorize 授权,批准 3次

  【一男讲词】:author/ize。author-作者 +ize-动词后缀 =authorize-批准(原作者的允许)

  barren 不生育的, 不孕的, 贫瘠的, 没有结果的, 无益的, 单调的 2次

  【一男讲词】:bar/r/en。bare-赤裸的 +r-无义双写 +en-后缀 =barren-贫瘠的(光秃的)

   bewilder 迷惑,使糊涂 3次

  【一男讲词】:be/wild/er。be-是 +wild-狂野的 +er-后缀 =bewilder-迷惑(思想狂野、乱)

  bleak 寒冷的, 阴冷的, 荒凉的, 凄凉的, 黯淡的 2次

  【一男讲词】:bl/eak。bl-blow-吹 +eak-表音成分 =bleak-寒冷(有风在吹)

  【同根扩展】:blast-爆炸的冲击波,一阵风(bl-blow-吹,ast-无义的表音成分)

  blunder 错误,大错 2次

  【一男讲词】:“blunder”象声词,模仿人跌倒时候的磕磕绊绊的声音“不郎得~不郎得~”。

  cater 满足需要,迎合;提供饮食及服务,办酒席 2次

  【一男讲词】:cat/er。cat-猫 +er-后缀 =cater-迎合(猫是一种很喜欢迎合人的动物)

  cherish 珍爱, 怀抱(希望等) 3次

  【一男讲词】:cher/ish。cher=care-关心、关爱 +ish-后缀 =cherish-珍爱

  claim 声明 2次

  【一男讲词】:cl/aim。cl=cr-叫 +aim-无义的表音成分 =claim-声明(喊叫)

  【刨根问底】:为什么“claim-词根:喊叫”——来自词根“cr-叫、喊”,而“claim-叫喊”中的“cl”正是“cr”的错写版本,关于“r/l”两个辅音字母的近亲关系本人曾多次讲解,比如汉语“乳汁[ru zhi]”经常被北方人错读成“乳汁[lu zhi]”,又如汉语的“人生[ren sheng]” 经常被南方人错读成“人生[len sheng]”。

  conceive 构想,设想 2次

  【一男讲词】:con/ceive。con-全 +ceive-抓、拿 =conceive-构想、构思(从整体上拿到)

  【刨根问底】:怎么记“ceive-抓、拿”——首辅音字母“c”象人手抓之形。

  【同根扩展】:deceive-欺骗,de-往下,ceive-抓、领,“欺骗”就是把人往底下“领、诱导”。

  conspicuous 有目共睹的,引人注目的,受人注意的 2次

  【一男讲词】:con/spic/uous。con-共 +spic-看 +uous-的 =conspicuous-有目共睹的

  constrain 强迫,勉强(某人)做某事 5次

  【一男讲词】:con/str/ain。con-共同 +str-拉扯 +ain-无义 =constrain-强迫(把不愿在一起的人强硬拉扯到一起)

  decorate 装饰,布置 2次

  【一男讲词】:dec/orate。dec-词根:美、美化 +orate-复合后缀 =decorate-装饰(就是美化)

  【刨根问底】:为什么“dec-美、美化”——“dec”来自拉丁文数字“十”,“十”就是“美”,所谓“十全十美”。

  【同根扩展】:decade-十年 ,decimal-十进制的,十进位的

  deteriorate 恶化,变坏 3次

  【一男讲词】:de/ter/iorate。de-往底下 +ter-to-去 +iorate-后缀 =deteriorate-恶化(往底下去)

  dilemma 左右为难,进退两难的窘境,困境 2次

  【一男讲词】:di/lem/m/a。di-两 +lemma-leman-情人 =dilemma-左右为难(两个情人)

  【刨根问底】:为什么“leman-情人”——来自“lemon-柠檬”,把情人昵称柠檬。

  distinction 差别,不同;区分,辨别;优秀,杰出;荣誉,优待 2次

  【一男讲词】:di/stinct/ion。di-两 +stinct-stand-站着 +ion-后缀 =distinction-不同(在两个位

  置站着,有距离,差别)

  dwell 居住, 踌躇 2次

  【一男讲词】:d/well。d-down-底下 +well-井 =dwell-居住(居住在井底)

  elapse 时间消逝,过去 2次

  【一男讲词】:e/lap/se。e-外、出 +lap-腿、走 +se-后缀 =elapse-消逝(往外走、走远)

  【刨根问底】:为什么“lap-腿”——首辅音字母“l”象腿之形。

  【造词奥秘】:l-象“长条、线”形→lap-腿、大腿(长条形的)→l-表义,ap-表音

  cl-close-关、合 →clap-鼓掌(也就是合掌) →cl-表义,ap-表音

  endeavor 尽力, 努力 2次

  【一男讲词】:en/deav/or。en-加强语气 +deav-deaf-聋子 +or-后缀 =endeavor-尽力

  (想一下,一个聋子尽力在听的样子)

  endow 资助,捐赠,向……捐钱;给予,赋予,认为……有某种特质 3次

  【一男讲词】:en/dow。en-加强语气 +dow-down-给、倒 =endow-赠与(倒给他)

  eternal 永恒的,不变的 2次

  【一男讲词】:e/tern/al。e-外 +tern-turn +al-的 =eternal-永恒的(一直往外旋转的)

  explicit 外在的, 清楚的, 直率的, (租金等)直接付款的 2次

  【一男讲词】:ex/pl/icit。ex-往外 +pl-说 +icit-的 =explicit-直率的(往外说的)

  【刨根问底】:怎么记“pl-说”——用熟词“explain-解释(ex-外,pl-说,ain-无义——“解释”就是往外说 )”

  extravagant 过度的,挥霍的,放纵的 2次

  【一男讲词】:extra/vag/ant。extra-往外 +vag-走 +ant-的 =extravagant-过渡的(往外走的、

  走出去的)

  fascinate 使着迷, 使神魂颠倒, 入迷, 极度迷人的 2次

  【一男讲词】:fasc/inate。fasc-法西斯,束棒,权力的象征 +inate-后缀 =fascinate-迷人

  【刨根问底】:Fasces-法西斯、束棒,是权力的象征,对人尤其男人有强烈的吸引力。

  feasible 可行的,可用的,可能的 2次

  【一男讲词】:feas/ible。feas-做 +ible-能的 =feasible-可行的(可以做、可以操作的)

  feeble 虚弱的,虚弱的 3次

  【一男讲词】:f/eeble。f-fail-fall-倒下、落下 +eeble-ible-能的 =feeble-虚弱的、要倒的

  flutter 鼓翼, 飘动, 悸动, 乱跳, 烦扰 2次

  【一男讲词】:flut/t/er。flut-fly +t-无义双写 +er-后缀 =flutter-飘动(飞动)

  glitter 闪闪发光, 闪烁, 闪光 2次

  【一男讲词】:glit/t/er。glit-词根:闪光 +t-无义双写 +er-后缀 =glitter-闪烁

  【造词秘密】:gl-glass玻璃-glow发光-glory-光荣→glit-词根:闪光→gl-表义,it-表音

  s-seat座位-sure定→sit-坐 →s-表义,it-表音

  homogeneously 类似地;同类地;同性质地 2次

  【一男讲词】:homo/gene/ously。homo-相同 +gene-基因 +ously-地=homogeneously-同类的

  illusion 幻想 幻觉 错觉,假象:对现实错误的看法 3次

  【一男讲词】:il/lus/ion。il-进入 +lus-词根:光 +ion-后缀 =illusion-幻觉(进入光,强光直

  下产生幻觉)

  【造词奥秘】:l-象“长条、线”形→lus-光线(光线是长条形的)→l-表义,us-表音

  【同根扩展】:luxury-奢侈、奢侈品,(lux-光,ury-后缀,奢侈品都是放光的),lux=lus

  image 像, 形象, 印象,映像, 典型 2次

  【一男讲词】:im/age。im-in-进去 +age-名词后缀 =image-印象,映像(印进去才有印象,

  才呈象)

  【刨根问底】:为什么“im-in-进去”——这是“m/n”的误写,举例证明,summer-夏天(sum=sun)

  implicit 暗示的, 盲从的, 含蓄的, 固有的, 不怀疑的, 绝对的 2次

  【一男讲词】:im/pl/icit。im-里面 +pl-说话 +icit-的 =implicit-含蓄的(在里面说)

  【刨根问底】:怎么记“pl-说”——用熟词“explain-解释(ex-外,pl-说,ain-无义——“解释”就是往外说 )”

  impulse 推动, 刺激, 冲动, 推动力 vt.推动 3次

  【一男讲词】:im/pulse。im-往里 +pulse-push-推 =impulse-推动

  ingenious 有发明天才的,机敏的,灵巧的 3次

  【一男讲词】:in/gen/ious。in-内部 +genius-天才 +ious-的 =ingenious-灵巧的(在天才肚子

  里的东西,天才所拥有的东西)

  inherent 固有的, 内在的, 与生俱来的 2次

  【一男讲词】:in/her/ent。in-加强语气 +her-继承 +ent-的 =inherent-固有的(遗传来的)

  【刨根问底】:heir-继承人(he-他,ir-后缀,继承人主要是男的),heir=her-继承。

  instantaneous 瞬间的, 即刻的, 即时的 2次

  【一男讲词】:instant/aneous。instant-瞬间的 +aneous-复合后缀 =instantaneous-瞬间的

  【刨根问底】:in-不 +st-stop-停 +ant-的 = instant-瞬间的(不停的,一刻不停的,瞬间的)

  integrate 使成整体, 使一体化, 求...的积分, 结合 2次

  【一男讲词】:in/teg/r/ate。in-未 +teg-touch-碰 +r-无义 +ate-动词后缀= integrate-使成为整体

  【造词奥秘】:l-象“长条”形→leg-腿(腿是长条形的)→l-表义,eg-表音

  t-touch-碰、触→teg-词根:碰、触 →t-表义,eg-表音

  integrity 正直, 诚实, 完整, 完全, 完整性 2次

  【一男讲词】:in/teg/r/ity。in-未 +teg-touch-碰 +r-无义 +ity-后缀 =integrity-完整(没有碰过)

  intensify 加强,加紧 3次

  【一男讲词】:in/tens/ify。in-加强语气 +tense-紧的 +ify-后缀 =intensify-加紧、加强

  【刨根问底】:为什么“tense-紧”——来自词根“tend-伸、拉伸”,越拉越紧。

  intervene 干涉,干预;干扰,阻挠 3次

  【一男讲词】:inter/ven/e。inter-中间 +ven-走 +e-无义 =intervene-干预(走到别人中间)

  【刨根问底】:为什么“ven-走”——“ven”是“went”的变体。

  intricate 复杂的, 错综的, 难以理解的,精巧的 4次

  【一男讲词】:in/tric/ate。in-内部 +trick-诡计 +ate-后缀 =intricate-复杂的(如诡计一样复杂)

  【刨根问底】:怎么记“trick-诡计”——来自动词“trick-哄骗”,首辅音字母“tr-拉扯”,“哄骗”就是去“拉扯,诱导”别人。

  【再刨再问】:怎么记“tr-拉扯”?用“tractor-拖拉机”去反着记。

  【造词奥秘】:tr-拉扯 →trick-诱导、牵引、哄骗 →tr-表义,ick-表音

  l-象“长条”形 →lick-舔(l-舌头) →l-表义,ick-表音

  intrinsic (指价值、性质)固有的, 内在的, 本质的 5次

  【一男讲词】:intr/ins/ic。intr-inter +ins-inside +ic-de =intrinsic-内在的

  intuition 直觉, 直觉的知识 4次

  【一男讲词】:in/tu/ition。in-不 +tu-教 +ition-复合后缀 =intuition-知觉(不需要教的东西)

  【刨根问底】:为什么“tu-教”——来自“tut-教”,在“tut”中表示含义的是首辅音字母

  “t”,t-teach-tell-talk-讲,说教。

  【造词奥秘】:t-teach-教 →tut-词根:讲 →t-表义,ut-表音→tutor-家庭教师

  m-move-动→mut-词根:移动→m-表义,ut-表音→mutual-彼此的、互动的

  invalid 无效的,有病的,无能力的,无价值的 2次

  【一男讲词】:in/val/id。in-无 +val-wealth-财富、价值 +id-的 =invalid-无效的、无价值的

  【刨根问底】:为什么“val=wealth”——这是一次关于“v/w”的近亲字母错写现象,比如“victory-胜利”=“win-胜利”,又如:比如汉语“晚上[wan shang]”经常被北方人错读成“晚上[van shang]”。

  magnify 夸大,放大,扩大 2次

  【一男讲词】:mag/n/ify。mag-大 +n-无义 +ify-动词后缀 =magnify-夸大、放大

  【刨根问底】:怎么记“mag-大”——用熟词“major-绝大多数”来记“maj-大”,mag=maj。

  manifest 明显的;出现, 表明, 证明 4次

  【一男讲词】:man/i/fest。man-词根:手 +i-无义 +fest-触、碰 =manifest-明显的(触手可及

  的,能用手碰得到的——明白、明显的)

  【刨根问底】:怎么记“man-词根:手”——用熟词“manual-手的;手册”以及熟词“manufacture-手工制造业”来记忆词根“man-词根:手”。

  mingle (使)混合 4次

  【一男讲词】:ming/le。ming=mix-混乱 +le-后缀 =mingle-混乱

  【刨根问底】:为什么可以“ming=mix”——因为二者都是用开头辅音字母“m-move-动”表示的混乱的含义,“动”就是“乱”,所谓“动乱”。

  notorious adj.恶名昭箸的,声名狼藉的 2次

  【一男讲词】:not/orious。note-笔记、标注 +orious-的 =notorious-著名的、臭名昭著的

  obscure 暗的, 朦胧的, 模糊的, 晦涩的 vt. 使暗, 使不明显 7次

  【一男讲词】:ob/sc/ure。ob-不 +sc-看 +ure-后缀 =obscure-模糊的(看不清的)

  【刨根问底】:怎么记“sc-看”——用熟词“scan-扫描、浏览”来记忆。

  【造词奥秘】:p-片、平板→pan-平底锅 →p-表义,an-表音

  cl-合、并 →clan-家族 →cl-表义,an-表音

  sc-看 →scan-扫描、浏览→sc-表义,an-表音

  offensive adj.冒犯的,攻击的 2次

  【一男讲词】:of/fens/ive。of-出+fense-剑ive-后缀 =offensive-攻击的(出剑、出手)

  【刨根问底】:为什么“fenc(s)e-剑”——首辅音字母“f”象竖立的“击剑”之形。

  optimistically 乐观地 2次

  【一男讲词】:optim/istically。optim-最佳的 +istically-复合后缀 =optimistically-乐观的

  【刨根问底】:怎么记“optim-最佳的”——用熟词“option-选择”知道“opt-选择”,而“optim”原义指的是“选择出来的”,因此有“optim-最佳”的含义

  paradox 似非而是的论点, 自相矛盾的话 3次

  【一男讲词】:para/dox。para-旁、反 +dox-说 =paradox-自相矛盾的话(反着说)

  【刨根问底】:怎么记“para-旁、反”——用熟词“paragraph-段、节 (para-旁,graph-写:写完一些在旁边再写,分开写,就是‘段’的来历)”来记。

  【再刨再问】:怎么记“dox-说”——用熟词“document-公文、文件(doc-说、文)”来记。

  permeate vt.弥漫, 渗透, 透过, 充满 vi. 透入 4次

  【一男讲词】:per/me/ate。per-到处 +me-词根:弥漫 +ate-动词后缀 =permeate-到处弥漫

  【刨根问底】:怎么记“me-词根:弥漫”——谐音:“me-弥”

  perspective 透视的 n.展望,透视画法 2次

  【一男讲词】:per/spect/ive。per-到处、贯穿 +spect-看 +ive-后缀 =perspective-透视

  【刨根问底】:怎么记“spect-看”——用熟词“inspect-检查(in-进入,spect-看)”

  【再刨再问】:为什么“spect-看”——来自间单词“spy-间谍(间谍就是到处看的人)”

  perpetual 永久的

  【一男讲词】:per/pet/ual。per-贯穿、一直 +pet-追求 +ual-的 =perpetual-永久的(一直追求)

  【刨根问底】:为什么“pet-追求”——来自词根“ped-脚板、足、走”

  【再刨再问】:为什么“ped-足”——首辅音字母“p”象“脚掌”之形

  permanent 持久的,永久的,不变的 5次

  【一男讲词】:per/man/ent。per-一直 +man-词根:手 +ent-的 =permanent-持久的(一直用手拿着的,没有放手的,注意:“持久”的“持”就是用手的意思)

  【刨根问底】:怎么记“man-词根:手”——用熟词“manual-手的;手册”以及熟词“manufacture-手工制造业”来记忆词根“man-词根:手”。

  persistent 坚持不懈的,执意的:拒绝放弃或听任的;顽固坚持的 5次

  【一男讲词】:per/sist/ent。per-一直 +sist-词根:站立+ent-的 =persistent-不懈的(一直站着)

  porch 门廊, 走廊 2次

  【一男讲词】:p/orch。p-平的 +orch-表音成分 =porch-走廊(走廊是一段平坦的路)

  【造词奥秘】:p-片、平→porch-走廊(走廊的是一段平坦的路) →p-表义,orch-表音

  t-turn-拧→torch-火把(最初火把由杂草拧结而成)→ t-表义,orch-表音

  preliminary 初步的,预备的 2次

  【一男讲词】:pre/lim/inary。pre-在前 +lim-limit-界限 +inary-复合后缀 =preliminary-初步的预备的(在界限之前的,还没入门的)

  premium 额外费用, 奖金, 奖赏, 保险费, (货币兑现的)贴水 2次

  【一男讲词】:pre/m/ium。pre-在前 +m-money +ium-后缀 =premium-保险费(事先预留的钱)

  priority 优先权,重点;优先考虑的事 2次

  【一男讲词】:pri/ority。pri-在前 +ority-复合后缀 =priority-优先

  prone 倾向于 2次

  【一男讲词】:pr/one。pr-向前 +one-无义表音成分 =prone-倾向于(向前倾斜)

  reclaim 要回;开垦荒地,回收 3次

  【一男讲词】:re/claim。re-往回 +claim-词根:喊叫 =reclaim-要回(往回喊,比如“拿回来!!”)

  【刨根问底】:为什么“claim-词根:喊叫”——来自词根“cr-叫、喊”,而“claim-叫喊”中的“cl”正是“cr”的错写版本,关于“r/l”两个辅音字母的近亲关系本人曾多次讲解,比如汉语“乳汁[ru zhi]”经常被北方人错读成“乳汁[lu zhi]”,又如汉语的“人生[ren sheng]” 经常被南方人错读成“人生[len sheng]”。

  【造词奥秘】:那为什么“cr-叫”——在熟词“cry-哭、嚎”、“critic-批评、叫骂”、“crow-鸡叫”、“crazy-疯狂”中去体会并记忆。

  reconcile 使和解, 使和谐, 使顺从 4次

  【一男讲词】:re/concil/e。re-又、再 +concil-consult-咨询、开会 +e-无义 =reconcile-使和解

  (一再、反复地开会、商讨,使双方和解)

  release 释放, 解放, 放弃, 让与, 免除, 发表 2次

  【一男讲词】:re/lease。re-返回 +lease-租约、约=release-释放、解放(从约定中出来、脱身)

  【刨根问底】:为什么“lease-租借、租约”——首辅音字母“l”就是“lend-借”的缩影。

  【造词奥秘】:l-lend-借 →lease-租借、租约 →l-表义,ease-表音

  pl-说 →please-请、邀请(用语言相邀) →pl-表义,ease-表音

  cr=gr-grow→increase-增长(in-往里、继续) →cr-表义,ease-表音

  remedy 治疗,矫正(坏事,缺点) 3次

  【一男讲词】:re/med/y。re-往回 +med=mend-维修 +y-后缀 =remedy-治疗(往回维修)

  retrieve 找回,重新得到 2次

  【一男讲词】:re/trieve。re-往回 +trieve-取 =retrieve-找回

  【刨根问底】:怎么记“trieve-取”——“trieve”谐音“取”。

  reproach 责备 2次

  【一男讲词】:re/proach。re-往回、折返 +proach-词根:路 =reproach-责备(折返某人的路,使之受挫折)

  【刨根问底】:为什么“proach-路”——首辅音字母“pr-向前”,“路”当然是“向前”的。

  【造词奥秘】: pr-前-向前 →proach-路(向前延伸的东西)→pr-表义,oach-表音

  c-car-车 →coach-马车(马车也是车) →c-表义,oach-表音

  l-象“长条”形 →loach-泥鳅(泥鳅是长条形) →l-表义,oach-表音

  respectable 可敬的 2次

  【一男讲词】:respect/able。respect-尊敬 +able-能的 =respectable-值得尊敬的

  respective 各自的,分别的 2次

  【一男讲词】:respect/ive。respect-尊敬 +ive-的 =respective-各自的(尊重每一个个体)

  respectful 恭敬的 2次

  【一男讲词】:respect/ful。respect-尊敬 +ful-的样子 =respectful-恭敬的样子

  revenge 复仇;为…报复 2次

  【一男讲词】:re/ven/ge。re-往回 +ven-went-走 +ge=age-后缀 =revenge-复仇(走回来,复

  仇,回来找你算账)

  【刨根问底】:为什么“ven-went-走”——这是一次关于“v/w”的近亲字母错写现象,比如“victory-胜利”=“win-胜利”,又如:比如汉语“晚上[wan shang]”经常被北方人错读成“晚上[van shang]”。

  revelation 泄露,启示 2次

  【一男讲词】:revelation revelation revelation

  rigorous 严密的,缜密的;严格的,严厉的 2次

  【一男讲词】:rig/orous。rig-词根:直 +orous-复合后缀 =rigorous-严厉的(站得笔直)

  【刨根问底】:为什么“rig-词根:直”——首辅音字母“r”是“right-正确”的缩影。

  scratch 抓,挠,搔 2次

  【一男讲词】:scr/atch。scr-爪子 +atch-表音成分 =scratch-抓

  【造词奥秘】:scr-词根:爪子→scratch-抓 →scr-表义,atch-表音

  p-片、成张的 →patch-补丁、布片→p-表义,atch-表音

  h-hen-母鸡 →hatch-孵化 →h-表义,atch-表音

  scrape 刮,擦 2次

  【一男讲词】:scr/ape。scr-爪子 +ape-表音成分 =scrape-刮

  【造词奥秘】:scr-词根:爪子→scrape-刮,擦 →scr-表义,ape-表音

  t-turn-转、旋转→tape-磁带,录音带→t-表义,ape-表音

  simulate 模拟, 模仿, 假装, 冒充 2次

  【一男讲词】:sim/ul/ate。sim-same +ul-连接成分 +ate-后缀 =simulate-模拟(所谓“模拟、模仿”就是与之相同)

  simultaneous 同时的, 同时发生的 simultaneously同时地 4次

  【一男讲词】:simul/tane/ous。simul=same +tane-take place-发生 +ous-的 =simultaneous

  skeptical 怀疑的 3次

  【一男讲词】:skept/ical。skept-词根:看 +ical-的 =skeptical=怀疑的(怀疑谁会盯着他看)

  【刨根问底】:为什么“skept-词根:看”——首辅音字母“sk”就是“sc-看”。

  spontaneous 自发的, 自然产生的 4次

  【一男讲词】:spon/tane/ous。spon-跳 +tane-take palce –发生 +ous-的 =spontaneous-自发的

  【刨根问底】:怎么记“spon-跳”——“spon”谐音“死蹦”。

  stagger 口吃, 结巴着说出, 结结巴巴地说 2次

  【一男讲词】:stag/g/er。stag-词根:站、停 +g-无义双写 +er-后缀 =stagger-结巴(结巴就

  是,说话喜欢停顿,说话停停)

  【刨根问底】:为何“stag-词根:站、停”——首字母“st”是“stand-站、stop-停”的缩影。

  subtle 狡猾的, 敏感的, 微妙的, 精细的, 稀薄的 2次

  【一男讲词】:subtle subtle subtle

  summit 顶点, 最高阶层 2次

  【一男讲词】:sum/m/it。sum-sun-太阳 +m-无义双写 +it-后缀 =summit-顶点(太阳是顶点)

  【刨根问底】:为什么“sum-sun-太阳”——这是关于近亲辅音字母“m/n”错写的现象,在英语书写历史上,多次出现“m/n”互讹的事实,比如“summer-夏天”中的“sum”也是“sun-太阳”的错写版本。

  suspicious 可疑的, 怀疑的 2次

  【一男讲词】:su/spic/ious。su-sub-下面 +spic-看 +ious-的 =suspicious-怀疑的(从低下偷偷看、偷偷瞄对方的脸色——怀疑)

  【刨根问底】:为什么“spic-看”——spic=spect-词根:看。

  surplus 多余的,剩余的 3次

  【一男讲词】:sur/plus。sur-super-超 +plus-加 =surplus-过剩(连超带加)

  threshold 开始, 开端, 极限 2次

  【一男讲词】:thres/hold。thres=thread +hold-阻挡、阻止 =threshold-门槛(挡门的线、木条)trivial 琐细的、琐碎的,不重要的 6次

  【一男讲词】:tr/ivial。tri=three-三、多 +ivial-复合后缀 =trivial-琐细的、繁杂的

  tumble 翻倒,摔倒

  【一男讲词】:tum/ble。tum-turn=旋转 +ble-后缀 =tumble-摔倒(翻了、滚了)

  turbulent 狂暴的,动乱的 2次

  【一男讲词】:tur/bul/ent。tur-旋转 +bul-公牛 +ent-的 =turbulent-狂暴的(旋转的公牛)

  vulnerable 易受伤的,脆弱的 3次

  【一男讲词】:vuln/erable。vuln=wound-伤 +erable-复合后缀 =vulnerable-易受伤的

  【刨根问底】:为什么“vuln=wound-伤”?这是又一次关于“v/w”的近亲字母错写现象,比如“victory-胜利”=“win-胜利”,又如:比如汉语“晚上[wan shang]”经常被北方人错读成“晚上[van shang]”。

  vulgar 粗俗的,平民的 2次

  【灵机一动】:“vulgar”谐音“五哥”,胡编:我五哥这个人很粗俗!

  warrant 授权令;正当理由,根据;证明……是正当的 2次

  【一男讲词】:war/r/ant。war-ward-保卫 +r-无义双写 +ant-的 =warrant-授权的(受到保护的)【刨根问底】:怎么记住“ward-保卫、看守”——首字母“w”是“watch-看”的缩影,而

  “-ard”无非是词根中的表音成分,正是“w-看”的含义决定了“ward-看守”。

  【造词奥秘】:w-watch-看→ward-保卫、守卫、看守 →w-表义,ard-表音

  h-high-高 →hard-难(高难)、硬(密度高)→h-表义,ard-表音

 

posted @ 2008-02-18 23:48 克林顿 阅读(243) | 评论 (0)编辑 收藏
  2007年11月21日
本文更多将会介绍三思在日常中经常会用到的,或者虽然很少用到,但是感觉挺有意思的一些函数。分二类介绍,分别是:

  著名函数篇-经常用到的函数

  非著名函数篇-即虽然很少用到,但某些情况下却很实用

  注:N表示数字型,C表示字符型,D表示日期型,[]表示内中参数可被忽略,fmt表示格式。

  单值函数在查询中返回单个值,可被应用到select,where子句,start with以及connect by 子句和having子句。

  (一).数值型函数(Number Functions)

  数值型函数输入数字型参数并返回数值型的值。多数该类函数的返回值支持38位小数点,诸如:COS, COSH, EXP, LN, LOG, SIN, SINH, SQRT, TAN, and TANH 支持36位小数点。ACOS, ASIN, ATAN, and ATAN2支持30位小数点。

  1、MOD(n1,n2) 返回n1除n2的余数,如果n2=0则返回n1的值。

  例如:SELECT MOD(24,5) FROM DUAL;

  2、ROUND(n1[,n2]) 返回四舍五入小数点右边n2位后n1的值,n2缺省值为0,如果n2为负数就舍入到小数点左边相应的位上(虽然oracle documents上提到n2的值必须为整数,事实上执行时此处的判断并不严谨,即使n2为非整数,它也会自动将n2取整后做处理,但是我文档中其它提到必须为整的地方需要特别注意,如果不为整执行时会报错的)。

  例如:SELECT ROUND(23.56),ROUND(23.56,1),ROUND(23.56,-1) FROM DUAL;

  3、TRUNC(n1[,n2] 返回截尾到n2位小数的n1的值,n2缺省设置为0,当n2为缺省设置时会将n1截尾为整数,如果n2为负值,就截尾在小数点左边相应的位上。

  例如:SELECT TRUNC(23.56),TRUNC(23.56,1),TRUNC(23.56,-1) FROM DUAL;

  (二).字符型函数返回字符值(Character Functions Returning Character Values)

  该类函数返回与输入类型相同的类型。

  ? 返回的CHAR类型值长度不超过2000字节;

  ? 返回的VCHAR2类型值长度不超过4000字节;

  如果上述应返回的字符长度超出,oracle并不会报错而是直接截断至最大可支持长度返回。

  ? 返回的CLOB类型值长度不超过4G;

  对于CLOB类型的函数,如果返回值长度超出,oracle不会返回任何错误而是直接抛出错误。

  1、LOWER(c) 将指定字符串内字符变为小写,支持CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB,NCLOB类型

  例如:SELECT LOWER('WhaT is tHis') FROM DUAL;

  2、UPPER(c) 将指定字符串内字符变为大写,支持CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB,NCLOB类型

  例如:SELECT UPPER('WhaT is tHis') FROM DUAL;

  3、LPAD(c1,n[,c2]) 返回指定长度=n的字符串,需要注意的有几点:

  ? 如果n

  ? 如果n>c1.length and c2 is null,以空格从左向右补充字符长度至n并返回;

  ? 如果n>c1.length and c2 is not null,以指定字符c2从左向右补充c1长度至n并返回;

  例如:SELECT LPAD('WhaT is tHis',5),LPAD('WhaT is tHis',25),LPAD('WhaT is tHis',25,'-') FROM DUAL;

  最后大家再猜一猜,如果n<0,结果会怎么样

  4、RPAD(c1,n[,c2]) 返回指定长度=n的字符串,基本与上同,不过补充字符是从右向左方向正好与上相反;

  例如:SELECT RPAD('WhaT is tHis',5),RPAD('WhaT is tHis',25),RPAD('WhaT is tHis',25,'-') FROM DUAL;

  5、TRIM([[LEADING||TRAILING||BOTH] c2 FROM] c1) 哈哈,被俺无敌的形容方式搞晕头了吧,这个地方还是看图更明了一些。

  看起来很复杂,理解起来很简单:

  ? 如果没有指定任何参数则oracle去除c1头尾空格

  例如:SELECT TRIM(' WhaT is tHis ') FROM DUAL;

  ? 如果指定了c2参数,则oracle去掉c1头尾c2(这个建议细致测试,有多种不同情形的哟)

  例如:SELECT TRIM('W' FROM 'WhaT is tHis w W') FROM DUAL;

  ? 如果指定了leading参数则会去掉c1头部c2

  例如:SELECT TRIM(leading 'W' FROM 'WhaT is tHis w W') FROM DUAL;

  ? 如果指定了trailing参数则会去掉c1尾部c2

  例如:SELECT TRIM(trailing 'W' FROM 'WhaT is tHis w W') FROM DUAL;

  ? 如果指定了both参数则会去掉c1头尾c2(跟不指定有区别吗?没区别!)

  例如:SELECT TRIM(both 'W' FROM 'WhaT is tHis w W') FROM DUAL;

  注意:c2长度=1

  6、LTRIM(c1[,c2]) 千万表以为与上面那个长的像,功能也与上面的类似,本函数是从字符串c1左侧截取掉与指定字符串c2相同的字符并返回。如果c2为空则默认截取空格。

  例如:SELECT LTRIM('WWhhhhhaT is tHis w W','Wh') FROM DUAL;

  7、RTRIM(c1,c2)与上同,不过方向相反

  例如:SELECT RTRIM('WWhhhhhaT is tHis w W','W w') FROM DUAL;

  8、REPLACE(c1,c2[,c3]) 将c1字符串中的c2替换为c3,如果c3为空,则从c1中删除所有c2。

  例如:SELECT REPLACE('WWhhhhhaT is tHis w W','W','-') FROM DUAL;

  9、SOUNDEX(c) 神奇的函数啊,该函数返回字符串参数的语音表示形式,对于比较一些读音相同,但是拼写不同的单词非常有用。计算语音的算法如下:

  ? 保留字符串首字母,但删除a、e、h、i、o、w、y。

  ? 将下表中的数字赋给相对应的字母:

  1:b、f、p、v

  2:c、g、k、q、s、x、z

  3:d、t

  4:l

  5:m、n

  6:R

  ? 如果字符串中存在拥有相同数字的2个以上(包含2个)的字母在一起(例如b和f),或者只有h或w,则删除其他的,只保留1个;

  ? 只返回前4个字节,不够用0填充

  例如:SELECT SOUNDEX('dog'),soundex('boy') FROM DUAL;

  10、SUBSTR(c1,n1[,n2]) 截取指定长度的字符串。稍不注意就可能充满了陷阱的函数。

  n1=开始长度;

  n2=截取的字符串长度,如果为空,默认截取到字符串结尾;

  ? 如果n1=0 then n1=1

  ? 如果n1>0,则oracle从左向右确认起始位置截取

  例如:SELECT SUBSTR('What is this',5,3) FROM DUAL;

  ? 如果n1<0,则oracle从右向左数确认起始位置

  例如:SELECT SUBSTR('What is this',-5,3) FROM DUAL;

  ? 如果n1>c1.length则返回空

  例如:SELECT SUBSTR('What is this',50,3) FROM DUAL;

  然后再请你猜猜,如果n2<1,会如何返回值呢

  11、TRANSLATE(c1,c2,c3) 就功能而言,此函数与replace有些相似。但需要注意的一点是,translate是绝对匹配替换,这点与replace函数具有非常大区别。什么是绝对匹配替换呢?简单的说,是将字符串c1中按一定的格式c2替换为c3。如果文字形容仍然无法理解,我们通过几具实例来说明:

  例如:

  SELECT TRANSLATE('What is this','','-') FROM DUAL;

  SELECT TRANSLATE('What is this','-','') FROM DUAL;

  结果都是空。来试试这个:

  SELECT TRANSLATE('What is this',' ',' ') FROM DUAL;

  再来看这个:

  SELECT TRANSLATE('What is this','ait','-*') FROM DUAL;

  是否明白了点呢?Replace函数理解比较简单,它是将字符串中指定字符替换成其它字符,它的字符必须是连续的。而translate中,则是指定字符串c1中出现的c2,将c2中各个字符替换成c3中位置顺序与其相同的c3中的字符。明白了?Replace是替换,而translate则像是过滤。

  (三).字符型函数返回数字值(Character Functions Returning Number Values)

  本类函数支持所有的数据类型

  1、INSTR(c1,c2[,n1[,n2]]) 返回c2在c1中位置

  ? c1:原字符串

  ? c2:要寻找的字符串

  ? n1:查询起始位置,正值表示从左到右,负值表示从右到左 (大小表示位置,比如3表示左面第3处开始,-3表示右面第3处开始)。黑黑,如果为0的话,则返回的也是0

  ? n2:第几个匹配项。大于0

  例如:SELECT INSTR('abcdefg','e',-3) FROM DUAL;

  2、LENGTH(c) 返回指定字符串的长度。如果

  例如:SELECT LENGTH('A123中') FROM DUAL;

  猜猜SELECT LENGTH('') FROM DUAL;的返回值是什么

  (四).日期函数(Datetime Functions)

  本类函数中,除months_between返回数值外,其它都将返回日期。

  1、ADD_MONTHS() 返回指定日期月份+n之后的值,n可以为任何整数。

  例如:SELECT ADD_MONTHS(sysdate,12),ADD_MONTHS(sysdate,-12) FROM DUAL;

  2、CURRENT_DATE 返回当前session所在时区的默认时间

  例如:

  SQL> alter session set nls_date_format = 'mm-dd-yyyy' ;

  SQL> select current_date from dual;

  3、SYSDATE 功能与上相同,返回当前session所在时区的默认时间。但是需要注意的一点是,如果同时使用sysdate与current_date获得的时间不一定相同,某些情况下current_date会比sysdate快一秒。经过与xyf_tck(兄台的大作ORACLE的工作机制写的很好,深入浅出)的短暂交流,我们认为current_date是将current_timestamp中毫秒四舍五入后的返回,虽然没有找到文档支持,但是想来应该八九不离十。同时,仅是某些情况下会有一秒的误差,一般情况下并不会对你的操作造成影响,所以了解即可。

  例如:SELECT SYSDATE,CURRENT_DATE FROM DUAL;

  4、LAST_DAY(d) 返回指定时间所在月的最后一天

  例如:SELECT last_day(SYSDATE) FROM DUAL;

  5、NEXT_DAY(d,n) 返回指定日期后第一个n的日期,n为一周中的某一天。但是,需要注意的是n如果为字符的话,它的星期形式需要与当前session默认时区中的星期形式相同。

  例如:三思用的中文nt,nls_language值为SIMPLIFIED CHINESE

  SELECT NEXT_DAY(SYSDATE,5) FROM DUAL;

  SELECT NEXT_DAY(SYSDATE,'星期四') FROM DUAL;

  两种方式都可以取到正确的返回,但是:

  SELECT NEXT_DAY(SYSDATE,'Thursday') FROM DUAL;

  则会执行出错,提供你说周中的日无效,就是这个原因了。

  6、MONTHS_BETWEEN(d1,d2) 返回d1与d2间的月份差,视d1,d2的值大小,结果可正可负,当然也有可能为0

  例如:

  SELECT months_between(SYSDATE, sysdate),

  months_between(SYSDATE, add_months(sysdate, -1)),

  months_between(SYSDATE, add_months(sysdate, 1))

  FROM DUAL;

  7、ROUND(d[,fmt]) 前面讲数值型函数的时候介绍过ROUND,此处与上功能基本相似,不过此处操作的是日期。如果不指定fmt参数,则默认返回距离指定日期最近的日期。

  例如:SELECT ROUND(SYSDATE,'HH24') FROM DUAL;

  8、TRUNC(d[,fmt]) 与前面介绍的数值型TRUNC原理相同,不过此处也是操作的日期型。

  例如:SELECT TRUNC(SYSDATE,'HH24') FROM DUAL;

  (五).转换函数(Conversion Functions)

  转换函数将指定字符从一种类型转换为另一种,通常这类函数遵循如下惯例:函数名称后面跟着待转换类型以及输出类型。

  1、TO_CHAR() 本函数又可以分三小类,分别是

  ? 转换字符->字符TO_CHAR(c):将nchar,nvarchar2,clob,nclob类型转换为char类型;

  例如:SELECT TO_CHAR('AABBCC') FROM DUAL;

  ? 转换时间->字符TO_CHAR(d[,fmt]):将指定的时间(data,timestamp,timestamp with time zone)按照指定格式转换为varchar2类型;

  例如:SELECT TO_CHAR(sysdate,'yyyy-mm-dd hh24:mi:ss') FROM DUAL;

  ? 转换数值->字符TO_CHAR(n[,fmt]):将指定数值n按照指定格式fmt转换为varchar2类型并返回;

  例如:SELECT TO_CHAR(-100, 'L99G999D99MI') FROM DUAL;

  2、TO_DATE(c[,fmt[,nls]]) 将char,nchar,varchar2,nvarchar2转换为日期类型,如果fmt参数不为空,则按照fmt中指定格式进行转换。注意这里的fmt参数。如果ftm为'J'则表示按照公元制(Julian day)转换,c则必须为大于0并小于5373484的正整数。

  例如:

  SELECT TO_DATE(2454336, 'J') FROM DUAL;

  SELECT TO_DATE('2007-8-23 23:25:00', 'yyyy-mm-dd hh24:mi:ss') FROM DUAL;

  为什么公元制的话,c的值必须不大于5373484呢?因为Oracle的DATE类型的取值范围是公元前4712年1月1日至公元9999年12月31日。看看下面这个语句:

  SELECT TO_CHAR(TO_DATE('9999-12-31','yyyy-mm-dd'),'j') FROM DUAL;

  3、TO_NUMBER(c[,fmt[,nls]]) 将char,nchar,varchar2,nvarchar2型字串按照fmt中指定格式转换为数值类型并返回。

  例如:SELECT TO_NUMBER('-100.00', '9G999D99') FROM DUAL;

  (六).其它辅助函数(Miscellaneous Single-Row Functions)

  1、DECODE(exp,s1,r1,s2,r2..s,r[,def]) 可以把它理解成一个增强型的if else,只不过它并不通过多行语句,而是在一个函数内实现if else的功能。

  exp做为初始参数。s做为对比值,相同则返回r,如果s有多个,则持续遍历所有s,直到某个条件为真为止,否则返回默认值def(如果指定了的话),如果没有默认值,并且前面的对比也都没有为真,则返回空。

  毫无疑问,decode是个非常重要的函数,在实现行转列等功能时都会用到,需要牢记和熟练使用。

  例如:select decode('a2','a1','true1','a2','true2','default') from dual;

  2、GREATEST(n1,n2,...n) 返回序列中的最大值

  例如:SELECT GREATEST(15,5,75,8) "Greatest" FROM DUAL;

  3、LEAST(n1,n2....n) 返回序列中的最小值

  例如:SELECT LEAST(15,5,75,8) LEAST FROM DUAL;

  4、NULLIF(c1,c2)

  Nullif也是个很有意思的函数。逻辑等价于:CASE WHEN c1 = c2 THEN NULL ELSE c1 END

  例如:SELECT NULLIF('a','b'),NULLIF('a','a') FROM DUAL;

  5、NVL(c1,c2) 逻辑等价于IF c1 is null THEN c2 ELSE c1 END。c1,c2可以是任何类型。如果两者类型不同,则oracle会自动将c2转换为c1的类型。

  例如:SELECT NVL(null, '12') FROM DUAL;

  6、NVL2(c1,c2,c3) 大家可能都用到nvl,但你用过nvl2吗?如果c1非空则返回c2,如果c1为空则返回c3

  例如:select nvl2('a', 'b', 'c') isNull,nvl2(null, 'b', 'c') isNotNull from dual;

  7、SYS_CONNECT_BY_PATH(col,c) 该函数只能应用于树状查询。返回通过c1连接的从根到节点的路径。该函数必须与connect by 子句共同使用。

  例如:

  create table tmp3(
  rootcol varchar2(10),
  nodecol varchar2(10)
  );
  insert into tmp3 values ('','a001');
  insert into tmp3 values ('','b001');
  insert into tmp3 values ('a001','a002');
  insert into tmp3 values ('a002','a004');
  insert into tmp3 values ('a001','a003');
  insert into tmp3 values ('a003','a005');
  insert into tmp3 values ('a005','a008');
  insert into tmp3 values ('b001','b003');
  insert into tmp3 values ('b003','b005');
  select lpad(' ', level*10,'=') ||'>'|| sys_connect_by_path(nodecol,'/')
  from tmp3
  start with rootcol = 'a001'
  connect by prior nodecol =rootcol;

  8、SYS_CONTEXT(c1,c2[,n]) 将指定命名空间c1的指定参数c2的值按照指定长度n截取后返回。

  Oracle9i提供内置了一个命名空间USERENV,描述了当前session的各项信息,其拥有下列参数:

  ? CURRENT_SCHEMA:当前模式名;

  ? CURRENT_USER:当前用户;

  ? IP_ADDRESS:当前客户端IP地址;

  ? OS_USER:当前客户端操作系统用户;

  等等数十项,更详细的参数列还请大家直接参考Oracle Online Documents

  例如:SELECT SYS_CONTEXT('USERENV', 'SESSION_USER') FROM DUAL;

  注:N表示数字型,C表示字符型,D表示日期型,[]表示内中参数可被忽略,fmt表示格式。

  单值函数在查询中返回单个值,可被应用到select,where子句,start with以及connect by 子句和having子句。

  (一).数值型函数(Number Functions)

  数值型函数输入数字型参数并返回数值型的值。多数该类函数的返回值支持38位小数点,诸如:COS, COSH, EXP, LN, LOG, SIN, SINH, SQRT, TAN, and TANH 支持36位小数点。ACOS, ASIN, ATAN, and ATAN2支持30位小数点。

  1、ABS(n) 返回数字的绝对值

  例如:SELECT ABS(-1000000.01) FROM DUAL;

  2、COS(n) 返回n的余弦值

  例如:SELECT COS(-2) FROM DUAL;

  3、ACOS(n) 反余弦函数,n between -1 and 1,返回值between 0 and pi。

  例如:SELECT ACOS(0.9) FROM DUAL;

  4、BITAND(n1,n2) 位与运算,这个太有意思了,虽然没想到可能用到哪里,详细说明一下:

  假设3,9做位与运算,3的二进制形式为:0011,9的二进制形式为:1001,则结果是0001,转换成10进制数为1。

  例如:SELECT BITAND(3,9) FROM DUAL;

  5、CEIL(n) 返回大于或等于n的最小的整数值

  例如:SELECT ceil(18.2) FROM DUAL;

  考你一下,猜猜ceil(-18.2)的值会是什么呢?

  6、FLOOR(n) 返回小于等于n的最大整数值

  例如:SELECT FLOOR(2.2) FROM DUAL;

  再猜猜floor(-2.2)的值会是什么呢

  7、BIN_TO_NUM(n1,n2,....n) 二进制转向十进制

  例如:SELECT BIN_TO_NUM(1),BIN_TO_NUM(1,0),BIN_TO_NUM(1,1) FROM DUAL;

  8、SIN(n) 返回n的正玄值,n为弧度。

  例如:SELECT SIN(10) FROM DUAL;

  9、SINH(n) 返回n的双曲正玄值,n为弧度。

  例如:SELECT SINH(10) FROM DUAL;

  10、ASIN(n) 反正玄函数,n between -1 and 1,返回值between pi/2 and -pi/2。

  例如:SELECT ASIN(0.8) FROM DUAL;

  11、TAN(n) 返回n的正切值,n为弧度

  例如:SELECT TAN(0.8) FROM DUAL;

  12、TANH(n) 返回n的双曲正切值,n为弧度

  例如:SELECT TANH(0.8) FROM DUAL;

  13、ATAN(n) 反正切函数,n表示弧度,返回值between pi/2 and -pi/2。

  例如:SELECT ATAN(-444444.9999999) FROM DUAL;

  14、EXP(n) 返回e的n次幂,e = 2.71828183 ...

  例如:SELECT EXP(3) FROM DUAL;

  15、LN(n) 返回n的自然对数,n>0

  例如:SELECT LN(0.9) FROM DUAL;

  16、LOG(n1,n2) 返回以n1为底n2的对数,n1 >0 and not 1 ,n2>0

  例如:SELECT LOG(1.1,2.2) FROM DUAL;

  17、POWER(n1,n2) 返回n1的n2次方。n1,n2可以为任意数值,不过如果m是负数,则n必须为整数

  例如:SELECT POWER(2.2,2.2) FROM DUAL;

  18、SIGN(n) 如果n<0返回-1,如果n>0返回1,如果n=0返回0.

  例如:SELECT SIGN(14),SIGN(-14),SIGN(0) FROM DUAL;

  19、SQRT(n) 返回n的平方根,n为弧度。n>=0

  例如:SELECT SQRT(0.1) FROM DUAL;

  (二).字符型函数返回字符值(Character Functions Returning Character Values)

  该类函数返回与输入类型相同的类型。

  ? 返回的CHAR类型值长度不超过2000字节;

  ? 返回的VCHAR2类型值长度不超过4000字节;

  如果上述应返回的字符长度超出,oracle并不会报错而是直接截断至最大可支持长度返回。

  ? 返回的CLOB类型值长度不超过4G;

  对于CLOB类型的函数,如果返回值长度超出,oracle不会返回任何错误而是直接抛出错误。

  1、CHR(N[ USING NCHAR_CS]) 返回指定数值在当前字符集中对应的字符

  例如:SELECT CHR(95) FROM DUAL;

  2、CONCAT(c1,c2) 连接字符串,等同于||

  例如:SELECT concat('aa','bb') FROM DUAL;

  3、INITCAP(c) 将字符串中单词的第一个字母转换为大写,其它则转换为小写

  例如:SELECT INITCAP('whaT is this') FROM DUAL;

  4、NLS_INITCAP(c) 返回指定字符串,并将字符串中第一个字母变大写,其它字母变小写

  例如:SELECT NLS_INITCAP('中华miNZHu') FROM DUAL;

  它还具有一个参数:Nlsparam用来指定排序规则,可以忽略,默认状态该参数为当前session的排序规则。

  (三).字符型函数返回数字值(Character Functions Returning Number Values)

  本类函数支持所有的数据类型

  1、ASCII(c) 与chr函数的用途刚刚相反,本函数返回指定字符在当前字符集下对应的数值。

  例如:SELECT ASCII('_') FROM DUAL;

  (四).日期函数(Datetime Functions)

  本类函数中,除months_between返回数值外,其它都将返回日期。

  1、CURRENT_TIMESTAMP([n]) 返回当前session所在时区的日期和时间。n表示毫秒级的精度,不大于6

  例如:SELECT CURRENT_TIMESTAMP(3) FROM DUAL;

  2、LOCALTIMESTAMP([n]) 与上同,返回当前session所在时区的日期和时间。n表示毫秒级的精度,不大于6

  例如:SELECT LOCALTIMESTAMP(3) FROM DUAL;

  3、SYSTIMESTAMP([n]) 与上同,返回当前数据库所在时区的日期和时间,n表示毫秒级的精度,>0 and <6

  例如:SELECT SYSTIMESTAMP(4) FROM DUAL;

  4、DBTIMEZONE 返回数据库的当前时区

  例如:SELECT DBTIMEZONE FROM DUAL;

  5、SESSIONTIMEZONE 返回当前session所在时区

  例如:SELECT SESSIONTIMEZONE FROM DUAL;

  6、EXTRACT(key from date) key=(year,month,day,hour,minute,second) 从指定时间提到指定日期列

  例如:SELECT EXTRACT(year from sysdate) FROM DUAL;

  7、TO_TIMESTAMP(c1[,fmt]) 将指定字符按指定格式转换为timestamp格式。

  例如:SELECT TO_TIMESTAMP('2007-8-22', 'YYYY-MM-DD HH:MI:SS') FROM DUAL;

  (五).转换函数(Conversion Functions)

  转换函数将指定字符从一种类型转换为另一种,通常这类函数遵循如下惯例:函数名称后面跟着待转换类型以及输出类型。

  1、BIN_TO_NUM(n1,n2...n) 将一组位向量转换为等价的十进制形式。

  例如:SELECT BIN_TO_NUM(1,1,0) FROM DUAL;

  2、CAST(c as newtype) 将指定字串转换为指定类型,基本只对字符类型有效,比如char,number,date,rowid等。此类转换有一个专门的表列明了哪种类型可以转换为哪种类型,此处就不作酹述。

  例如:SELECT CAST('1101' AS NUMBER(5)) FROM DUAL;

  3、CHARTOROWID(c) 将字符串转换为rowid类型

  例如:SELECT CHARTOROWID('A003D1ABBEFAABSAA0') FROM DUAL;

  4、ROWIDTOCHAR(rowid) 转换rowid值为varchar2类型。返回串长度为18个字节。

  例如:SELECT ROWIDTOCHAR(rowid) FROM DUAL;

  5、TO_MULTI_BYTE(c) 将指定字符转换为全角并返回char类型字串

  例如:SELECT TO_MULTI_BYTE('ABC abc 中华') FROM DUAL;

  6、TO_SINGLE_BYTE(c) 将指定字符转换为半角并返回char类型字串

  例如:SELECT TO_SINGLE_BYTE('ABC abc中华') FROM DUAL;

  (六).其它辅助函数(Miscellaneous Single-Row Functions)

  1、COALESCE(n1,n2,....n) 返回序列中的第一个非空值

  例如:SELECT COALESCE(null,5,6,null,9) FROM DUAL;

  2、DUMP(exp[,fmt[,start[,length]]])

  dump是个功能非常强悍的函数,对于深入了解oracle存储的人而言相当有用。所以对于我们这些仅仅只是应用的人而言就不知道能将其应用于何处了。此处仅介绍用法,不对其功能做深入分析。

  如上所示,dump拥有不少参数。其本质是以指定格式,返回指定长度的exp的内部表示形式的varchar2值。fmt含4种格式:8||10||16||17,分别表示8进制,10进制,16进制和单字符,默认为10进制。start参数表示开始位置,length表示以,分隔的字串数。

  例如:SELECT DUMP('abcdefg',17,2,4) FROM DUAL;

  3、EMPTY_BLOB,EMPTY_CLOB 这两个函数都是返回空lob类型,通常被用于insert和update等语句以初始化lob列,或者将其置为空。EMPTY表示LOB已经被初始化,只不过还没有用来存储数据。

  4、NLS_CHARSET_NAME(n) 返回指定数值对应的字符集名称。

  例如:SELECT NLS_CHARSET_NAME(1) FROM DUAL;

  5、NLS_CHARSET_ID(c) 返回指定字符对应的字符集id。

  例如:SELECT NLS_CHARSET_ID('US7ASCII') FROM DUAL;

  6、NLS_CHARSET_DECL_LEN(n1,n2) 返回一个NCHAR值的声明宽度(以字符为单位).n1是该值以字节为单位的长度,n2是该值的字符集ID

  例如:SELECT NLS_CHARSET_DECL_LEN(100, nls_charset_id('US7ASCII')) FROM DUAL;

  7、SYS_EXTRACT_UTC(timestamp) 返回标准通用时间即格林威治时间。

  例如:SELECT SYS_EXTRACT_UTC(current_timestamp) FROM DUAL;

  8、SYS_TYPEID(object_type) 返回对象类型对应的id。

  例如:这个这个,没有建立过自定义对象,咋做示例?

  9、UID 返回一个唯一标识当前数据库用户的整数。

  例如:SELECT UID FROM DUAL;

  10、USER 返回当前session用户

  例如:SELECT USER FROM DUAL;

  11、USERENV(c) 该函数用来返回当前session的信息,据oracle文档的说明,userenv是为了保持向下兼容的遗留函数。oracle公司推荐你使用sys_context函数调用USERENV命名空间来获取相关信息,所以大家了解下就行了。

  例如:SELECT USERENV('LANGUAGE') FROM DUAL;

  12、VSIZE(c) 返回c的字节数。

  例如:SELECT VSIZE('abc中华') FROM DUAL;

  注:N表示数字型,C表示字符型,D表示日期型,[]表示内中参数可被忽略,fmt表示格式。

  单值函数在查询中返回单个值,可被应用到select,where子句,start with以及connect by 子句和having子句。

  (一).数值型函数(Number Functions)

  数值型函数输入数字型参数并返回数值型的值。多数该类函数的返回值支持38位小数点,诸如:COS, COSH, EXP, LN, LOG, SIN, SINH, SQRT, TAN, and TANH 支持36位小数点。ACOS, ASIN, ATAN, and ATAN2支持30位小数点。

  1、ABS(n) 返回数字的绝对值

  例如:SELECT ABS(-1000000.01) FROM DUAL;

  2、COS(n) 返回n的余弦值

  例如:SELECT COS(-2) FROM DUAL;

  3、ACOS(n) 反余弦函数,n between -1 and 1,返回值between 0 and pi。

  例如:SELECT ACOS(0.9) FROM DUAL;

  4、BITAND(n1,n2) 位与运算,这个太有意思了,虽然没想到可能用到哪里,详细说明一下:

  假设3,9做位与运算,3的二进制形式为:0011,9的二进制形式为:1001,则结果是0001,转换成10进制数为1。

  例如:SELECT BITAND(3,9) FROM DUAL;

  5、CEIL(n) 返回大于或等于n的最小的整数值

  例如:SELECT ceil(18.2) FROM DUAL;

  考你一下,猜猜ceil(-18.2)的值会是什么呢

  6、FLOOR(n) 返回小于等于n的最大整数值

  例如:SELECT FLOOR(2.2) FROM DUAL;

  再猜猜floor(-2.2)的值会是什么呢

  7、BIN_TO_NUM(n1,n2,....n) 二进制转向十进制

  例如:SELECT BIN_TO_NUM(1),BIN_TO_NUM(1,0),BIN_TO_NUM(1,1) FROM DUAL;

  8、SIN(n) 返回n的正玄值,n为弧度。

  例如:SELECT SIN(10) FROM DUAL;

  9、SINH(n) 返回n的双曲正玄值,n为弧度。

  例如:SELECT SINH(10) FROM DUAL;

  10、ASIN(n) 反正玄函数,n between -1 and 1,返回值between pi/2 and -pi/2。

  例如:SELECT ASIN(0.8) FROM DUAL;

  11、TAN(n) 返回n的正切值,n为弧度

  例如:SELECT TAN(0.8) FROM DUAL;

  12、TANH(n) 返回n的双曲正切值,n为弧度

  例如:SELECT TANH(0.8) FROM DUAL;

  13、ATAN(n) 反正切函数,n表示弧度,返回值between pi/2 and -pi/2。

  例如:SELECT ATAN(-444444.9999999) FROM DUAL;

  14、EXP(n) 返回e的n次幂,e = 2.71828183 ...

  例如:SELECT EXP(3) FROM DUAL;

  15、LN(n) 返回n的自然对数,n>0

  例如:SELECT LN(0.9) FROM DUAL;

  16、LOG(n1,n2) 返回以n1为底n2的对数,n1 >0 and not 1 ,n2>0

  例如:SELECT LOG(1.1,2.2) FROM DUAL;

  17、POWER(n1,n2) 返回n1的n2次方。n1,n2可以为任意数值,不过如果m是负数,则n必须为整数

  例如:SELECT POWER(2.2,2.2) FROM DUAL;

  18、SIGN(n) 如果n<0返回-1,如果n>0返回1,如果n=0返回0.

  例如:SELECT SIGN(14),SIGN(-14),SIGN(0) FROM DUAL;

  19、SQRT(n) 返回n的平方根,n为弧度。n>=0

  例如:SELECT SQRT(0.1) FROM DUAL;

  (二).字符型函数返回字符值(Character Functions Returning Character Values)

  该类函数返回与输入类型相同的类型。

  ? 返回的CHAR类型值长度不超过2000字节;

  ? 返回的VCHAR2类型值长度不超过4000字节;

  如果上述应返回的字符长度超出,oracle并不会报错而是直接截断至最大可支持长度返回。

  ? 返回的CLOB类型值长度不超过4G;

  对于CLOB类型的函数,如果返回值长度超出,oracle不会返回任何错误而是直接抛出错误。

  1、CHR(N[ USING NCHAR_CS]) 返回指定数值在当前字符集中对应的字符

  例如:SELECT CHR(95) FROM DUAL;

  2、CONCAT(c1,c2) 连接字符串,等同于||

  例如:SELECT concat('aa','bb') FROM DUAL;

  3、INITCAP(c) 将字符串中单词的第一个字母转换为大写,其它则转换为小写

  例如:SELECT INITCAP('whaT is this') FROM DUAL;

  4、NLS_INITCAP(c) 返回指定字符串,并将字符串中第一个字母变大写,其它字母变小写

  例如:SELECT NLS_INITCAP('中华miNZHu') FROM DUAL;

  它还具有一个参数:Nlsparam用来指定排序规则,可以忽略,默认状态该参数为当前session的排序规则。

  (三).字符型函数返回数字值(Character Functions Returning Number Values)

  本类函数支持所有的数据类型

  1、ASCII(c) 与chr函数的用途刚刚相反,本函数返回指定字符在当前字符集下对应的数值。

  例如:SELECT ASCII('_') FROM DUAL;

  (四).日期函数(Datetime Functions)

  本类函数中,除months_between返回数值外,其它都将返回日期。

  1、CURRENT_TIMESTAMP([n]) 返回当前session所在时区的日期和时间。n表示毫秒级的精度,不大于6

  例如:SELECT CURRENT_TIMESTAMP(3) FROM DUAL;

  2、LOCALTIMESTAMP([n]) 与上同,返回当前session所在时区的日期和时间。n表示毫秒级的精度,不大于6

  例如:SELECT LOCALTIMESTAMP(3) FROM DUAL;

  3、SYSTIMESTAMP([n]) 与上同,返回当前数据库所在时区的日期和时间,n表示毫秒级的精度,>0 and <6

  例如:SELECT SYSTIMESTAMP(4) FROM DUAL;

  4、DBTIMEZONE 返回数据库的当前时区

  例如:SELECT DBTIMEZONE FROM DUAL;

  5、SESSIONTIMEZONE 返回当前session所在时区

  例如:SELECT SESSIONTIMEZONE FROM DUAL;

  6、EXTRACT(key from date) key=(year,month,day,hour,minute,second) 从指定时间提到指定日期列

  例如:SELECT EXTRACT(year from sysdate) FROM DUAL;

  7、TO_TIMESTAMP(c1[,fmt]) 将指定字符按指定格式转换为timestamp格式。

  例如:SELECT TO_TIMESTAMP('2007-8-22', 'YYYY-MM-DD HH:MI:SS') FROM DUAL;

  (五).转换函数(Conversion Functions)

  转换函数将指定字符从一种类型转换为另一种,通常这类函数遵循如下惯例:函数名称后面跟着待转换类型以及输出类型。

  1、BIN_TO_NUM(n1,n2...n) 将一组位向量转换为等价的十进制形式。

  例如:SELECT BIN_TO_NUM(1,1,0) FROM DUAL;

  2、CAST(c as newtype) 将指定字串转换为指定类型,基本只对字符类型有效,比如char,number,date,rowid等。此类转换有一个专门的表列明了哪种类型可以转换为哪种类型,此处就不作酹述。

  例如:SELECT CAST('1101' AS NUMBER(5)) FROM DUAL;

  3、CHARTOROWID(c) 将字符串转换为rowid类型

  例如:SELECT CHARTOROWID('A003D1ABBEFAABSAA0') FROM DUAL;

  4、ROWIDTOCHAR(rowid) 转换rowid值为varchar2类型。返回串长度为18个字节。

  例如:SELECT ROWIDTOCHAR(rowid) FROM DUAL;

  5、TO_MULTI_BYTE(c) 将指定字符转换为全角并返回char类型字串

  例如:SELECT TO_MULTI_BYTE('ABC abc 中华') FROM DUAL;

  6、TO_SINGLE_BYTE(c) 将指定字符转换为半角并返回char类型字串

  例如:SELECT TO_SINGLE_BYTE('ABC abc中华') FROM DUAL;

  (六).其它辅助函数(Miscellaneous Single-Row Functions)

  1、COALESCE(n1,n2,....n) 返回序列中的第一个非空值

  例如:SELECT COALESCE(null,5,6,null,9) FROM DUAL;

  2、DUMP(exp[,fmt[,start[,length]]])

  dump是个功能非常强悍的函数,对于深入了解oracle存储的人而言相当有用。所以对于我们这些仅仅只是应用的人而言就不知道能将其应用于何处了。此处仅介绍用法,不对其功能做深入分析。

  如上所示,dump拥有不少参数。其本质是以指定格式,返回指定长度的exp的内部表示形式的varchar2值。fmt含4种格式:8||10||16||17,分别表示8进制,10进制,16进制和单字符,默认为10进制。start参数表示开始位置,length表示以,分隔的字串数。

  例如:SELECT DUMP('abcdefg',17,2,4) FROM DUAL;

  3、EMPTY_BLOB,EMPTY_CLOB 这两个函数都是返回空lob类型,通常被用于insert和update等语句以初始化lob列,或者将其置为空。EMPTY表示LOB已经被初始化,只不过还没有用来存储数据。

  4、NLS_CHARSET_NAME(n) 返回指定数值对应的字符集名称。

  例如:SELECT NLS_CHARSET_NAME(1) FROM DUAL;

  5、NLS_CHARSET_ID(c) 返回指定字符对应的字符集id。

  例如:SELECT NLS_CHARSET_ID('US7ASCII') FROM DUAL;

  6、NLS_CHARSET_DECL_LEN(n1,n2) 返回一个NCHAR值的声明宽度(以字符为单位).n1是该值以字节为单位的长度,n2是该值的字符集ID

  例如:SELECT NLS_CHARSET_DECL_LEN(100, nls_charset_id('US7ASCII')) FROM DUAL;

  7、SYS_EXTRACT_UTC(timestamp) 返回标准通用时间即格林威治时间。

  例如:SELECT SYS_EXTRACT_UTC(current_timestamp) FROM DUAL;

  8、SYS_TYPEID(object_type) 返回对象类型对应的id。

  例如:这个这个,没有建立过自定义对象,咋做示例?

  9、UID 返回一个唯一标识当前数据库用户的整数。

  例如:SELECT UID FROM DUAL;

  10、USER 返回当前session用户

  例如:SELECT USER FROM DUAL;

  11、USERENV(c) 该函数用来返回当前session的信息,据oracle文档的说明,userenv是为了保持向下兼容的遗留函数。oracle公司推荐你使用sys_context函数调用USERENV命名空间来获取相关信息,所以大家了解下就行了。

  例如:SELECT USERENV('LANGUAGE') FROM DUAL;

  12、VSIZE(c) 返回c的字节数。

  例如:SELECT VSIZE('abc中华') FROM DUAL;

posted @ 2007-11-21 10:34 克林顿 阅读(1081) | 评论 (0)编辑 收藏
数值函数:


abs(m) m的绝对值
mod(m,n) m被n除后的余数
power(m,n) m的n次方
round(m[,n]) m四舍五入至小数点后n位的值(n缺省为0)
trunc(m[,n]) m截断n位小数位的值(n缺省为0)



--------------------------------------------------------------------------------


字符函数:


initcap(st) 返回st将每个单词的首字母大写,所有其他字母小写
lower(st) 返回st将每个单词的字母全部小写
upper(st) 返回st将每个单词的字母全部大写
concat(st1,st2) 返回st为st2接st1的末尾(可用操作符"||")
lpad(st1,n[,st2]) 返回右对齐的st,st为在st1的左边用st2填充直至长度为n,st2的缺省为空格
rpad(st1,n[,st2]) 返回左对齐的st,st为在st1的右边用st2填充直至长度为n,st2的缺省为空格
ltrim(st[,set]) 返回st,st为从左边删除set中字符直到第一个不是set中的字符。缺省时,指的是空格
rtrim(st[,set]) 返回st,st为从右边删除set中字符直到第一个不是set中的字符。缺省时,指的是空格
replace(st,search_st[,replace_st]) 将每次在st中出现的search_st用replace_st替换,返回一个st。缺省时,删除search_st
substr(st,m[,n]) n=返回st串的子串,从m位置开始,取n个字符长。缺省时,一直返回到st末端
length(st) 数值,返回st中的字符数
instr(st1,st2[,m[,n]]) 数值,返回st1从第m字符开始,st2第n次出现的位置,m及n的缺省值为1
例:
1.
select initcap('THOMAS'),initcap('thomas') from test;
initca initca
------ ------
Thomas Thomas
2.
select concat('abc','def') "first" from test;
first
-----
abcdef
3.
select 'abc'||' '||'def' "first" from test;
first
-----
abc def
4.
select lpad(name,10),rpad(name,5,'*') from test;
lpad(name,10) rpad(name,5,'*')
------------ ----------------
mmx mmx**
abcdef abcde
5.
去掉地址字段末端的点及单词st和rd
select rtrim(address,'. st rd') from test
6.
select name,replace(name,'a','*') from test;
name replace(name,'a','*')
---- ---------------------
great gre*t
7.
select substr('archibald bearisol',6,9) a,substr('archibald bearisol',11) b from test;
a b
------- -------
bald bear bearisol
8.
select name,instr(name,' ') a,instr(name,' ',1,2) b from test;
name a b
------- -------- ---------
li lei 3 0
l i l 2 4

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

转换函数:
nvl(m,n) 如果m值为null,返回n,否则返回m
to_char(m[,fmt]) m从一个数值转换为指定格式的字符串fmt缺省时,fmt值的宽度正好能容纳所有的有效数字
to_number(st[,fmt]) st从字符型数据转换成按指定格式的数值,缺省时数值格式串的大小正好为整个数
附:
to_char()函数的格式:
---------------------------------
符号 说明
---------------------------------
9 每个9代表结果中的一位数字
0 代表要显示的先导0
$ 美元符号打印在数的左边
L 任意的当地货币符号
. 打印十进制的小数点
, 打印代表千分位的逗号
---------------------------------
例:
1.
select to_number('123.45')+to_number('234.56') form test;
to_number('123.45')+to_number('234.56')
----------------------------------------
358.01
2.
select to_char(987654321) from test;
to_char(987654321)
------------------
987654321
3.
select to_char(123,'$9,999,999') a,to_char(54321,'$9,999,999') b,to_char(9874321,'$9,999,999') c from test;
a b c
------- ---------- -----------
$123 $54,321 $9,874,321
4.
select to_char(1234.1234,'999,999.999') a,to_char(0.4567,'999,999.999') b,to_char(1.1,'999,999.999') from test;
a b c
--------- ---------- ------------
1,234.123 .457 1.100



--------------------------------------------------------------------------------


分组函数:


avg([distinct/all] n) 列n的平均值
count([all] *) 返回查询范围内的行数包括重复值和空值
count([distinct/all] n) 非空值的行数
max([distinct/all] n) 该列或表达式的最大值
min([distinct/all] n) 该列或表达式的最小值
stdev([distinct/all] n) 该列或表达式的标准偏差,忽略空值
sum([distinct/all] n) 该列或表达式的总和
variance([distinct/all] n) 该列或表达式的方差,忽略空值



--------------------------------------------------------------------------------


日期函数:

>

add_months(d,n) 日期d加n个月
last_day(d) 包含d的月份的最后一天的日期
month_between(d,e) 日期d与e之间的月份数,e先于d
new_time(d,a,b) a时区的日期和时间d在b时区的日期和时间
next_day(d,day) 比日期d晚,由day指定的周几的日期
sysdate 当前的系统日期和时间
greatest(d1,d2,...dn) 给出的日期列表中最后的日期
least(d1,k2,...dn) 给出的日期列表中最早的日期
to_char(d [,fmt]) 日期d按fmt指定的格式转变成字符串
to_date(st [,fmt]) 字符串st按fmt指定的格式转成日期值,若fmt忽略,st要用缺省格式
round(d [,fmt]) 日期d按fmt指定格式舍入到最近的日期
trunc(d [,fmt]) 日期d按fmt指定格式截断到最近的日期
附:
日期格式:
--------------------------------
格式代码  说明 举例或可取值的范围
--------------------------------
DD 该月某一天 1-3
DY    三个大写字母表示的周几 SUN,...SAT
DAY    完整的周几,大写英文 SUNDAY,...SATURDAY
MM 月份 1-12
MON      三个大写字母表示的月份 JAN,...DEC
MONTH 完整 JANUARY,...DECEMBER
RM 月份的罗马数字 I,...XII
YY或YYYY 两位,四位数字年
HH:MI:SS   时:分:秒
HH12或HH24  以12小时或24小时显示
MI      分
SS      秒
AM或PM    上下午指示符
SP      后缀SP要求拼写出任何数值字段
TH      后缀TH表示添加的数字是序数 4th,1st
FM 前缀对月或日或年值,禁止填充
---------------------------------
例:
1.
下一个周五的日期
select next_day(sysdate,6) from test;
2.
两个月前的今天的日期
select add_months(sysdate,-2) from test;
posted @ 2007-11-21 10:32 克林顿 阅读(338) | 评论 (0)编辑 收藏
  2007年10月28日
目录

一.Toad功能综述
二.系统需求
三.安装指南
四.快速入门
1. Schema browser的用法简介
2. SQL Editor的使用介绍
3. Procedure Editor的用法介绍
4. 如何进行PLSQL的debug
5. 如何使用SQLab Xpert优化SQL
6. 如何使用SQL Modeler来编写查询
7. 如何使用Toad的DBA方面的功能

一、 Toad功能综述

在Oracle应用程序的开发过程中,访问数据库对象和编写SQL程序是一件乏味且耗费时间的工作,对数据库进行日常管理也是需要很多SQL脚本才能完成的。Quest Software为此提供了高效的Oracle应用开发工具-Toad(Tools of Oracle Application Developers)。在Toad的新版本中,还加入了DBA模块,可以帮助DBA完成许多日常管理工作。它最大的特点就是简单易用,访问速度快。使用Toad,我们可以通过一个图形化的用户界面快速访问数据库,完成复杂的SQL和PL/SQL代码编辑和测试工作。Toad由Oracle开发专家专门为开发人员而设计,是一个功能强大、结构紧凑的专业化PL/SQL开发环境。
Toad 主要具有如下特点:
模式浏览:
模式浏览功能可以让我们快速访问数据字典,浏览数据库中的表、索引、存储过程。Toad 提供对数据库的快速访问,使用极为方便,用户界面简洁,结构安排合理。当我们点击一个单独的数据库对象,Toad立即显示此对象的详细信息。例如,当我们点一个数据库的表,所有和此表相关的索引、约束、存储过程、SQL语句以及和其他表的相互引用关系都在同一界面显示出来。为了简化操作,用户可以在浏览窗口操作数据库对象。

SQL 编辑器:
SQL 编辑器的主要功能是编辑、运行和调整SQL语句。TOAD 的高级编辑窗口包括众多的特性来提高开发人员编写SQL语句的产品化程度。例如,简单地生成代码模板,在编写SQL前自动发现包的内容和列的名字等等。
SQL编辑器包括一个编辑窗口和运行结果窗口,允许开发人员在编辑的过程中测试运行结果。SQL编辑器中不仅包括标准的编辑命令,也包括一些增强的功能,如快速查询表中的字段、将SQL语句的内容格式化等等。这个窗口可以处理大到4GB 的内容,对大的开发项目来说非常有用。便捷的书签可以让开发人员非常容易地找到相关位置。在运行结果窗口可提供用户定义的配置功能,支持LONG 和LONG RAW列,可以将数据卸出到磁盘、打印数据、编辑数据等等。

存储过程编辑器:
存储过程编辑器的主要功能是编辑、编译、测试、调试存储过程和触发器。TOAD提供语法标识、错误标识和其他很多易于使用的功能,如在弹出窗口显示表名、列名和Oracle函数。和其他的 PL/SQL 编辑工具不同,TOAD 允许在一个文件中操作多个数据库对象,可以编译一个对象、编译多个对象、编译到当前光标、从光标开始编译。在运行出现错误时,存储过程停止到有问题的语句。用户可以使用快捷方式或模板来快速编写PL/SQL,也可以根据需要生成自己的模板。使用Toad可以非常方便地进行编辑工作,可如设置书签、取消注释、格式化SQL语句等等。

PL/SQL Debugger选项:
Toad 提供简单易用的PL/SQL 调试功能,可以节省开发人员在大型项目中用于开发和测试的宝贵时间,提高应用开发的质量。在存储过程开发的过程中,Toad可以逐行编辑、调试和运行代码。运行时可以根据需要输入参数,观察相关参数的变化来检查存储过程的正确性。在调式过程中,Toad 可以通过窗口显示所有的断点、参数, 调用堆栈和输出参数。使用Toad,非常容易检测到存储过程的错误,开发人员可以一步一步运行PL/SQL语句来识别问题。调试会话可以和其他程序会话同时进行。

SQLab Xpert Option:
帮助开发人员优化SQL,为他们提供各种优化模式下SQL执行计划,并且能够给出优化的建议,能够比较各种模式下实际的SQL运行结果,帮助开发人员真正高速地开发高效地代码。

Toad还可以外挂一些别的产品,比如PL/Formatter, RevealNet Knowledge Base , SQL Impact等,这些都能够和Toad紧密集成,共同提供了一个完美的集成开发环境。新版本还新增加了DBA模块,更加拓广了Toad这个产品的适用范围。


二、系统要求:
客户端:
ü Windows 95 / 98 / NT/2000中英文均可
ü 完整安装的SQL*Net 2.0或者Net8
ü 磁盘:一般安装需要20M左右的空间,根据所选择模块的不同和安装方式的不同,最少也要5M的磁盘空间(从网络服务器读取)
ü 内存:Windows 9x/Me:16M 内存;Windows NT/2000: Min 32M]
ü Tuning模块需要额外的25M空间

服务器端:
ü Oracle 7.3 或者更高,在任何硬件平台上。
ü 需要一个DBA用户帐号

三.安装:
1. 三种安装方式的选择:
a) TOAD and Personal Configuration Files to PC
 默认安装选择,完成一个完整的Client端的安装,把所有需要的文件拷贝到本地Toad目录。
绝大多数用户应该选择使用这个安装方式。
b) Personal Config Files to PC, read TOAD from Network Server
从网络服务器读取Toad程序,在本地计算机安装一些自定义的文件,并且创建到服务器文件的快捷方式,一般不推荐使用这个方式,而且要求网络服务器已经配置。
c) TOAD to Network Server
把Toad安装到网络服务器上,以便这样别的用户能够进行Personal Config Files to PC, read TOAD from Network Server这种方式的安装。
2. 根据需要使用到的特性,需要运行一些脚本(都在Toad\temps目录下)
ü 如果需要用Toad来查看执行计划,必须运行脚本PrepToad.sql或者notoad.sql
n 如果希望专门建立一个Toad 用户来存放Toad需要使用的对象的话,就运行preptoad.sql。
n 如果希望在当前连接用户模式下建立toad需要使用的对象的话,就运行notoad.sql。
n 注意,如果是选择了专门建立toad这个用户的话,需要先修改一下脚本,指定用户的默认表空间和临时表空间。
ü 需要使用Oracle8i 的Profile analyzer,必须运行ToadProfiler.sql
ü 需要加强Toad的安全性,必须运行ToadSecurity.sql

四、Toad使用快速入门
1. Schema Browser:
Schema browser是Toad的极为有特色的模块。在schema browser的帮助下,可以方便的浏览数据库内部的各类数据库对象,比如表,索引,序列,存储过程等,而且可以方便的倒出DDL语句和进行各种修改,重建工作。定位到某一类对象上,这列对象允许的操作都会自动列出来。
特色: 
l 支持Oracle数据库里面所有对象的新建、查看、修改,集成了几乎对所有数据库对象的管理所需要的功能。
l 按照 模式->对象类别 ->对象->对象可操作属性 -> 对象本身的详细信息和对象相关的信息 来组织,非常有条理,容易定位对象,也能够看到所有你需要的对象的相关信息。
l 对于表:
i. 完备的建表向导,不用输入冗长的语法,更加全面地替你考虑。
ii. 可以修改表的各种逻辑和物理属性,修改列的属性,增加列,删除列(在Oracle8i里面),修改表的物理存储属性,Truncate,Drop等。
iii. 可以生成建表的完整的DDl语句,包括存储信息,权限信息,约束,索引和触发器等,而这些手工很难做到。
iv. 可以方便的对表进行分析,查看表地所有信息,可以有条件的倒出表里面的数据,并且保存为sql语句。
v. 可以方便的对表进行重组,可以完成exp/imp作不到的事情,而且更少地人工参与,更加安全。

l 对于视图,存储过程:
i. 可以保存建立视图、存储过程的语句为文本,
ii. 重新编译失效的视图,存储过程,修改视图的定义语句等。方便的查看存储过程的代码,相互依赖关系,权限信息等保存为文本等。
l 回滚段,
i. 简洁明了的online,offline状态,方便地online/offline操作
ii. 详细的回滚段物理信息和当前状态。
iii. 可以方便的修改物理存储属性

l 表空间:
i. Tablespace Map;直观的显示数据物理的在表空间上的分布
ii. 直观的查看各个表空间的利用率、剩余空间、破碎情况等信息
iii. 可以进行各种alter操作:online, offline, 增加数据文件,改变数据文件大小,改变物理存储属性等
l 对其他数据库对象也有完备的操作支持。

2. SQL Editor:
a) 激活SQL Editor的三种方式: 
i. 连接到数据库之后,Toad自动打开SQL Editor这个窗口。
ii. 点击总工具栏上最左边的那个按钮
iii. 从菜单栏:Database -> SQL Editor
b) 特点:
l 允许同时打开多个编辑窗口,同时编辑多个SQL语句
l 支持同时连接到多个数据库,同时对多个数据库进行操作
l 允许编辑SQL,PLSQL,JAVA,HTML和文本
l 使用书签功能,可以在大量SQL语句里,快速定位某个语句所在位置
l SQL Editor本身具有强大的编辑功能,非常方便编辑SQL语句。
l 强大的快捷键支持和工具栏快速按钮的支持,更加高效编写(很多快捷键可以自己定义,在View ->options ->SQL Editor里面)
l 能够根据前面的条件,智能推测需要输入的代码,可以做到某种程度的代码智能填充
l 把鼠标定位到表/视图/存储过程名称之上,按F4,可以打开对象描述窗口,方便的查看表和视图的定义,存储过程的源代码,
l 非常容易对SQL语句的分析其执行计划:单击工具栏上的 按钮就可以看到Explain Plan的结果
l 支持部分SQL*Plus命令,可以方便的执行大量的为SQL*Plus编写的数据库脚本
l 可以通过SQLab xpert来对当前SQL语句进行全面的分析,给出各种合理的调优意见,只需要单击工具栏上的Tuning按钮:
l 可以方便的保存,打开和运行SQL脚本
l 支持对查询结果进行修改,
l 可以把查询结果以多种格式保存起来,可以保存为HTML,纯文本,XLS等多种格式
l 很容易的得到SQL函数的列表和用法描述(Show SQL help Window 按钮)
l 可以查看SQL语句的执行情况:通过下方的AutoTrace窗口 ,看到SQL语句的实际执行结果和执行效率。
l 支持历史SQL(F8)  :可以方便的查询以前执行过的SQL,不用反复重新输入。
l 可以执行匿名块,存储过程,从下方的窗口看到DBMS_OUTPUT的结果,如:

3. Stored Procedure Editor
a) 打开存储过程编写器的几个途径:
l 单击总菜单栏上的第三个按钮:  
l 点击Database - > Procedure Editor ,
l 可以通过Schema browser来调用
b) 一些特点和优点:
1. 强大的自定义设置:从保留字的显示方式,到自动替换,到各种快捷键的定义等等,用得越熟越顺手。
2. 
3. 自动用不同颜色显示SQL和PL/SQL关键字,语法清晰明了,可根据自己的习惯来具体定制各类关键字的具体显示方式。可以自定义存储过程得模板,在新建存储过程的时候,自动生成程序的框架可以方便的调用Schema Browser,把鼠标定位于某个对象上,F4,Schema Browser打开该对象的详细描述,帮助顺利快速开发程序。支持代码自动更正,如输入ndf,自动替换成NO_DATA_FOUND,输入the自动替换成the,类似的自动替换还可以自己修改和添加。
7. 方便的左边行号显示,单击左边行号就可以实现调试断点的增加/删除
8. 对各种快捷键的支持,不但包括常见的编辑操作,还可以有自己定义的PLSQL块的支持(自己定义快捷方式)。如可以定义CTRL+SHIFT+D:弹出所有PLSQL Block的类型,可以自己选择。
9. 可以在一个集成开发环境里面,一边编码,一边调试,不用多处切换
10. 方便的同时打开多个存储过程,通过页面快速切换
11. 快速编译存储过程,快速定位错误所在,自己选择是否同时编译依赖的存储过程
12. 内置对PL/Formatter,可以用PL/Formatter对存储过程进行格式化,并且可以提供存储过程的概要分析和修改建议
PL/Formatter可以对现有的存储过程进行高速的格式化,使所有的存储过程都符合同样的编写标准,这样既有利于提高程序的可读性,避免不同人写的模块的风格上的很差异。
PL/Formatter 还有助于提高程序的模块化,增强程序的结构清晰度,增强SQL的共用性。
PL/Formatter 还可以帮助完成PL/SQL和Oracle版本之间的管理。














13. 内置RevealNet Knowledge Base,单击鼠标右键就可以打开,快速得到技术上的支持,解决技术难题
nPL/SQL:
n包含整个开发过程中可能遇到问题的答案
nCode Library:大量的严谨的PL/SQL代码例子和现成过程,完全源代码提供
n各种错误处理模块可供参考,各类字符日期函数
n包含1400多个主题
nAdmin:
n解答DBA日常工作中80%的常见问题,覆盖2400多个主题
n从网络到性能优化,从备份恢复到Error message,一应俱全
例子:遇到失效的存储过程怎么办?
4. 如何对存储过程进行Debug?
u 需要Toad单独的Debug Option(Standard Version 没有这个选项)
u 要用Toad对存储过程进行debug,必须安装Oracle的系统包:dbms_debug,而且必须安装Oracle Probe API v2.0 或者更高的版本。
u 集成在Stored Precedure Editor里面,可以一边编写一边调试,大大提高开发效率
u 打开Procedure Editor后,Debug菜单激活,可以开始进行Debug工作。
u 允许对存储过程进行逐行调试、断点调试,也支持对触发器进行调试。
u 可以有断点支持,支持Watch变量,允许运行时改变变量的值
u 允许对多层调用的Debug支持
调试步骤具体举例:
1. 点击菜单栏的第三个按钮: ,打开Procedure Editor
2. 点击Procedure Editor的菜单栏的 按钮,调出需要调试的存储过程
3. 单击工具栏上的按钮 ,输入需要传入的参数,如果不需要传入参数,可以直接单击工具栏上的按钮: ,直接开始调试,如下图输入传入参数:

4. 单击菜单栏的按钮: ,可以单步跟踪,也可以定义一个断点,直接运行到断点在单步执行,在存储过程运行的过程中,当前语句会高亮度显示,并且把鼠标指针定位到变量上,Toad自动显示该变量的当前值。

5. 可以随时中止程序的执行,只要点Debug ->Halt Execution,或者菜单栏上的按钮 ,就可以中止程序的执行
6. 当碰到一个存储过程调用另外一个存储过程的时候,可以选择跳过(Step Over)  ,这样就直接运行那个被调用的存储过程,返回调用结果,继续这个存储过程的调试,也可以选择Trace Into ,这样就打开被调用的存储过程,进一步深入调试那个被调用的子存储过程。如果需要保持Debug信息,在编译的时候应该选择Compile Dependencies with Debug Information,就是Procedure Editor工具栏最右边的那个按钮 。
7. 支持对变量实时追踪:使用Watch:
可以在运行前,或者运行过程中对某个变量进行实时跟踪:Add Watch,把鼠标定位到该变量上,然后点击Debug ->Add  Watch At Cursor,该变量就会出现在Debug状态窗口上,而且实时反应该变量的当前值。如上图中的变量v_empname。可以运行时刻修改
8. 断点支持:
单击存储过程需要加断点的地方的行号,该行颜色变红,输入参数,单击执行按钮 ,可以直接运行到断点处,可以不必逐行追踪,更加高效率的进行调试。
Debug Option还支持条件断点,只有当满足条件的时候才会在那个地方停止,否则就好像不存在这个断点一样继续运行。

Ë 注意DBMS_OUTPUT.PUT_LINE的结果只有当程序执行完成以后才会出现,在程序执行过程中是没有结果的。


4. 如何用SQLab Xpert对存储过程进行调优?
我们知道,Oralce数据库的优化,最主要的步骤就在于SQL的优化。而在没有专门的工具(如Toad)的帮助下,进行SQL优化是一件非常困难和乏味的事情,并且需要对Oracle的深入理解和高超的Oracle调优技巧。使用Toad的SQLab Xpert Tuning模块,可以使我们普通开发人员也能够非常快速,精确的对SQL进行专家级的分析
在SQL Editor和Procedure Editor里面,选中需要调试的SQL语句(SQLab Xpert只能调试Select,Insert, Update,Delete语句),复制到SQL Editor里面,然后点击工具栏上的调优按钮 ,Toad会自动打开SQLab xpert 窗口,捕获当前的SQL语句,并且把它转化为符合explain plan格式的语句。
第一次打开Xpert的时候,Toad会提示你,需要安装一些Server端的表、视图和包等对象,可以把表存储到某个指定的表空间(如Tools)里面。可以简单的按照提示一步一步做就可以了。如果系统设定不允许Job的话(Job_queue_process=0),Toad提示有些部件不会现在安装,可以忽略。安装完成以后,可以选择让某些非DBA用户也可以使用Toad的SQLab Xpert调优功能。
安装完成以后,Toad会提示你一些关于优化目标方面的问题,你可以选择每次优化都可以重新设定,或者一次设定,以后一直使用这个设定。当然如果需要,还是可以更改的,在SQLab Option xpert的窗口的Administration和Preference下面重新设定。
例子:
下面这个SQL语句涉及到多表之间的关联,有一定的复杂性,我们可以借助Toad的SQLab Xpert Option来帮助分析:
select a.name. b.name, c.emp_name
from dep a, manager b,emp c
where a.dep_no=c.DEP_NO
and b.manag_id=c.manag_id
and c.emp_no=3
 我们把这个SQL复制到SQL Editor里面,单击上面的调优按钮,Toad打开SQLab Xpert Option窗口。
如下图:

从上面的图中我们可以方面的看到:在各种优化模式下,该SQL语句的执行计划分别是什么样的,Toad给出了每一种执行计划的具体每一个步骤,每个步骤的成本,该表涉及的相关的数据等,如果SQL存取的表还没有经过分析,Toad会以红色警告显示,并且很方便的帮助你对该表进行分析,收集统计数据,重建索引等,以有助于优化器作出最好的选择。可以把当前的分析结果保存到它的资料库里边,以备以后再次调用之需。
 我们还可以求助与SQLab 的自动优化功能:点击Original SQL下面的auto tune按钮,Toad会对执行结果按照tkprof进行分析(当然,这需要你在initsid.ora里面设置好utl_file_dir,如果服务器是在Unix机器上的话,还需要通过FTP方式得到Trace文件,有一些小小的设置)。
 自动优化非常高效的对所有执行计划进行实际运行比较,并且给出实际执行的时间的对比,如下图:

 我们还可以让Toad给出实际的优化建议:点击Original SQL,单击下面的Advice按钮,Toad根据对SQL的分析和执行结果给出合理的建议:
如:
1. 把表和索引分别放到两个不同的表空间,因为我们在创建表,加上约束的时候没有指定USING INDEX子句,所以表和索引都建立在了用户的默认表空间上了。
2. 对表EMP,DEP和MANAGER进行分析,收集最新的统计数据,有利于CBO得到最优的执行计划
3. 在合适的列上创建索引:EMP的manag_id和dep_no。当表中存在大量的数据的时候,这样可以大大减少由于全表扫描带来的成本。


5. SQL Modeler:
SQL Modeler可以帮助开发人员很容易的写出各种复杂的SQL语句,只需通过简单的拖动鼠标,就能够写出复杂的SQL语句来。
打开SQL Modeler的几个途径:
i. 菜单栏 Database -> SQL Modeler ,打开窗口
ii. 单击工具栏第四个按钮 ,打开SQL Modeler窗口
窗口由三个主要部分组成:
n 表选择区域:最右边的那个部分,用来选择From子句中用到的表。拖动到左边的区域或者双击就选择了该表。
n 表模型区域:用来图形化的显示选择的表和表之间的关联关系。
n 生成SQL区域:这里显示用图形化方式创建的查询对应的SQL语句,

 在SQL Modeler里面,还支持对生成的SQL进行Explain Plan,调试SQL的性能,运行SQL,看是否得到了希望的结果,保存生成的语句,或者把语句粘贴到SQL Editor里面。

 有了SQL Modeler的帮助,即使是初级的程序员也能编写出复杂而又高效的SQL查询来。
比如下面的例子;

生成步骤:
1. 选出表emp, dep, manager
2. 用鼠标拖住emp的emp_name和emp_no, dep的name,manager的name
3. 双击criteria窗口的emp_no condition列,弹出窗口,输入查询条件,比如emp_no=3
4. 由于结果里面不希望emp_no出现,双击emp_no列的visible,设置为false
5. 这样就出来了需要的查询,现在可以运行查询得到结果,对查询SQL进行分析,或者在SQL Editor里面打开这个SQL,或者保存为SQL Model文件,或者再进一步处理,比如加排序, 汇总等。

DBA方面的功能:
Toad在DBA日常管理方面的能力是非常强大的,可以帮助DBA安全快速地完成许多日常工作,还有Toad特有的一些小工具能完成一些普通方法很难做到的功能。下面大概讲述了各个常用模块的主要功能:
a) Database Monitor
提供直观的Oracle数据库运行状况,包括下面这些详细信息:
可以看到逻辑IO,物理IO,各个状态的session数目,SGA的利用率,共享池的使用状况,各类事件的等待状况,以及各类事件随着时间的变化情况
b) Instance Monitor
i. 可以用来检查本地tnsnames.ora文件里面定义的所有节点、Listener和数据库的运行状态和版本等相关信息。
ii. 可以远程启动、关闭数据库(如果设置了password验证方式)
c) Unix Monitor:
i. 可以监控Unix机器的运行状况比如详细的机器启动时间,CPU利用率,主要的进程以及这些进程占用的资源,主要的磁盘IO等。
d) Trace/Kill session
i. 方便的查看所有的连接用户相关信息:比如终端,程序,连接时间等
ii. 对某个用户进行跟踪,查看用户执行的SQL语句,查看语句的执行计划,
iii. 方便的查阅系统的Lock对象,有没有什么等待别的事务释放锁的情况,并能够轻易查出等待什么用户的什么事件结束,那个用户执行的是什么SQL。
iv. 查看回滚段的使用状态,什么用户,什么语句,使用的什么回滚段,多少读写量等
e) Oracle Parameter
i. 可以方便的查看Oracle系统的参数:是否默认值,参数作用的简要描述,是否可以用alter session/alter system来动态改变,对于那些可以动态改变的参数,可以双击鼠标来进行修改

f) NLS_PARAMETER:
i. 方便的查看session,instance,database一级的NLS参数值,
ii. 可以动态修改session的NLS参数值

g) Extents
i. 可以查看某个用户下的表和索引的详细的存储情况,
ii. 发现那些占用大量空间的表和索引,可以考虑使用相应的对策,比如分区
iii. 发现那些即将达到max_extents的表和索引并可以及时纠正
iv. 发现那些索引和表处于同一个表空间的情况,并可以及时纠正。

h) Tablespace
i. 直观的查看每个表空间的利用率,总空间,已使用空间,剩余可是用空间以及默认存储参数,和表空间是否需要整理等信息
ii. 查看每个表空间的状态,组成的数据文件, 以及每个数据文件的详细信息
iii. 查看每个表空间里面存在的对象和这些对象的详细存储特性
i) Tablespace Map:
i. 图形化的显示表空间里面各个表/索引所占用的空间,各个segment的大小,segment是否连续等信息,非常直观
ii. 
j) Server Statistics:
i. 可以非常直观的看到系统总体运行情况,迅速定位系统瓶颈所在
ii. 可以查看系统范围内各类等待事件的状况,查看每个连接会话的状况,
k) Pinned Code:
i. 我们知道,频繁执行的大的存储过程最好Pin起来,这样可以避免被Oracle在内存不足的情况下换出内存,避免动态加载,也避免flush shared pool的时候被清出内存。
ii. 根据每个模块的大小,执行次数,决定是否要把某个存储过程PIN起来。一个按钮就搞定了。
l) Control Files:
可以查看当前系统有哪几个控制文件,以及控制文件内部记录的详细信息。
(实际上就是V$CONTROLFILE, V$CONTROLFILE_RECORD_SECTION)
m) Redo Log Manager:
i. 可以方便的查看LOG的组,当前日志,每个组里面的成员名字,大小,方便的增加、删除log组,切换当前日志,对日志归档进行具体的控制。
ii. 可以在这个界面里完成几乎所有的对redo log的操作。
n) Repair chained rows:
i. Chained rows影响系统性能,处于系统性能的考虑,需要把chained rows修复成普通的表的行。使用repaie chained rows,就可以比较容易的做到这一点。选择需要分析的表,然后分析一下,看有没有chained rows,如果有,点击repair,Toad就帮你把那些chained rows给修复了。
o) Identify Space Deficits
如果系统出现1659,1653错误,就是一个不合格的DBA。但是要即时预见这些错误,还是有一定的难度的。有了Toad的这个小工具之后,一点某个表空间,就知道这个表空间里面的剩余自由空间是否允许任何表能够扩展到下一个extent。并能够在发现问题之后,直接改正问题。

p) Estimate Table/Index Size
i. 数据库的物理规划中,表/索引的存储子句的定义是非常重要的,影响系统。但是没有什么工具的话,要为表定义合理的存储子句也不容易。
ii. 在Toad里面,专门有工具帮助你合理定义表/索引的存储情况:
1. 自己可以定义将来表中需要存储的数据的数目
2. 多种估计方式:
a) 根据对已有的数据的分析来定义表的大小(最精确,但是比较慢)
b) 根据表定义数据类型来定义表的大小
c) 根据数据字典中以前分析过的数据来估计大小(需要近期分析过该表)

q) Analyze All Tables
i. 基于CBO的SQL需要CBO提供最优化的执行路径来提高程序的执行效率,但是假如对表进行大量的DML操作之后,不及时更新表的统计数据,这时候CBO就不能选择最为有效的执行路径,导致程序执行效率低。
ii. 手工分析表比较麻烦,一个一个做。
iii. 用Toad的Analyze Alltables这个工具,可以一次分析整个模式下面的所有表,有丰富的控制选项,包括是采用估计还是完全,是否同时分析索引,估计的话,采用多大的百分比等。
r) Rebuild Table
i.  当表中的数据被反复大量的DML之后,而且PCTFREE和PCTUSED定义的不合理的情况下,表可能会变得非常破碎,占用大量的extent,索引也会相当破碎,导致效率相当低下。
ii. 传统的方式是通过exp/imp来解决这个问题,但是步骤实在比较麻烦,手工操作也有一定的危险性。
iii. 使用Rebuild Table工具,轻松搞定,而且可以手工修改一些通过EXP/IMP无法修改的参数,比如freelists ,freelists group, tablespace,initial等,还能够更改列的名字。
s) Relocate Index
i. 我们知道,表和索引一般都需要分开存放到不同的表空间,这样比较便于管理,性能上也会有一定的提高,因为可以对表和索引同时存取。
ii. 但是实际上很多时候,由于这样那样的原因,常常忽略了索引单独存放这个基本概念,比如建立主键约束的时候没有加USING INDEX子句,后来disable/enable了主键约束/唯一性约束等,都会导致把索引直接存放到和表同一个表空间里面。
iii. 手工发现这些索引,再逐个移动非常麻烦,容易出错,在Toad里面,就很容易根据用户/表空间来发现那些不恰当存放的索引,可以批量移动这些索引,并且允许重新定义索引的存储子句。
t) Generate Schema Scripts:
i. 可以用来生成整个用户下所有/部分对象的DDL语句。可以把结果保存为sql语句或者保存为TOAD的自定义格式。
ii. 可以用来复制表结构,(EXP/IMP有非常严重的缺陷,就是从一个大的数据库倒出的表结构,无法导入到一个小的数据库里面,因为里面包含了原来表的存储信息,即使选择rows=N,也要在导入数据库里面占用相当大的空间)
u) Compare Schema:
i. 在开发的时候,有时候同时在几个开发库上开发,但是最后两个库的结构不完全一样,很难比较
ii. 用TOAD的这个功能,可以对两个数据库的模式(用户)下面的所有对象(包括存储过程)进行比较,可以选择具体的比较内容。
iii. 可以通过直接打开两个到各自数据库的连接,或者根据Toad generate schame scripts生成的文件进行对比。
iv. 可以直接生成同步两个数据库的sql脚本,给出汇总的区别简要和详细报告等。

--------------------------------------------------------------------------------

几乎是学习TOAD的唯一中文使用说明,我再也找不到比这个更好的了,特跟大家分享。
转载的,找不到出处了。如果原作者有意见的话,我就把这个删掉好了^_^

--------------------------------------------------------------------------------

posted @ 2007-10-28 10:33 克林顿 阅读(199) | 评论 (0)编辑 收藏
  2007年9月23日

         让我们全心全意地收获生活的每一天,在平凡的日子里感受生命的美好,在耕耘里感受劳动的快乐和收获的期待。
  ——俞敏洪

  生活中其实没有绝境。绝境在于你自己的心没有打开。你把自己的心封闭起来,使它陷于一片黑暗,你的生活怎么可能有光明!封闭的心,如同没有窗户的房间,你会处在永恒的黑暗中。但实际上四周只是一层纸,一捅就破,外面则是一片光辉灿烂的天空。
  ——俞敏洪

  思想是人的翅膀,带着人飞向想去的地方。
  ——俞敏洪

  一个人生活中的失意乃至失败在很大程度上来说是心理的而不是现实的,是技术性的而不是宿命的。现实至多为失败者提供了解脱的借口,而对宿命的信仰最终无情地扑灭了成功的任何希望。
  ——王强

  对一个年轻人而言最重要的是个人价值的增加。
  ——钱永强


  千万别摸着石头过河,要清楚最终追求是什么,究竟想成为什么样的人,当别人都迷迷糊糊的时候,你千万别也迷迷糊糊的。
  ——钱永强

  人生永远都是一种balance 。当你得到某个东西的时候,就意味着你在失去;当你失去某个东西的时候,就意味着你在得到。无论失去和得到都不需要高兴,因为这都是有代价的,只不过有的代价你能看得见,而有的代价你看不见。
  ——杜伟

  人生有五颜六色的价值观,但一种价值观一旦被你认可,你就可能一辈子追求这个价值观而无怨无悔;世界有千紫万红的思想,但你只要接受其中一种,你就能够终生信奉它而至死不逾。
  ——徐小平
 
  即便有时迫于生活的困境,你会去做家教、去做苦工、去廉价出卖你的劳动,但谁都没有资格看不起你,因为你是在靠自己的劳动养活自己,用自己的双手去创造未来。或许今天你是一个怀揣梦想、不名一文的青年,但多年后或许你会拥有令人惊羡的成功,因为这些经历让你懂得了人生的真正含义。
  ——党道远

  每个人总会经历许许多多的失意与挫折,但当这些降临到你身上时,千万不要放弃。永远不要忘记你儿时的梦想,只有心中怀揣着火热的梦想时,人生才是美丽的。往往你会发现,当你坚持到最后时,一切的失意都会被成功的幸福所替代。
  ——宁滨
  
  生命本身就是奇迹,每个人都要勇敢地去梦想,勇敢地创造奇迹。
  ——徐晗

  痛苦的秘密在于有闲功夫为自己是否幸福而烦恼。
  ——崔蕊

  在逆境中,要能够战胜自己,寻求生活中的乐趣。
  ——赵东坡

  其实我们每个人都有一种癌症,那就是死亡。我们终将会离去,但有些人将梦想带进了坟墓,而有些人就在今天去做,珍惜今天的每一分钟,这就是平庸和杰出的唯一区别。
  ——张晓楠

  上帝制造人类的时候就把我们制造成不完美的人,我们一辈子努力的过程就是使自己变得更加完美的过程,我们的一切美德都来自于克服自身缺点的奋斗。
  ——俞敏洪

  为了不让生活留下遗憾和后悔,我们应该尽可能抓住一切改变生活的机会。
  ——俞敏洪

  生命,需要我们去努力。年轻时,我们要努力锻炼自己的能力,掌握知识、掌握技能、掌握必要的社会经验。机会,需要我们去寻找。让我们鼓起勇气,运用智慧,把握我们生命的每一分钟,创造出一个更加精彩的人生。
  ——俞敏洪

  运气永远不可能持续一辈子,能帮助你持续一辈子的东西只有你个人的能力。
  ——俞敏洪

  谁说"机会面前,人人平等",新东方相信,个人奋斗制胜、攫取成功的精神财产将永远贫富不均。在浩瀚的生命之岸,你应该自豪地告诉世界,你追求过,你奋斗过,你为辉煌的人生从来没有放弃过希望,从来没有停止过拼搏。而这个造就了万物的世界也将自豪而欣慰地回答你:只要奋斗不息,人生终将辉煌。
  ——俞敏洪

  有些人一生没有辉煌,并不是因为他们不能辉煌,而是因为他们的头脑中没有闪过辉煌的念头,或者不知道应该如何辉煌。
  ——俞敏洪

  在我们的生活中最让人感动的日子总是那些一心一意为了一个目标而努力奋斗的日子,哪怕是为了一个卑微的目标而奋斗也是值得我们骄傲的,因为无数卑微的目标积累起来可能就是一个伟大的成就。金字塔也是由每一块石头累积而成的,每一块石头都是很简单的,而金字塔却是宏伟而永恒的。
  ——俞敏洪

  新东方"在绝望中寻找希望"这句话,跟美国著名的民权运动家Martin Luther King所说的话是一模一样的,他在I have a dream演讲词中说过:"We will hew out of the mountain of despair a stone of hope."(我们从绝望的大山中砍出一块希望的石头。)请记住,绝望是大山,但是只要你能砍出一块希望的石头,你就有了希望。
  ——俞敏洪

  哪怕是最没有希望的事情,只要有一个勇敢者去坚持做,到最后就会拥有希望。
  ——俞敏洪

  所有的人都是凡人,但所有的人都不甘于平庸。我知道很多人是在绝望中来到了新东方,但你们一定要相信自己,只要艰苦努力,奋发进取,在绝望中也能寻找到希望,平凡的人生终将会发出耀眼的光芒......
  ——俞敏洪

  光有奋斗精神是不够的,还需要脚踏实地一步一步地去做。要先分析自己的现状,分析自己现在处于什么位置,到底具备什么样的能力,这也是一种科学精神。你给自己定了目标,你还要知道怎么样去一步一步地实现这个目标。从某种意义上说,树立具体目标和脚踏实地地去做同等重要。
  ——俞敏洪

  上帝是公平的,只要你付出,就有回报!不要去想什么时候会有收获,关键是你有没有百分百的付出,学习是如此,工作是如此,做人更是如此!
  ——江博

  如果你真的下决心做一件事,那全世界都会给予你帮助。
  ——杜伟

  一个人的成功不取决于他的智慧,而是毅力,Never quit, keep up with it。
  ——杜伟


  对于年轻人而言,最重要的品质是诚实正直,这是做成大事的基础;其次是分析问题的方法,如何全面、有前瞻性地分析问题,不走弯路,是取得成功的关键;最后是技能,不断地学习挑战自己,增加自己的价值是作为一个人应当不断追求的目标。
  ——钱永强


  只有倒空自己,才能学到更多。
  ——周成刚

  坚持是世界上最简单的事,因为只要你自己愿意去坚持就没有人可以阻止你,不让你去坚持;但坚持又是世界上最难的事,因为坚持到最后的人一定是少数——就是成功者。其实人都有惰性,成功者与失败者的差异就在于成功者能够在做事的过程中找到一种东西来克服自己的惰性而坚持自己的目标,但失败者却不能。
  ——孙继军

  Every ebb awaits an overwhelming flow. 跨过人生低谷,飞跃前途险峰。
  ——汪海涛

  当你无法从一楼蹦到三楼时,不要忘记走楼梯。要记住伟大的成功往往不是一蹴而就的,必须学会分解你的目标 ,逐步实施。
  ——王海波

       记住,来得太容易的东西绝对不是最好的。
  ——王海波

  没有承受困难的能力,就没有希望了。
  ——梁宏才

  在你生命中确有一个你所喜欢的目标,然后就朝着目标勇往直前。当你把你的一切都投入到你所喜欢的事业上时,你会发现,你所渴望的机会一个接一个全都掌握了。就如同珊瑚静止在水中,它所需要的原生物却不断地送上门来。
  ——梁宏才

  人的发展历程就像爬山,每登上一个高度都能看到更远更美的风景。很多人留恋眼前的风景,不愿继续努力前行。只有一少部分人,才敢于向上攀登。只有这些人才能到达那些更高更远的风景,也只有这些人才能体会到如果当初停下脚步会留下多少遗憾。只有他们能够居高临下地看待下面的登山者。
  ——梁宏才

  无论在失意的时候还是得意的时候,我总是用下面的寓言来激励自己:
  静谧的非洲大草原上,夕阳西下,这时,一头狮子在沉思,明天当太阳升起,我要奔跑,以追上跑得最快的羚羊;此时,一只羚羊也在沉思,明天当太阳升起,我要奔跑,以逃脱跑得最快的狮子。那么,无论你是狮子或是羚羊,当太阳升起,你要做的,就是奔跑!
  ——张红岩

 
  为了实现自己既定的目标,必须能耐得住寂寞单干。
  ——杨鹏

  人年轻的时候经历种种磨难并不是件可怕的事情。经历过的事情,挫折也好,忧伤也罢,都会成为你生命中最宝贵的财富。坚持下去,你会发现这个世界上真正能够打败你的,只有你自己。
  ——宁滨

  失败只有一种,那就是半途而废。
  ——罗永浩

  置身卓越的环境并追求卓越,你也将变得卓越。
  ——韩鹏

  有压力,但不会被压垮;迷茫,但永不绝望。
  ——彭新松

  把你的手举过你的头顶,你会发现你的手总比你的头要高,说明做事情总比想事情重要,实实在在的去做些什么吧!
  ——张建宇 
  
  坚持就有结果,辛苦必有收获。
  ——李笑来

  人生最艰难的时候就是离胜利最近的时候。
  ——张建成

  力量必须从自己身上寻找,你终究会发现:你是真正的强者!
  ——李力

  开始努力吧!在这个过程中你必须放弃很多东西,但你要明白它们都不是你最终想要的,你要相信在你成功以后,总有一天它们会再回来,而且比现在更美好!
  ——张浩

  每一个人都会遇到困难挫折,被人瞧不起,受到拒绝,就看你自己如何对待。你是一笑置之?还是为此浪费宝贵的时间,那是否值得?一个人要摆正自己的方向,朝着你既定的目标奋斗。
  ——王进杰

  不要总是因为考虑长远的打算而忽略了随时可付出的努力!
  ——王进杰

  做决定之前仔细考虑,一旦作了决定就要勇往直前、坚持到底。
  ——李春怡

  能战胜别人的人是英雄!能战胜自己的人是圣人。
  ——翁云凯

  生命线、事业线和爱情线都在我们手中。
  ——史学冬 

  别以为自己已经很努力了,比你努力的人多得是。在这个充满竞争的社会里,别人努力,你就要更努力。
  ——戴云

  你为了向别人、向世界证明自己而努力拼搏,而一旦你真的取得了成绩,才会明白:人无须向别人证明什么,只要你能超越自己。
  ——高樾

  人生的奋斗目标不要太大,认准了一件事情,投入兴趣与热情坚持去做,你就会成功。
  ——俞敏洪
  
  成功没有尽头,生活没有尽头,生活中的艰难困苦对我们的考验没有尽头,在艰苦奋斗后我们所得到的收获和喜悦也没有尽头。当你完全懂得了"成功永远没有尽头"这句话的含义时,生活之美也就向你展开了她迷人的笑容。
  ——俞敏洪
  
  勤奋是任何成功的基石,语言学习尤其如此。在成功到来之前,每个人都要独自穿越一段黑夜、攀上一条陡坡。
  ——江博

  我只是个一般人,只不过没有浪费过时间。每一段时间我都清楚自己有一个目标,也有毅力能够坚持实现这个目标。做任何事情的时候都要有怀疑精神,这样才能不断地去分析、思考,使自己不走弯路,不断地调整自己。
  ——钱永强

  我做事情的重点并不是做事情的过程中选择最有效的方法,重点是把事情做成,只有能够把事情做成的方法才是正确的方法。
  ——钱永强

  把一件事干到底就会成功!
  ——王海波

    失败的是事,绝不应是人。
  ——黄颀
  
  善于利用零散时间的人,才是最成功的人。往往差异就产生于这些零散的时间中。
  ——张晓楠

  做人如水,做事如山。
  ——俞敏洪

posted @ 2007-09-23 22:29 克林顿 阅读(1935) | 评论 (3)编辑 收藏
  2007年8月11日
        规矩一,酒桌上虽然“感情深,一口闷;感情浅,舔一舔”但是喝酒的时候决不能把这句话挂在嘴上。
  规矩二,韬光养晦,厚集播发,切不可一上酒桌就充大。
  规矩三,领导相互喝完才轮到自己敬。
  规矩四,可以多人敬一人,决不可一人敬多人,除非你是领导。
  规矩五,自己敬别人,如果不碰杯,自己喝多少可视乎情况而定,比如对方酒量,对方喝酒态度,切不可比对方喝得少,要知道是自己敬人。
  规矩六,自己敬别人,如果碰杯,一句,我喝完,你随意,方显大肚。
  规矩七,自己职位卑微,记得多给领导添酒,不要瞎给领导代酒,就是要代,也要在领导确实想找人代,还要装作自己是因为想喝酒而不是为了给领导代酒而喝酒。比如领导甲不胜酒力,可以通过旁敲侧击把准备敬领导甲的人拦下。
  规矩八,端起酒杯(啤酒杯),右手扼杯,左手垫杯底,记着自己的杯子永远低于别人。自己如果是领导,知趣点,不要放太低,不然怎么叫下面的做人?
  规矩九,如果没有特殊人物在场,碰酒最好按时针顺序,不要厚此薄彼。
  规矩十,碰杯,敬酒,要有说词,不然,我tmd干吗要喝你的酒?
  规矩十一,桌面上不谈生意,喝好了,生意也就差不多了,大家心里面了了然,不然人家也不会敞开了跟你喝酒。
  规矩十二,不要装歪,说错话,办错事,不要申辩,自觉罚酒才是硬道理。
  规矩十三,假如,纯粹是假如,遇到酒不够的情况,酒瓶放在桌子中间,让人自己添,不要傻不垃圾的去一个一个倒酒,不然后面的人没酒怎么办?
  规矩十四,最后一定还有一个闷杯酒,所以,不要让自己的酒杯空着。跑不了的~
  规矩十五,注意酒后不要失言,不要说大话,不要失态,不要吐沫横飞,筷子乱甩,不要手指乱指,喝汤噗噗响,不要放屁打嗝,憋不住去厕所去,没人拦你。
  规矩十六,不要把“我不会喝酒”挂在嘴上(如果你喝的话),免得别人骂你虚伪,不管你信不信,人能不能喝酒还真能看出来。
  规矩十七,领导跟你喝酒,是给你face,不管领导怎么要你喝多少,自己先干为敬,记着啊,双手,杯子要低。
  规矩十八,花生米对喝酒人来说,是个好东西。保持清醒的头脑,酒后嘘寒问暖是少不了的,一杯酸奶,一杯热水,一条热毛巾都显得你关怀备至。
  
  如果你酒量不怎么样,给你一些诀窍:
  1、不要主动出击,实行以守为攻战略;
  2、桌前放两个大杯,一杯放白酒,一杯放矿泉水,拿小酒盅干杯,勤喝水,到酒桌上主客基本都喝8分醉时,可以以水代酒,主动出击;(这条不建议用)
  3、干杯后,不要马上咽下去,找机会用餐巾抹嘴,把酒吐餐巾里;(适用女性)
  4、上座后先吃一些肥肉类、淀粉类食品垫底,喝酒不容易醉;
  5、掌握节奏,不要一下子喝得太猛;
  6、不要几种酒混着喝,特别容易醉;
  7、领导夹菜时,千万不要转酒桌中间的圆盘,领导夹菜你转盘是酒桌上大忌;
  8、喝到六分醉时,把你面前的醋碟中的醋喝下,再让服务员添上……
  9.每次干杯时,倒满,然后在喝前假装没有拿稳酒盅,尽量洒出去一些,这样每次可以少喝进去不少
    本人虽不好酒,但喝起来一贯尽力而为并坚持到底。酒品、酒胆也都不错,虽然喝的少,但都是真心实意。
posted @ 2007-08-11 14:55 克林顿 阅读(284) | 评论 (0)编辑 收藏
  2007年1月26日

不是很复杂,知道以下的知识就够了:
  
  1.Java 包括两种数据类型:
  原始数据类型(primitive data type):int, byte, float, long, boolean ...
  对象(Object):其他的都是对象,包括数组。
  
  
  2.每种 原始数据类型 都有一个相对应的包装类(Wrapper Class):
  如 int 对应 Integer, float 对应 Float,有如下特性:
  
  1)包装类里的数值是无法修改的
  
  2)都有一个 构造方法,参数为 对应的原始数据类型,比如:
  new Integer (10), new Boolean (true)
  
  3)都有一个 构造方法,参数为一个字符串,把字符串转换为值,比如:
  new Integer ("10"), new Boolean ("true")
  
  4)有一个方法,可以把存在包装类里的值取出来:
  Integer.intValue(), Float.floatValue();
  5)有一个静态方法,不用创建一个对象就可以把字符串转换为值,比如:
  int i = Integer.parseInt("10");
  
  
  3.String 和 StringBuffer
  每一个 Object 都有一个 toString() 函数。
  Java 里使用 操作符重载的地方只有一个: + 操作:
  如果两个操作数中有一个是 String,就调用另一个操作数的 toString,结果就变成
  两个 String 的相加。
  
  常用在 Exception 的处理中,比如:
  try {
  }catch (Exception e){
  System.out.println ("Error: " + e);
  }
  处理过程:"Error: " + e -> "Error: " + e.toString()
  
  如果是 String 和 基本数据类型相加,就先把这个基本数据类型用他的包装类处理。
  "String" + 123 -> "String" + Integer(123) -> "String" + Integer(123).toString()
  
  String + String 的过程,Java 的内部处理过程(1.4以后)实际上是这样的:
  "String1" + "String2" -> new StringBuffer("String1").append("String2").toString()
  
  先建立一个 StringBuffer, 再用 append 计算,最后把 StringBuffer 转换成 String
  原因是 String 是 不可修改的,StringBuffer 是可以修改的,字符串计算时还是用
  StringBuffer 比较快
  
  所以,数据转换:
  int -> String
  String newValue = "" + 10;
  String -> int
  int i = (new Integer("10")).intValue();
  int i = Integer.parseInt("10");
  

 

1 如何将字串 String 转换成整数 int? 

A. 有两个方法:

1). int i = Integer.parseInt([String]); 或 
i = Integer.parseInt([String],[int radix]);

2). int i = Integer.valueOf(my_str).intValue(); 

注: 字串转成 Double, Float, Long 的方法大同小异. 


2 如何将整数 int 转换成字串 String ? 


A. 有叁种方法:

1.) String s = String.valueOf(i);

2.) String s = Integer.toString(i); 

3.) String s = "" + i; 

注: Double, Float, Long 转成字串的方法大同小异.

posted @ 2007-01-26 16:18 克林顿 阅读(492) | 评论 (0)编辑 收藏
  2007年1月25日

根据字符串(比如:姓名)进行数据检索,相信很多人都做过。有没有一个好的办法可以进行快速的数据过虑呢?比如:按汉字拼音首字母,检索“夜未眠”我们只要输入“y”就可以了,是不是简单实用很多呢?!呵呵~
  但是如何才能将字符转换为汉字拼音单个字母呢?下面的程序或许就可以解决这一问题……

package com.javer.blog.common;

import java.io.UnsupportedEncodingException;

/**
* 取得给定汉字串的首字母串,即声母串
* <p>Title: ChineseCharToEn</p>
* <p>@author javer QQ:84831612</p>
* @version 1.0
* @date 2004-02-19
* 注:只支持GB2312字符集中的汉字
*/
public final class ChineseCharToEn
{
private final static int[] li_SecPosValue =
{
1601, 1637, 1833, 2078, 2274, 2302, 2433, 2594, 2787, 3106, 3212, 3472,
3635, 3722, 3730, 3858, 4027, 4086, 4390, 4558, 4684, 4925, 5249, 5590
};
private final static String[] lc_FirstLetter =
{
"a", "b", "c", "d", "e", "f", "g", "h", "j", "k", "l", "m", "n", "o", "p",
"q", "r", "s", "t", "w", "x", "y", "z"
};

/**
* 取得给定汉字串的首字母串,即声母串
* @param str 给定汉字串
* @return 声母串
*/
public String getAllFirstLetter(String str)
{
if (str == null || str.trim().length() == 0)
{
return "";
}

String _str = "";
for (int i = 0; i < str.length(); i++)
{
_str = _str + this.getFirstLetter(str.substring(i, i + 1));
}

return _str;
}

/**
* 取得给定汉字的首字母,即声母
* @param chinese 给定的汉字
* @return 给定汉字的声母
*/
public String getFirstLetter(String chinese)
{
if (chinese == null || chinese.trim().length() == 0)
{
return "";
}
chinese = this.conversionStr(chinese, "GB2312", "ISO8859-1");

if (chinese.length() > 1) //判断是不是汉字
{
int li_SectorCode = (int) chinese.charAt(0); //汉字区码
int li_PositionCode = (int) chinese.charAt(1); //汉字位码
li_SectorCode = li_SectorCode - 160;
li_PositionCode = li_PositionCode - 160;
int li_SecPosCode = li_SectorCode * 100 + li_PositionCode; //汉字区位码
if (li_SecPosCode > 1600 && li_SecPosCode < 5590)
{
for (int i = 0; i < 23; i++)
{
if (li_SecPosCode >= li_SecPosValue[i] &&
li_SecPosCode < li_SecPosValue[i + 1])
{
chinese = lc_FirstLetter[i];
break;
}
}
}
else //非汉字字符,如图形符号或ASCII码
{
chinese = this.conversionStr(chinese, "ISO8859-1", "GB2312");
chinese = chinese.substring(0,1);
}
}

return chinese;
}

/**
* 字符串编码转换
* @param str 要转换编码的字符串
* @param charsetName 原来的编码
* @param toCharsetName 转换后的编码
* @return 经过编码转换后的字符串
*/
private String conversionStr(String str, String charsetName,String toCharsetName)
{
try
{
str = new String(str.getBytes(charsetName), toCharsetName);
}
catch (UnsupportedEncodingException ex)
{
System.out.println("字符串编码转换异常:" + ex.getMessage());
}

return str;
}
}
 

  测试代码:

package com.javer.test;

import com.javer.blog.common.ChineseCharToEn;

/**
* 测试程序
* <p>Title: JaverTest</p>
* @author javer QQ:84831612
*/
public class JaverTest
{
public static void main(String[] args)
{
ChineseCharToEn cte = new ChineseCharToEn();
System.out.println("\"夜未眠\"的首个拼音字母是:" + cte.getFirstLetter("夜未眠"));
System.out.println("\"Javer夜未眠\"的首个拼音字母是:" + cte.getFirstLetter("Javer夜未眠"));
System.out.println("\"Javer夜未眠\"的全部字母的拼音字母是:" + cte.getAllFirstLetter("Javer夜未眠"));
}

  运行结果:

"夜未眠"的首个拼音字母是:y
"Javer夜未眠"的首个拼音字母是:J
"Javer夜未眠"的全部字母的拼音字母是:Javerywm


posted @ 2007-01-25 22:25 克林顿 阅读(557) | 评论 (1)编辑 收藏
JNI

一.系统环境 2
二.JNI的简要使用例子 2
三.JNI调用中考虑的问题 3
四.JNI中对JAVA传入数据的处理 5
五.JAVA调用本地接口后的数据处理问题 5
六.JAVA中的一些小东西 5

一.系统环境
linux操作系统kernel2.4.2,安装j2sdk1.4.0
二.JNI的简要使用例子
下面是一个简单的例子实现打印一句话的功能,但是用的c的printf最终实现。一般提供给java的jni接口包括一个so文件(封装了c函数的实现)和一个java文件(需要调用path的类)。
1. JNI的目的是使java方法中能够调用c实现的一些函数,比如以下的java类,就需要调用一个本地函数testjni(一般声明为private native类型),首先需要创建文件weiqiong.java,内容如下:
class weiqiong
{
static
{
System.loadLibrary("testjni");//载入静态库,test函数在其中实现
}
private native void testjni(); //声明本地调用
public void test()
{
testjni();
}
public static void main(String args[])
{
weiqiong haha = new weiqiong();
haha.test();
}
}

2.然后执行javac weiqiong.java,如果没有报错,会生成一个weiqiong.class。

3.然后执行javah weiqiong,会生成一个文件weiqiong.h文件,其中有一个函数的声明如下:
JNIEXPORT void JNICALL Java_weiqiong_testjni
(JNIEnv *, jobject);

4.创建文件testjni.c将上面那个函数实现,内容如下:
#include <stdio.h>
#include <weiqiong.h>
JNIEXPORT void JNICALL Java_weiqiong_testjni
(JNIEnv *env, jobject obj)
{
printf("haha---------go into c!!!n");
}

5.为了生成.so文件,创建makefile文件如下:
libtestjni.so:testjni.o makefile
gcc -Wall -rdynamic -shared -o libtestjni.so testjni.o
testjni.o:testjni.c weiqiong.h
gcc -Wall -c testjni.c -I./ -I/usr/java/j2sdk1.4.0/include -I/usr/java/j2sdk1.4.0/include/linux
cl:
rm -rf *.o *.so
注意:gcc前面是tab空,j2sdk的目录根据自己装的j2sdk的具体版本来写,生成的so文件的名字必须是loadLibrary的参数名前加“lib”。

6.export LD_LIBRARY_PATH=.,由此设置library路径为当前目录,这样java文件才能找到so文件。一般的做法是将so文件copy到本机的LD_LIBRARY_PATH目录下。

7.执行java weiqiong,打印出结果:“haha---------go into c!!!”
三.JNI调用中考虑的问题
在首次使用JNI的时候有些疑问,后来在使用中一一解决,下面就是这些问题的备忘:

1。 java和c是如何互通的?
其实不能互通的原因主要是数据类型的问题,jni解决了这个问题,例如那个c文件中的jstring数据类型就是java传入的String对象,经过jni函数的转化就能成为c的char*。
对应数据类型关系如下表:
Java 类型 本地c类型 说明
boolean jboolean 无符号,8 位
byte jbyte 无符号,8 位
char jchar 无符号,16 位
short jshort 有符号,16 位
int jint 有符号,32 位
long jlong 有符号,64 位
float jfloat 32 位
double jdouble 64 位
void void N/A

JNI 还包含了很多对应于不同 Java 对象的引用类型如下图:


2。 如何将java传入的String参数转换为c的char*,然后使用?
java 传入的String参数,在c文件中被jni转换为jstring的数据类型,在c文件中声明char* test,然后test = (char*)(*env)->GetStringUTFChars(env, jstring, NULL);注意:test使用完后,通知虚拟机平台相关代码无需再访问:(*env)->ReleaseStringUTFChars(env, jstring, test);

3. 将c中获取的一个char*的buffer传递给java?
这个char*如果是一般的字符串的话,作为string传回去就可以了。如果是含有’ ’的buffer,最好作为bytearray传出,因为可以制定copy的length,如果copy到string,可能到’ ’就截断了。
有两种方式传递得到的数据:
一种是在jni中直接new一个byte数组,然后调用函数(*env)->SetByteArrayRegion(env, bytearray, 0, len, buffer);将buffer的值copy到bytearray中,函数直接return bytearray就可以了。
一种是return错误号,数据作为参数传出,但是java的基本数据类型是传值,对象是传递的引用,所以将这个需要传出的byte数组用某个类包一下,如下:
class RetObj
{
public byte[] bytearray;
}
这个对象作为函数的参数retobj传出,通过如下函数将retobj中的byte数组赋值便于传出。代码如下:
jclass cls;
jfieldID fid;
jbyteArray bytearray;
bytearray = (*env)->NewByteArray(env,len);
(*env)->SetByteArrayRegion(env, bytearray, 0, len, buffer);
cls = (*env)->GetObjectClass(env, retobj);
fid = (*env)->GetFieldID(env, cls, "retbytes", "[B"]);
(*env)->SetObjectField(env, retobj, fid, bytearray);

4。 不知道占用多少空间的buffer,如何传递出去呢?
在jni的c文件中new出空间,传递出去。java的数据不初始化,指向传递出去的空间即可。
四.JNI中对JAVA传入数据的处理
1. 如果传入的是bytearray的话,作如下处理得到buffer:
char *tmpdata = (char*)(*env)->GetByteArrayElements(env, bytearray, NULL);
(*env)->ReleaseByteArrayElements(env, bytearray, tmpdata, 0);
五.JAVA调用本地接口后的数据处理问题
1. java得到的数据是String的话,直接处理就可以了。
2. 得到的如果是bytearray的话,作如下处理:
DataInputStream in = new DataInputStream(new ByteArrayInputStream(bytearray));
byte []byte1 = new byte[36];
in.read(byte1,0,36);
String string = new String(byte1);
System.out.println("读出的第一个字段为:"+string);
六.JAVA中的一些小东西
1.JAVA中常用数据类型转换函数
string->byte
Byte static byte parseByte(String s)

byte->string
Byte static String toString(byte b)

char->string
Character static String to String (char c)

string->Short
Short static Short parseShort(String s)

Short->String
Short static String toString(Short s)

String->Integer
Integer static int parseInt(String s)

Integer->String
Integer static String tostring(int i)

String->Long
Long static long parseLong(String s)

Long->String
Long static String toString(Long i)

String->Float
Float static float parseFloat(String s)

Float->String
Float static String toString(float f)

String->Double
Double static double parseDouble(String s)

Double->String
Double static String toString(Double d)

2. 类的数据类型转换
//转换string为int
public static int stringToInt(String intstr)
{
Integer integer;
integer = Integer.valueOf(intstr);
return integer.intValue();
}
//转换int为string
public static String intToString(int value)
{
Integer integer = new Integer(value);
return integer.toString();
}
//转换string为float
public static float stringToFloat(String floatstr)
{
Float floatee;
floatee = Float.valueOf(floatstr);
return floatee.floatValue();
}
//转换float为string
public static String floatToString(float value)
{
Float floatee = new Float(value);
return floatee.toString();
}
//change the string type to the sqlDate type
public static java.sql.Date stringToDate(String dateStr)
{
return java.sql.Date.valueOf(dateStr);
}
//change the sqlDate type to the string type
public static String dateToString(java.sql.Date datee)
{
return datee.toString();
}
六.参考文档
1.JAVA本地接口规范
http://www.iplab.is.tsukuba.ac.jp/~liuxj/jdk1.2/zh/docs/guide/jni/spec/jniTOC.doc.html

2.JAVA与C++::关于JNI中文字符串操作问题总结
http://dev.csdn.net/Develop/article/17/17157.shtm
转载自:http://www.unlinux.com/doc/jsp/20051028/6026.h

posted @ 2007-01-25 22:04 克林顿 阅读(266) | 评论 (0)编辑 收藏
  2006年9月17日
顾景范
军事医学科学院 300050

在预防许多慢性退化性疾病中,多摄入植物性食物,尤其是蔬菜、水果、豆类、坚果等已列为膳食指南的重要内容。这些食物除含有传统的营养素和膳食纤维外,还有一些成分也和某些慢性病危险因素的下降有关,称之为“植物化学素”(Phytochemicals)。
植物化学素一般可以按结构分为类黄酮、类胡萝卜素、硫化物、植物固醇、皂甙等,也可以按生物活性分为抗氧化物、植物雌激素、蛋白酶抑制剂等。由于多数慢性退化性疾病与氧化应激有关,因此抗氧化物显得尤为重要。体内可以合成一些内源性抗氧化物,如尿酸、泛醌、谷胱甘肽、硫辛酸、褪黑素等,但主要需从食物获得天然抗氧化物,其中包括一些抗氧化维生素,如维生素E、维生素C、β-胡萝卜素,和组成抗氧化酶的微量元素锌、铜、锰、硒、铁。此外,植物化学素是天然抗氧化物的重要组成部分。

类黄酮的抗氧化作用
类黄酮是一类多酚化合物,广泛存在于水果、蔬菜、谷物、根茎、树皮、花卉、茶叶和红酒中,有4000多种。根据化学结构,类黄酮可分成几类,最常见的有黄酮醇(Flavonols)、黄酮(Flavones)、黄烷酮(Flavanones)、黄烷醇(Flavanols)即儿茶素(Catechins)、花色素苷(Anthocyanidins)、异黄酮(Isoflavones)等。黄酮醇与黄酮几乎在所有植物中均可找到,黄酮醇中最多见的是栎皮酮(Quercetin)、杨梅黄酮(Myricetin)、堪非醇(Kaempferol)三种,黄酮中最多见的是芹菜配基(Apigenin)和毛地黄黄酮(Luteolin)两种。
不同国家由于饮食习惯和自然资源不同,类黄酮的食物来源及其化合物不尽相同。栎皮酮与儿茶素可作为最常见的类黄酮代表性化合物,它的抗氧化作用也是最强的。
1.直接清除自由基——类黄酮的羟基具有高度活性,可直接与自由基作用。
类黄酮(OH)+R·→类黄酮(O·)+RH
有些类黄酮能直接清除超氧化物,另有一些则能清除高度活性的过氧亚硝基。体外实验,类黄酮能抑制LDL氧化,所以可对动脉硬化起防止作用。
2.抑制一氧化氮合酶——一氧化氮合酶使内皮细胞与巨噬细胞释放一氧化氮(NO),以维持血管扩张。但在缺血再灌注损伤时,产生过多NO与超氧阴离子,NO与自由基反应,生成过氧亚硝基,它能直接氧化LDL,对细胞膜造成不可逆的损伤。类黄酮,包括栎皮酮可干预一氧化氮合酶活性,减少NO生成,也可直接清除NO。类黄酮中的sibilin抑制NO呈量效关系。
3.抑制黄嘌呤氧化酶——在缺血时,生理情况下存在的黄嘌呤脱氢酶能变成黄嘌呤氧化酶,再灌注时,黄嘌呤氧化酶与氧分子反应,释放出超氧自由基。类黄酮中的栎皮酮与sibilin能抑制黄嘌呤氧化酶而减轻氧化损伤。还有研究报告根据构效关系毛地黄黄酮是黄嘌呤氧化酶的最强抑制剂。
4.减少白细胞的不活动性——正常情况下,白细胞沿内皮壁自由活动,而缺血及炎症时,内皮衍生的各种介质和补体因子可使白细胞粘附内皮壁而不活动,并刺激中性白细胞脱粒,引起氧自由基生成与释放对细胞有毒性的氧化物及炎性物质,造成组织损伤。类黄酮可减少白细胞的不活动性,抑制中性白细胞脱粒,防止似炎症的再灌注损伤。
5. 其他作用途径——当铁存在时活性氧可引起脂质过氧化。类黄酮如栎皮酮能与铁螯合,防止脂质过氧化。栎皮酮亦可直接抑制脂质过氧化。类黄酮的另一作用是减少过氧化酶的释放,通过干预α1抗胰蛋白酶的激活而抑制白细胞产生活性氧。此外,类黄酮通过抑制脂氧酶抑制花生四烯酸代谢,从而具有抗炎抗血栓作用。

茶多酚的抗氧化作用
茶叶中的主要类黄酮是黄烷醇,又称儿茶素,有自由式与酯式化合物,其多聚体称单宁。黄烷醇占茶叶干重的25%,其他有黄酮醇、酚酸及缩酚酸类、其他多酚类,此四项类黄酮占茶叶干重的36%,统称茶多酚(TP),已证明是茶叶保健作用的主要功能因子。
1. 清除活性氧与自由基——多形核白细胞在促癌剂PMA刺激下可发生呼吸爆发而产生大量活性氧自由基,TP对活性氧自由基的综合清除效果呈剂量关系,酯型的效果更强。
(1)超氧自由基O·2——以次黄嘌呤氧化酶为产生O·2的体外试验系统,用化学发光法可发现绿茶、乌龙茶、红茶的TP都有清除O·2的作用,且呈高度的量效关系,甚至超过VC和VE。
(2)羟自由基·OH——用Fenton反应体系研究TP对·OH的清除效果,表明很低浓度的TP就可较完全地清除·OH,但超过这一范围(0.043-0.100mg/ml),反而可起助氧化作用而抵消对·OH的清除效果。
(3)单线氧1O2——光敏化剂玫瑰红光照后产生单线氧,以DMNA被漂白的作用测定1O2的产生及清除,绿茶提取物可清除1O2,在起始阶段作用更显著,随浓度增加,清除作用加强。
(4) 脂自由基——脂类在活性氧或辐射条件下产生自由基,引发链式反应。TP可与脂质过氧化中间产物脂自由基或脂氧自由基反应,终止链式反应而抑制脂质氧化。低密度脂蛋白的氧化是动脉硬化发病机制之一,因而清除自由基抗脂质过氧化是防治上述病理过程的重要保护措施。
2. 抑制氧化酶系,防护与激活抗氧化酶系
(1) 抑制氧化酶——体内许多氧化酶如黄嘌呤氧化酶、P-450酶、髓过氧化物酶、脂氧化酶和环氧化酶都可催化自由基的生成。TP对上述各种氧化酶都有抑制作用,可预防病理条件下自由基的爆发性发生。
(2) 激活抗氧化酶——体内许多抗氧化酶如超氧化物歧化酶(SOD)、谷胱甘肽过氧化物酶(GSH-PX)、过氧化物酶(CAT),对自由基有高效的清除作用。TP不仅能防护体内抗氧化酶,还能促进其活性。
3. 络合诱导氧化的金属离子
(1) 络合铁离子——铁离子能促使O·2、·OH、H2O2生成,催化脂过氧化物裂解,引发新的脂质过氧化链式反应。体内外试验均证明TP能有效络合铁离子而减轻自由基损伤。因儿茶素主要络合游离的过量铁,不会争夺铁蛋白的络合态铁,故不会引起缺铁性贫血。
(2) 络合铜离子——TP对铜离子的络合作用可抑制铜离子催化的LDL氧化,但在一定浓度范围内不会影响Cu2+的SOD活性。
(3) 络合钙离子——脑组织缺氧时,ATP减少,细胞不能维持跨膜离子梯度,细胞内钙离子升高,激活黄嘌呤氧化酶。TP通过络合细胞内钙离子,抑制黄嘌呤氧化酶的生成,起到抗氧化作用。
4. 再生体内抗氧化体系
(1)再生维生素E——在亚油酸反应体系中,VE随时间而线性衰变,但当EGCG存在时可完全被抑制。添加1%儿茶素可抑制高脂饲料引起的大鼠血液中VE含量下降。
(2)再生维生素C——负荷VC的人饮用乌龙茶后能保持全血VC浓度不变,同时减少尿中VC排出量,当停止饮茶后,尿中VC排出量很快上升。TP能保留和促进体内VC储存量是由于TP可以再生VC。
(3)再生谷胱甘肽——GSH是抗氧化剂,可直接清除自由基。雄鼠喂2%绿茶6周后,血清中GSH明显提高,说明TP有再生GSH的作用。
5. 与其他成分有协同增效作用——EGCG与十几种氨基酸、几种有机酸如柠檬酸、苹果酸、维生素C、维生素E等有显著增强抗氧化的作用。其原因可能是TP的某些组分与柠檬酸等之间的氢键缔合形成稳定的供氢体,它不仅提高了TP的抗氧化活性,而且还能与不饱和脂肪酸的氧化产物相结合。

异黄酮的抗氧化作用
异黄酮是类黄酮中的一类,主要存在于大豆中,其母体结构有染料木素(Genistein)、大豆素(Daidzein)、和6-甲氧基大豆素(Glycitein)三种。在天然大豆中,主要连上一个葡萄糖残基以异黄酮甙形式存在。当大豆发酵或酸水解处理,则脱去糖基而形成异黄酮甙元。
大量研究证实染料木素是酪氨酸蛋白激酶的专一性抑制剂,在癌细胞的信号传导和癌基因表达过程中发挥调节作用。另有实验证明大豆异黄酮可竞争性结合雌激素受体,与木酚素可归入植物雌激素类,在防治骨质疏松症中发挥作用。有人认为抗氧化也是大豆异黄酮的抗癌作用机理之一,于是开始进行有关实验,但与其他天然抗氧化物相比,尚处于起始阶段,许多问题尚待深入研究。
1. 清除超氧自由基与过氧化氢——染料木素在体外可抑制TPA激活的人多形粒白细胞(PMN)和HL-60细胞中H2O2的生成,1-150μM范围内呈量效关系,也可抑制TPA激活的HL-60细胞中超氧自由基的产生。5-20μM的染料木素即能抑制黄嘌呤/黄嘌呤氧化酶系统中超氧自由基的生成强度。在CD-1小鼠皮肤模型中,染料木素抑制TPA激活的氧化物生成、水肿和PMN的浸润。
2. 抑制脂质过氧化——在体外通过ESR检测亚油酸脂质过氧化体系或由Cu2+诱导的LDL和HDL脂质过氧化体系中L· 和LOO·的产生,发现无论在启动反应前或后加入大豆异黄酮(SI)提取物(含染料木甙93.6%和大豆甙2.86%)均能显著抑制脂质过氧化物TBARS,且呈量效关系。在亚油酸体系,SI的作用与VE相似,但强度比VE弱。在脂蛋白体系,VE只在氧化启动前加入才能显抗氧化作用,氧化启动后加入则无效,而SI则无论在氧化启动前或后加入均能显出抗氧化作用。
另在高脂动物模型中,大鼠血清及组织中LPO(脂质过氧化物)含量显著高于正常,而当在高脂饲料中添加300ppm SI时,能显著降低血清和组织中LPO含量。ESR检测表明补加SI也使肝脏和心脏中自由基水平下降。由此可见SI在体内亦可拮抗高脂饲料造成的脂质过氧化。
3. 抑制黄嘌呤氧化酶活性——黄嘌呤氧化酶存在于血管内皮细胞中,催化次黄嘌呤或黄嘌呤氧化生成尿酸和O·2。局部缺血时,可触发其催化反应,生成过量O·2而引起组织的氧化应激损伤。体外实验表明50-200μM的SI能显著抑制黄嘌呤氧化酶活性,且呈量效关系。
4. 增强抗氧化酶活性——高血脂大鼠模型同时有红细胞、肝和心中抗氧化酶SOD及GSH-px活性显著下降。在高脂饲料中添加SI,可使红细胞SOD略升高,肝中SOD显著升高,而肝及心中GSH-px都显著升高。文献报道,小鼠饲料含250ppm染料木素,喂30天后显著增加小肠、肝、肾的CAT活性,皮肤的SOD和GSH-px
活性,与皮肤和小肠的GSH还原酶活性。

类胡萝卜素的抗氧化作用
类胡萝卜素是一组600种以上存在于水果、蔬菜中的色素,呈现黄、桔黄、红色。最著名的类胡萝卜素β-胡萝卜素在肠粘膜细胞内能转变为维生素A,故可称为维生素A前体,是发展中国家维生素A摄入量的主要来源,因此属于已知营养素范畴。其他类胡萝卜素能转变为维生素A的是α-胡萝卜素和β-隐黄质,但其效价只有β-胡萝卜素的一半。还有许多类胡萝卜素不具有维生素A活性,但具有防治慢性病的生物效用,其中研究最多的是番茄红素,近年来叶黄素和玉米黄素也受到重视。此外还有角黄素、链孢红素、虾青素等。
类胡萝卜素转变为维生素A,除了能预防维生素A各种缺乏症状外,视黄酸能导致细胞分化,减少细胞增殖,是防止癌症及其他慢性病的机制。其他机制包括清除活性氧、上调细胞间隙连接通路、增强免疫功能、诱导解毒酶等。β-胡萝卜素早已列为抗氧化营养素而被广泛研究。因此,本文主要简述番茄红素和叶黄素的抗氧化作用。
一、番茄红素
番茄红素在体内不能合成,必须从食物供给,主要来自番茄及其制品,番茄酱的生物利用率高于新鲜番茄。颜色红的含量可达50mg/kg,而黄的只有5mg/kg。西瓜、番木瓜、番石榴、粉红色葡萄也含有番茄红素。番茄红素能很好吸收,增加血清含量,降低对脂类、蛋白质、DNA的氧化损伤。
番茄红素是类胡萝卜中最强的抗氧化物,因防护大分子免受氧化而防止癌症与动脉硬化。番茄红素因多烯链长、共轭双键多,故比β-胡萝卜与VE有更强的清除单线氧(1O2)的能力。体外试验表明番茄红素能清除NO·2、RS·、RSO·2基,防止AMVN所致脂质体膜的脂质过氧化。抑制LDL氧化的强度依次为:番茄红素>维生素E>α胡萝卜素>β-隐黄质>玉米黄素=β-胡萝卜素>叶黄素。番茄红素能防护淋巴细胞免于NO·2所致膜损伤和细胞死亡,两倍于β-胡萝卜素的作用。
动物试验显示,膳食番茄红素10ppm可明显降低脂类和蛋白质氧化,对AOM所致结肠癌前病变有防护作用。多中心病例对照研究(EURAMIC)评价脂肪组织抗氧化状态与急性心梗的关系,表明在那些PUFA脂肪储备最高者中,番茄红素的防护作用最强。同样,另一研究发现血中番茄红素低者,冠心病的危险性和死亡率高。
人群干预试验较少。摄入无番茄红素2周者血清番茄红素下降50%,而TBARS上升25%。摄入含番茄红素的蔬菜汁与番茄汁,实验对象中可减少DNA带断裂现象。哈佛医学院48000人的研究表明每周摄入两次番茄制品,前列腺癌的危险性可减少34%。其他两处报告蕃茄红素可延缓乳腺癌、肺癌、子宫内膜癌细胞的增殖,较β-与α-胡萝卜素更有效。服用番茄红素提取物补充剂可降低前列腺癌病人前列腺特异抗原水平。
二、叶黄素与玉米黄素
叶黄素与玉米黄素亦属类胡萝卜素、存在于许多水果和蔬菜中,以绿叶菜中含量为高,如菠菜、西兰花等。它们不能转变为维生素A,在体内不能合成,在眼组织中浓度很高,特别在晶体和视网膜的黄斑部。
由于强光暴露能在晶体和网膜产生自由基,网膜的氧化代谢高,所以对眼的氧化应激易引起老年性黄斑变性与白内障。叶黄素与玉米黄素能吸收兰光,减少对网膜的光化学损害,又因其抗氧化性质能限制氧穿入膜的程度,减少氧化应激所引起的损伤,故可防止或减轻老年性黄斑变性和白内障的发生。
流行病学研究结果对摄入叶黄素与玉米黄素多者可减少白内障发病率或摘除的危险性比较一致,但对减少黄斑变性的危险性尚不一致,需更多的长时间观察。
在体外,玉米黄素可清除过氧亚硝基,减少主动脉内皮细胞表面的粘附分子,它在动脉硬化发病过程中起重要作用。血清或膳食中叶黄素高者,冠心病或中风的发病率低。叶黄素与玉米黄素还能抑制乳腺癌细胞增殖,目前正深入进行防癌的有关研究。现已有从金盏花瓣提出的叶黄素结晶样纯品作为膳食补充剂供应市场。、
三、角黄素
角黄素首先从一种食用菌Cantharellus检出,以后发现大量存在于藻类、甲壳类(虾、龙虾)、某些鱼类(鲑鱼、西鲱)中。在体外试验,角黄素是强的单线氧清除剂,作用大于β-胡萝卜素或玉米黄素,但小于番茄红素或虾青素。同样在亚油酸系统,它能减慢自由基氧化;或在卵磷脂脂质体过氧化中,成为断链的抗氧化物。膳食中角黄素可抑制Fe3+促进的生物膜过氧化,但其作用较小,可能是通过间接机制,改变组织中维生素E水平而发挥作用。

其他抗氧化植物化学素
植物还含有许多非类黄酮的酚类物质,有羟基苯甲酸(HBA)和羟基肉桂酸(HCA)两类及其衍生物。除游离型外,还有结合型,统称为酚酸。HCA有的与羧酸或葡萄糖形成酯类,酯化可增强其抗氧化性能。HBA主要以糖苷形式存在。酚酸还可与其他天然化合物如类黄酮、羟基脂肪酸、固醇,或与细胞壁多聚物结合。
与类黄酮比,酚酸在蔬菜、水果、谷物中的含量都很高,如苹果、土豆、白菜、番茄,各种果汁、酒类、咖啡等饮料都广泛存在,每日可摄入几克以上。类黄酮在大肠经微生物代谢亦可形成酚酸衍生物。
在体外试验中,酚酸显示其为抗氧化物,如咖啡酸、香豆酸能防止LDL氧化,并可再生维生素E,起协同作用;又如麝香草酚、姜辣素醇能有效清除过氧基而减少脂质过氧化;又如阿魏酸能抑制磷脂脂质体的过氧化,防护脱氧核糖免受·OH攻击;又如绿原酸、咖啡酸、阿魏酸都能对脂氧合酶和环氧合酶产生抑制作用。目前尚未见酚酸预防慢性病的流行病学研究报告,因含酚酸的食物也含类黄酮和其他抗氧化物,又无生物学指标如血中含量作为依据,故很难阐明它的单独的抗氧化性能。但酚酸对于食物本身的防止氧化变质,保持维生素C稳定等方面都很明显,并优于合成抗氧化剂。食物中的植酸、磷酸肌醇能与铜离子和铁离子螯合,防止这些离子经Fenton反应而生成·OH,因而也具有抗氧化作用。大豆皂甙和皂角甙存在于大豆及其制品、坚果中,也是抗氧化物。
总之,植物化学素是膳食抗氧化物的重要组成部分,其作用机制可以是直接清除自由基,或减少自由基的生成,或消除其前体如H2O2,或与金属螯合,或抑制氧化酶,或增强内源性抗氧化物与抗氧化酶。由于多数植物同时具有不同种类的植物化学素与抗氧化营养素,因此大部分研究都是体外试验。流行病学研究或人体实验大多是蔬菜、水果和某些食物对慢性病防治效果的综合观察。鉴于分离提取技术和检测技术的进步,已有可能获得各种植物化学素的纯品,供研究其构效关系和量效关系之用,并通过动物和人体的效用及机理研究和毒性实验,为制备有保健功能的膳食补充剂提供科学依据。植物化学素的开发研究将迎来保健食品新的繁荣!
posted @ 2006-09-17 11:19 克林顿 阅读(691) | 评论 (0)编辑 收藏