??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲伊人伊色伊影伊综合网,国产日韩视频在线观看,九色视频成人自拍http://www.aygfsteel.com/aczreg/先做事情Q再看心情…?/description>zh-cnWed, 18 Jun 2025 13:51:02 GMTWed, 18 Jun 2025 13:51:02 GMT60Java Annotation手册 http://www.aygfsteel.com/aczreg/archive/2010/01/19/310084.html咖啡企鹅咖啡企鹅Tue, 19 Jan 2010 07:30:00 GMThttp://www.aygfsteel.com/aczreg/archive/2010/01/19/310084.htmlhttp://www.aygfsteel.com/aczreg/comments/310084.htmlhttp://www.aygfsteel.com/aczreg/archive/2010/01/19/310084.html#Feedback0http://www.aygfsteel.com/aczreg/comments/commentRss/310084.htmlhttp://www.aygfsteel.com/aczreg/services/trackbacks/310084.htmlhttp://blog.matrix.org.cn/page/cleverpig)
原文:http://www.matrix.org.cn/resource/article/44/44055_Java+Annotation+Reflect.html
关键?java,annotation,reflect

前言Q?/span>
在上文?a >《Java Annotation入门?/a>中概要性的介绍了Annotation的定义、用,范围늛较广Q但是深度不够。所以作者在《Java Annotation入门》后Ql整理了Annotation的概念和知识点,与喜Ƣresearch的朋友们׃n?br />
阅读提示Q文中提到的E序成员或者程序元素是一个概念,指组成程序代码的单元Q如cR方法、成员变量?/span>

一、AnnotationI竟是什么?

Annotation 提供了一条与E序元素兌M信息或者Q何元数据QmetadataQ的途径。从某些斚w看,annotation像修饰W一栯使用Qƈ应用于包、类 型、构造方法、方法、成员变量、参数、本地变量的声明中。这些信息被存储在annotation?#8220;name=value”l构对中? annotationcd是一U接口,能够通过java反射API的方式提供对其信息的讉K?br />
annotation能被用来为某个程序元 素(cR方法、成员变量等Q关联Q何的信息。需要注意的是,q里存在着一个基本的潜规则:annotaion不能影响E序代码的执行,无论增加、删? annotationQ代码都始终如一的执行。另外,管一些annotation通过java的反apiҎ(gu)在运行时被访问,而java语言解释器在 工作时忽略了q些annotation。正是由于java虚拟机忽略了annotationQ导致了annotationcd在代码中?#8220;不v作用”的; 只有通过某种配套的工h会对annotationcd中的信息q行讉K和处理。本文中涵盖标准的annotation和meta- annotationcdQ陪伴这些annotationcd的工hjava~译器(当然要以某种Ҏ(gu)的方式处理它们)?br />
׃上述? 因,annotation在用时十分ѝ一个本地变量可以被一个以NonNull命名的annotationcd所标注Q来作ؓ对这个本地变量不能被 赋予null值的断言。而我们可以编写与之配套的一个annotation代码分析工具Q用它来对h前面变量的代码进行解析,q且试验证q个断言? 当然q些代码q不必自q写。在JDK安装后,在JDK/bin目录中可以找到名?#8220;apt”的工P它提供了处理annotation的框Ӟ它启动后 扫描源代码中的annotationQƈ调用我们定义好的annotation处理器完成我们所要完成的工作Q比如验证前面例子中的断aQ。说到这里, annotation的强大功能似乎可以替代XDocletq类的工具了Q随着我们的深入,大家会更加坚信这一炏V?br /> 注:详细描述请参看jsr250规范Q?br /> http://www.jcp.org/aboutJava/communityprocess/pfd/jsr250/

二、Annotation的定义:

q? D|字开始介lannotation相关技术。在此大家将看到java5.0的标准annotationcdQ这U标准类型就是前文中所说的“内徏”c? 型,它们可以直接被javac支持。可喜的是,在java6.0beta版中的javac已经加入了对自定义annotation的支持?br />
1。Annotation的概念和语法Q?/span>

首先Q关键的概念是理解annotation是与一个程序元素相兌信息或者元数据的标注。它从不影响javaE序的执行,但是对例如编译器警告或者像文档生成器等辅助工具产生影响?br /> 下面是常用的annotation列表Q我们应该注意在annotation和annotationcd之间的不同:

A.annotationQ?/span>
annotation 使用了在java5.0所带来的新语法Q它的行为十分类似public、finalq样的修饰符。每个annotationh一个名字和成员个数 >=0。每个annotation的成员具有被UCؓname=value对的名字和|像javabean一PQname=value装蝲? annotation的信息?br />
B.annotationcdQ?/span>
annotation cd定义了annotation的名字、类型、成员默认倹{一个annotationcd可以说是一个特D的java接口Q它的成员变量是受限制的Q而声 明annotationcd旉要用新语法。当我们通过java反射api讉Ka(chn)nnotationӞq回值将是一个实C该annotationc? 型接口的对象Q通过讉Kq个对象我们能方便的讉K到其annotation成员。后面的章节提到在java5.0的java.lang包里包含?个标 准annotationcd?br />
C.annotation成员Q?/span>
annotation 的成员在annotationcd中以无参数的Ҏ(gu)的Ş式被声明。其Ҏ(gu)名和q回值定义了该成员的名字和类型。在此有一个特定的默认语法Q允许声明Q? annotation成员的默认|一个annotation可以name=value对作为没有定义默认值的annotation成员的|当然也可 以用name=valueҎ(gu)覆盖其它成员默认倹{这一Ҏ(gu)些近似类的承特性,父类的构造函数可以作为子cȝ默认构造函敎ͼ但是也可以被子类覆盖?br />
D.marker annotationcdQ?/span>
一个没有成员定义的annotationcd被称为marker annotation。这Uannotationcd仅用自w的存在与否来ؓ我们提供信息。如后面要说的Override?br />
E.meta-annotationQ?/span>
meta -annotation也称为元annotationQ它是被用来声明annotationcd的annotation。Java5.0提供了一些标准的 ?annotationcd。下面介l的target、retention是meta-annotation?br />
F.targetQ?/span>
annotation 的target是一个被标注的程序元素。target说明了annotation所修饰的对象范_annotation可被用于packages? typesQ类、接口、枚举、annotationcdQ、类型成员(Ҏ(gu)、构造方法、成员变量、枚丑ր|、方法参数和本地变量Q如循环变量、catch 参数Q。在annotationcd的声明中使用了target可更加明晰其修饰的目标?br />
G.retentionQ?/span>
annotation 的retention定义了该annotation被保留的旉长短Q某些annotation仅出现在源代码中Q而被~译器丢弃;而另一些却被编译在 class文g中;~译在class文g中的annotation可能会被虚拟机忽略,而另一些在class被装载时被dQ请注意q不影响class 的执行,因ؓannotation与class在用上是被分离的)。用这个meta-annotation可以对annotation?#8220;生命周期” 限制?br />
H.metadataQ?/span>
׃metadata被广泛用于各种计算机开发过E中Q所以当我们在这里谈论的metadata卛_数据通常指被annotation装蝲的信息或者annotation本n?br />
2。用标准AnnotationQ?/span>
java5.0在java.lang包中定义?U标准的annotationcdQ?br />
A.OverrideQ?/span>
java.lang.Override 是一个marker annotationcdQ它被用作标注方法。它说明了被标注的方法重载了父类的方法,起到了断a的作用。如果我们用了q种annotation在一? 没有覆盖父类Ҏ(gu)的方法时Qjava~译器将以一个编译错误来警示?br /> q个annotaton常常在我们试图覆盖父cL法而确又写错了Ҏ(gu)名时发挥威力?br />
使用Ҏ(gu)极其单:在用此annotation时只要在被修饰的Ҏ(gu)前面加上@Override?br /> 下面的代码是一个用@Override修饰一个企N载父cȝtoStringҎ(gu)Q而又存在拼写错误的sampleQ?br /> 清单1Q?/strong>
@Override



public String toSting() {   // 注意Ҏ(gu)名拼写错?br />


    return "[" + super.toString() + "]";



}





B.DeprecatedQ?/span>
同样 Deprecated也是一个marker annotation。当一个类型或者类型成员用@Deprecated修饰的话Q编译器不鼓励使用q个被标注的E序元素。而且q种修饰h一定的 “延箋?#8221;Q如果我们在代码中通过l承或者覆盖的方式使用了这个过时的cd或者成员,虽然l承或者覆盖后的类型或者成员ƈ不是被声明ؓ @DeprecatedQ但~译器仍然要报警?br /> 值得注意Q@Deprecatedq个annotationcd和javadoc中的 @deprecatedq个tag是有区别的:前者是java~译器识别的Q而后者是被javadoc工具所识别用来生成文档Q包含程序成员ؓ什么已l过 时、它应当如何被禁止或者替代的描述Q?br /> 在java5.0Qjava~译器仍然象其从前版本那样寻找@deprecatedq个javadoc tagQƈ使用它们产生警告信息。但是这U状况将在后l版本中改变Q我们应在现在就开始用@Deprecated来修饰过时的Ҏ(gu)而不? @deprecated javadoc tag?br /> 清单2Q?/strong>
下面是一D用@Deprecated的代码:



/**



* q里是javadoc的@deprecated声明.



* @deprecated No one has players for this format any more.  Use VHS instead.



*/



@Deprecated public class Betamax { ... }





C.SuppressWarningsQ?/span>
@SuppressWarnings 被用于有选择的关闭编译器对类、方法、成员变量、变量初始化的警告。在java5.0Qsun提供的javac~译器ؓ我们提供?Xlint选项来ɾ~? 译器对合法的E序代码提出警告Q此U警告从某种E度上代表了E序错误。例如当我们使用一个generic collectionc而又没有提供它的cdӞ~译器将提示?unchecked warning"的警告?br />
通常当这U情况发生时Q我们就需要查扑ּ赯告的代码。如果它真的表示错误Q我们就需要纠正它。例如如果警告信息表明我们代码中的switch语句没有覆盖所有可能的caseQ那么我们就应增加一个默认的case来避免这U警告?br /> ? 仿,有时我们无法避免q种警告Q例如,我们使用必须和非generic的旧代码交互的generic collectioncLQ我们不能避免这个unchecked warning。此时@SuppressWarningpz上用场了,在调用的Ҏ(gu)前增加@SuppressWarnings修饰Q告诉编译器停止Ҏ(gu) Ҏ(gu)的警告?br /> SuppressWarning不是一个marker annotation。它有一个类型ؓString[]的成员,q个成员的gؓ被禁止的警告名。对于javac~译器来Ԍ?Xlint选项有效的警? 名也同样对@SuppressWarings有效Q同时编译器忽略掉无法识别的警告名?br />
annotation语法允许在annotation名后跟括P括号中是使用逗号分割的name=value对用于ؓannotation的成员赋|
清单3Q?/strong>
@SuppressWarnings(value={"unchecked","fallthrough"})



public void lintTrap() { /* sloppy method body omitted */ }





在这个例子中SuppressWarnings annotationcd只定义了一个单一的成员,所以只有一个简单的value={...}作ؓname=value寏V又׃成员值是一个数l,故用大括号来声明数l倹{?br />
注意Q我们可以在下面的情况中~写annotationQ当annotation只有单一成员Qƈ成员命名?value="。这时可以省?value="。比如将上面的SuppressWarnings annotationq行~写Q?br /> 清单4Q?/strong>
@SuppressWarnings({"unchecked","fallthrough"})




如果SuppressWarnings所声明的被止警告个数Z个时Q可以省d括号Q?br />
@SuppressWarnings("unchecked")





3。Annotation语法Q?/span>

在上一个章节中Q我们看C写marker annotation和单一成员annotation的语法。下面本人来介绍一下完整的语法Q?br />
annotation ?#8220;@+annotationcd名称+(..逗号分割的name-value?..)”l成。其中成员可以按照Q何的序。如果annotation cd定义了某个成员的默认|则这个成员可以被省略。成员值必Mؓ~译时常量、内嵌的annotation或者数l?br />
下面我们定义一? annotationcd名ؓReviewsQ它有一个由@Review annotation数组构成的成员。这个@Review annotationcd有三个成员:"reviewer"是一个字W串Q?comment" 是一个具有默认值的可选的字符Ԍ"grade"是一个Review.Grade枚Dcd倹{?br /> 清单5Q?/strong>
@Reviews({  // Single-value annotation, so "value=" is omitted here



    @Review(grade=Review.Grade.EXCELLENT,



            reviewer="df"),



    @Review(grade=Review.Grade.UNSATISFACTORY,



            reviewer="eg",



            comment="This method needs an @Override annotation")



})




annotation语法的另一个重要规则是没有E序成员可以有多于一个的同一annotation实例。例如在一个类中简单的攄多个@Review annotation。这也是在上面代码中定义@Reviews annotationcd数组的原因?br />
4。Annotation成员cd和|

annotation成员必须是非I的~译时常量表辑ּ。可用的成员cd为:primitivecd? String, Class, enumeratedcd, annotationcd, 和前面类型的数组?br />
下面我们定义了一个名为UncheckedExceptions 的annotationcdQ它的成员是一个扩展了RuntimeExceptioncȝcLl?br /> 清单6Q?/strong>
@UncheckedExceptions({



    IllegalArgumentException.class, StringIndexOutOfBoundsException.class



})





5。Annotation的目标:

annotation通常被放在类型定义和成员定义的前面。然而它也出现在package、方法参数、本地变量的前面。下面,我们来讨Z下这些不大常用的写法Q?br />
package annotation出现在package声明的前面?br /> 下面的例子package-info.java中不包含M的公q型定义,却包含一个可选的javadoc注释?br /> 清单7Q?/strong>
/**



* This package holds my custom annotation types.



*/



@com.davidflanagan.annotations.Author("David Flanagan")



package com.davidflanagan.annotations;




当package -info.java文g被编译时Q它?yu)生名为包含annotationQ特D的接口Q声明的package-info.class的类。这个接口没? 成员Q它的名字package-info不是一个合法的java标识Q所以它不能用在java源代码中。这个接口的存在只是单的被看作一个ؓ package annotation准备的占位符?br />
用于修饰Ҏ(gu)参数、catch参数、本地变量的annotation只是单的出现 在这些程序成员的修饰W位|。javacL件格式没有ؓ本地变量或者catch参数存储annotation作准备,所以这些annotationL? 留在源代码别(source retentionQ;Ҏ(gu)参数annotation能够保存在类文g中,也可以在保留到运行时?br />
最后,h意,枚Dcd定义中不允许M的修饰符修饰其枚丑ր{?br />
6。Annotation和默认|
在Annotation 中,没有默认值的成员必须有一个成员倹{而如何理解默认值是如何被处理就是一个很重要的细节:annotationcd所定义的成员默认D存储? class文g中,不被~译到annotation里面。如果我们修改一个annotationcd使其成员的默认值发生了改变Q这个改变对于所有此cd 的annotation中没有明提供成员值的成员产生影响Q即修改了该成员的成员|。即使在annotationcd使其成员的默认D改变? annotation从没被重新编译过Q该cd的annotation(改变前已l被~译?也受到媄响?br />
三、Annotation工作原理Q?/span>

Annotation与反?/span>
在java5.0 中Java.lang.reflect提供的反API被扩充了dq行时annotation的能力。让我们回顾一下前面所讲的Q一? annotationcd被定义ؓruntime retention后,它才是在q行时可见,当class文g被装载时被保存在class文g中的annotation才会被虚拟机d。那? reflect是如何帮助我们访问class中的annotation呢?

下文在java.lang.reflect用于 annotation的新Ҏ(gu),其中java.lang.reflect.AnnotatedElement是重要的接口Q它代表了提供查? annotation能力的程序成员。这个接口被java.lang.Package、java.lang.Class实现Qƈ间接地被MethodcR? ConstructorcRjava.lang.reflect的Fieldcd现。而annotation中的Ҏ(gu)参数可以通过MethodcR? ConstructorcȝgetParameterAnnotations()Ҏ(gu)获得?br />
下面的代码用了AnnotatedElementcȝisAnnotationPresent()Ҏ(gu)判断某个Ҏ(gu)是否h@Unstable annotationQ从而断a此方法是否稳定:
清单8Q?/strong>
import java.lang.reflect.*;







Class c = WhizzBangClass.class;                          



Method m = c.getMethod("whizzy", int.class, int.class);  



boolean unstable = m.isAnnotationPresent(Unstable.class);




isAnnotationPresent ()Ҏ(gu)对于查marker annotation是十分有用的Q因为marker annotation没有成员变量Q所以我们只要知道class的方法是否用了annotation修饰可以了。而当处理h成员? annotationӞ我们通过使用getAnnotation()Ҏ(gu)来获得annotation的成员信息(成员名称、成员|。这里我们看C一 套优的java annotationpȝQ如果annotation存在Q那么实C相应的annotationcd接口的对象将被getAnnotation()Ҏ(gu) q回Q接着调用定义在annotationcd中的成员Ҏ(gu)可以方便地获得Q何成员倹{?br />
回想一下,前面介绍的@Reviews annotationQ如果这个annotationcd被声明ؓruntime retention的话Q我们通过下面的代码来讉K@Reviews annotation的成员|
清单9Q?/strong>
AnnotatedElement target = WhizzBangClass.class; //获得被查询的AnnotatedElement



// 查询AnnotatedElement的@Reviews annotation信息



Reviews annotation = target.getAnnotation(Reviews.class);



// 因ؓ@Reviews annotationcd的成员ؓ@Review annotationcd的数l,



// 所以下面声明了Review[] reviews保存@Reviews annotationcd的value成员倹{?br />


Review[] reviews = annotation.value();



// 查询每个@Review annotation的成员信?br />


for(Review r : reviews) {



    Review.Grade grade = r.grade();



    String reviewer = r.reviewer();



    String comment = r.comment();



    System.out.printf("%s assigned a grade of %s and comment '%s'%n",



                      reviewer, grade, comment);



}





四、如何自定义AnnotationQ?/span>

1Q详解annotation与接口的异同Q?/span>
因ؓannotationcd是一个非凡的接口Q所以两者之间存在着某些差异Q?br />
A.Annotationcd使用关键字@interface而不是interface?/span>
q个关键字声明隐含了一个信息:它是l承了java.lang.annotation.Annotation接口Qƈ非声明了一个interface?br />
B.Annotationcd、方法定义是独特的、受限制的?/span>
Annotation cd的方法必d明ؓ无参数、无异常抛出的。这些方法定义了annotation的成员:Ҏ(gu)名成Z成员名,而方法返回值成Z成员的类型。而方法返? 值类型必Mؓprimitivecd、Classcd、枚丄型、annotationcd或者由前面cd之一作ؓ元素的一l数l。方法的后面可以使用 default和一个默认数值来声明成员的默认|null不能作ؓ成员默认|q与我们在非annotationcd中定义方法有很大不同?br /> Annotationcd和它的方法不能用annotationcd的参数、成员不能是generic。只有返回值类型是Class的方法可以在annotationcd中用genericQ因为此Ҏ(gu)能够用类转换各U类型{换ؓClass?br />
C.Annotationcd又与接口有着q似之处?/span>
它们可以定义帔R、静态成员类型(比如枚Dcd定义Q。Annotationcd也可以如接口一般被实现或者ѝ?br />
2Q实例:
下面Q我们将看到如何定义annotationcd的example。它展示了annotationcd声明以及@interface与interface之间的不同:
清单10Q?/strong>
package com.davidflanagan.annotations;



import java.lang.annotation.*;







/**



* 使用annotation来描q那些被标注的成员是不稳定的Q需要更?br />


*/



@Retention(RetentionPolicy.RUNTIME)



public @interface Unstable {}





下面的另一个example只定义了一个成员。ƈ通过这个成员命名ؓvalueQ我们可以方便的用这Uannotation的快捷声明方式:
清单11Q?/strong>
/**



* 使用Authorq个annotation定义在程序中指出代码的作?br />


*/



public @interface Author {



    /** q回作者名 */



    String value();



}





以下的example更加复杂。Reviews annotationcd只有一个成员,但是q个成员的类型是复杂的:由Review annotationl成的数l。Review annotationcd?个成员:枚Dcd成员grade、表CReview名称的字W串cd成员Reviewer、具有默认值的字符串类型成? Comment?br /> 清单12Q?/strong>
import java.lang.annotation.*;



        



/**



* Reviews annotationcd只有一个成员,



* 但是q个成员的类型是复杂的:由Review annotationl成的数l?br />


*/



@Retention(RetentionPolicy.RUNTIME)



public @interface Reviews {



    Review[] value();



}







/**



* Review annotationcd?个成员:



* 枚Dcd成员grade?br />


  * 表示Review名称的字W串cd成员Reviewer?br />


  * h默认值的字符串类型成员Comment?br />


*/



public @interface Review {



    // 内嵌的枚丄?br />


    public static enum Grade { EXCELLENT, SATISFACTORY, UNSATISFACTORY };







    // 下面的方法定义了annotation的成?br />


    Grade grade();                



    String reviewer();          



    String comment() default "";  



}





最后,我们来定义一个annotationҎ(gu)用于|列出类q行中所有的unchecked异常Q上文已l提到这U情况不一定是错误Q? q个 annotationcd一个数l作Z唯一的成员。数l中的每个元素都是异常类。ؓ了加强对未检查的异常Q此cd帔R是在q行时抛出)q行报告Q我? 可以在代码中对异常的cdq行限制Q?br /> 清单13Q?/strong>
public @interface UncheckedExceptions {



    Class<? extends RuntimeException>[] value();



}





五、Meta-Annotation

Annotation cd可以被它们自己所标注。Java5.0定义?个标准的meta-annotationcdQ它们被用来提供对其它annotationcd作说明? q些cd和它们所支持的类在java.lang.annotation包中可以扑ֈ。如果需要更详细的信息可以参考jdk5.0手册?br />
1Q再谈Target
? 为meta-annotationcd的Target,它描qCannotation所修饰的程序成员的cd。当一个annotationcd没有 TargetӞ它将被作为普通的annotation看待。当它修饰一个特定的E序成员Ӟ它将发挥其应用的作用Q例如:Override用于修饰? 法时Q增加了@Targetq个meta-annotation׃ɾ~译器对annotation作检查,从而去掉修饰错误类型的Override?br />
Target meta-annotationcd有唯一的value作ؓ成员。这个成员的cd是java.lang.annotation.ElementType[]cd的,ElementTypecd是可以被标注的程序成员的枚Dcd?br />
2QRetention的用?/span>
? 们在文章的开头曾l提到过RetentionQ但是没有详l讲解。Retention描述了annotation是否被编译器丢弃或者保留在class? Ӟ如果保留在class文g中,是否在class文g被装载时被虚拟机d。默认情况下Qannotation被保存在class文g中,但在q行时ƈ 不能被反访问。Retentionh三个取|source、class、runtimeQ这些取值来? java.lang.annotation.RetentionPolicy的枚丄型倹{?br />
Retention meta-annotationcd有唯一的value作ؓ成员Q它的取值来自java.lang.annotation.RetentionPolicy的枚丄型倹{?br />
3QDocumented
Documented是一个meta-annotationcdQ用于描q其它类型的annotation应该被作标注的程序成员的公共APIQ因此可以被例如javadoc此类的工h档化?br />
Documented是一个marker annotationQ没有成员?br />
4QInherited
@Inherited meta-annotation也是一个marker annotationQ它阐述了某个被标注的类型是被承的。如果一个用了@Inherited修饰的annotationcd被用于一个classQ? 则这个annotation被用于该class的子cR?br />
注意Q@Inherited annotationcd是被标注q的class的子cLl承。类q不从它所实现的接口承annotationQ方法ƈ不从它所重蝲的方法承annotation?br />
? 得思考的是,当@Inherited annotationcd标注的annotation的Retention是RetentionPolicy.RUNTIMEQ则反射API增强了这U 承性。如果我们用java.lang.reflectL询一个@Inherited annotationcd的annotationӞ反射代码查将展开工作Q检查class和其父类Q直到发现指定的annotationcd被发玎ͼ 或者到辄l承l构的顶层?br />
六、ȝQ?/span>

             本文几乎覆盖了所有的Annotation的概念和知识点,从annotation的定义、语法到工作原理、如何自定义 annotationQ直? meta- annotation。其中也h一些配套的代码片断可参考,虽然不是很多Q但是可谓言意赅、着光点,本h认ؓ用好annotation的关键还在于 使用。希望本手册能够帮助大家用好annotationQ这也是本h的最大快乐?

咖啡企鹅 2010-01-19 15:30 发表评论
]]>
挣值分析法http://www.aygfsteel.com/aczreg/archive/2010/01/14/309423.html咖啡企鹅咖啡企鹅Thu, 14 Jan 2010 03:52:00 GMThttp://www.aygfsteel.com/aczreg/archive/2010/01/14/309423.htmlhttp://www.aygfsteel.com/aczreg/comments/309423.htmlhttp://www.aygfsteel.com/aczreg/archive/2010/01/14/309423.html#Feedback0http://www.aygfsteel.com/aczreg/comments/commentRss/309423.htmlhttp://www.aygfsteel.com/aczreg/services/trackbacks/309423.html

挣得值分析法QEarned Value AnalysisQ?/strong>

什么是挣得值方法?

  挣值法又称?strong>赢得值法?strong>偏差分析?/strong>.挣得值分析法是在工程目实施中用较多的一U方法,是对目q度和费用进行综合控制的一U有效方法?

  1967q美国国防部Qd0dQ开发了挣值法q成功地其应用于国防工E中。ƈ逐步获得q泛应用?

  挣值法的核心是项目在M旉的计划指标,完成状况和资源耗费l合度量。将q度转化币,或h工时Q工E量如:钢材吨数Q水泥立方米Q管道米数或文g|?

  挣值法的h(hun)值在于将目的进度和费用l合度量Q从而能准确描述目的进展状态。挣值法的另一个重要优Ҏ(gu)可以预测目可能发生的工期滞后量和费用超支量Q从而及旉取纠正措施,为项目管理和控制提供了有效手Dc?

[~辑]

挣得值方法的基本参数?/h2>

  计划工作量的预算费用(BCWS)Q即(Budgeted Cost for Work Scheduled)?

  BCWS是指目实施q程中某阶段计划要求完成的工作量所需的预费用。计公式ؓQBCWS=计划工作?#215;预算定额。BCWS主要是反映进度计划应当完成的工作?用费用表C?。?

  • 已完成工作量的实际费?ACWP)Q即(Actual Cost for Work Performed)。ACWP是指目实施q程中某阶段实际完成的工作量所消耗的费用。ACWP主要是反映项目执行的实际消耗指标?

  BCWS是与旉相联pȝQ当考虑资金累计曲线Ӟ是在 目预算s曲线上的某一点的倹{当考虑某一作业或某一旉D|Q例如某一月䆾Qbcws是该作业或该月䆾包含作业的预费用?

  已完成工作量的实际费?/strong>QACWP——Actual Cost for Work PerformedQ,有的资料也称ACQ实际|?

  ACWP是指目实施q程中某阶段实际完成的工作量所消耗的工时Q或费用Q。ACWP主要反映目执行的实际消耗指标?

  已完工作量的预算成本(BCWP)Q即(Budgeted Cost for Work Performed)。或U挣倹{盈值和挣得倹{?

  BCWP是指目实施q程中某阶段按实际完成工作量及按预算定额计算出来的费用,x得?Earned Value)。BCWP的计公式ؓQQDQ?已完工作?#215;预算定额?

  bcwp的实质内Ҏ(gu)已完成的工作量用预费用来度量。?

挣得值方法的四个评h(hun)指标

  费用偏差(Cost Variance-CV)QCV是指查期间BCWP与ACWP之间的差异,计算公式为CV=BCWP-ACWP。当CV值时表示执行效果不佳Q即? 际消费费用超q预值即支。反之当CV为正值时表示实际消耗费用低于预|表示有节余或效率高。若CV=0,表示目按计划执行?

  q度偏差(Schedule Variance-SV)QSV是指查日期BCWP与BCWS之间的差异。其计算公式为SV=BCWP-BCWS。当SV为正值时表示q度提前QSVDC度g误。若SV=0Q表明进度按计划执行?

  费用执行指标(Cost Performed Index-CPI)QCPI是指挣得g实际费用g比。CPI=BCWPQACWPQ当 CPIQ?表示低于预算QCPIQ?表示出预算QCPIQ?表示实际费用与预费用吻合。若CPI=1,表明目费用按计划进行?

  q度执行指标(Schedule Performed Index-SPI)QSPI是指目挣得g计划g比,即SPI=BCWPQBCWSQ当 SPIQ?表示q度提前QSPIQ?表示q度延误QSPIQ?表示实际q度{于计划q度?

挣值法评h(hun)曲线

挣值法评h(hun)曲线如下图所C,下图的横坐标表示旉Q纵坐标则表C用。BCWS曲线划工作量的预费用曲U,表示目投入的费用随旉的推Ud不断 U篏Q直至项目结束达到它的最大|所以曲U呈S形状Q也UCؓS曲线。ACWP已完成工作量的实际费用,同样是进度的旉参数Q随目推进而不断增加的Q? 也是呈S形的曲线。利用挣值法评h(hun)曲线可进行费用进度评P图中所C的目QCV<0QSV<0Q这表示目执行效果不佳Q即费用支Q进? 延误Q应采取相应的补救措施?

挣值度量方?a target="_self">

管挣值法的计关pȝ对简单,准确度量作业的挣值却是不Ҏ(gu)的,q成为成功应用挣值法的关键。这是由于一斚w目的作业内Ҏ(gu)多种多样的,挣值的度量 应根据作业的内容_ֿ设计。另一斚wQ与目相关的h员已习惯于通常的费用和日程度量概念和方法,改变Z的固有概念需要耐心的培训和讲解。下面是几种? 量挣值的Ҏ(gu)Q?

  1.U性增长计量:费用按比例^均分配给整个工期Q完成量癑ֈ比记入挣倹{?

  2.50-50规则Q作业开始计?0%费用Q作业结束计入剩余的50%。当作业h多个子作业时采用.

  3.工程量计量:例如全部桩基300根,150万元。每完成一根,挣??万元?

  4.节点计量Q将工程分ؓ多个q度节点q赋以挣|每完成一个节点计入该节点挣|讑֤定制可用此方法?

挣值分析应?a target="_self">

  例:某土方工E挣值分?/strong>

  某土方工EL斚w?000立方c뀂预单价ؓ45?立方c뀂该挖方工程预算总费用ؓ180000元。计划用10天完成,每天400立方c?

  开工后W?天早晨刚上班时业主项目管理h员前L量,取得了两个数据:已完成挖?000立方cI支付l承包单位的工程q度Ƅ计已?20000元?

  目理人员先计已完工作预费用,?

  BCWP =45?立方c?×2000立方c?90000?

  接着Q查看项目计划,计划表明Q开工后W?天结束时Q承包单位应得到的工E进度款累计额ؓBCWS=108000元?

  q一步计得Q?

  费用偏差QBCWP- ACWP=90000-120000=-30000元,表明承包单位已经支?

  q度偏差QBCWP- BCWS=90000-108000=-18000元,表明承包单位q度已经拖g。表C项目进度落后,较预还有相当于价?8000元的工作量没有做?8000?Q?00×45Q?1天的工作量,所以承包单位的q度已经落后1天?

  另外Q还可以使用费用实施指数CPI和进度实施指数SPI量工作是否按照计划q行?

  CPI= BCWP/ACWP = 90000/120000=0.75.

  SPI= BCWP/BCWS = 90000/108000=0.83.

  CPI和SPI都小?Q给该项目亮了黄牌?




咖啡企鹅 2010-01-14 11:52 发表评论
]]>
servlet 数据传?/title><link>http://www.aygfsteel.com/aczreg/archive/2009/12/15/306069.html</link><dc:creator>咖啡企鹅</dc:creator><author>咖啡企鹅</author><pubDate>Tue, 15 Dec 2009 13:58:00 GMT</pubDate><guid>http://www.aygfsteel.com/aczreg/archive/2009/12/15/306069.html</guid><wfw:comment>http://www.aygfsteel.com/aczreg/comments/306069.html</wfw:comment><comments>http://www.aygfsteel.com/aczreg/archive/2009/12/15/306069.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/aczreg/comments/commentRss/306069.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/aczreg/services/trackbacks/306069.html</trackback:ping><description><![CDATA[<span style="color: rgb(0,128,0)"><span style="color: #000000">Cookie:同一用户点对?br /> Session:同一用户一条线<br /> ServletContext:不同用户联成?/span><br /> <br /> <br /> //req: 用于获得客户?览?的信?/span><br style="color: rgb(0,128,0)" /> <span style="color: rgb(0,128,0)">//res: 用于向客L(览?q回信息</span><br /> 1、session的设|:<br />             <span style="color: rgb(0,128,0)">//得到和req相关联的session,如果没有创建session</span><br />             HttpSession hs=req.getSession(true);<br />             <span style="color: rgb(0,128,0)">//向session中添加一个属?String cd?</span><br />             hs.setAttribute("name","hanzhewei");<br />             <span style="color: rgb(0,128,0)">//如果不指定时_那么该session的有效期?0min,在此讑֮?0U?/span><br />             hs.setMaxInactiveInterval(30);<br />    session的获取:<br />             <span style="color: rgb(0,128,0)">//得到和req相关联的session,如果没有创建session</span><br />             HttpSession hs=req.getSession(true);<br />             String name=hs.getAttribute("name");<br />    session的删除:<br />             <span style="color: rgb(0,128,0)">//从session中删除you属?/span><br style="color: rgb(0,128,0)" /> <span style="color: rgb(0,128,0)">            //ht.removeAttribute("you");</span><br />             ht.setMaxInactiveInterval(0);<br /> 2、cookies的设|?<br />             <span style="color: rgb(0,128,0)">//现在服务器端创徏一个cookie</span><br />             Cookie myCookie=new Cookie("color1","red");<br />             <span style="color: rgb(0,128,0)">// 该cookie存在的时?/span><br />             myCookie.setMaxAge(30);<br />            <span style="color: rgb(0,128,0)"> //如果你不讄存在旉,那么该cookie不会保?/span><br style="color: rgb(0,128,0)" /> <span style="color: rgb(0,128,0)">            //该cookie写回到客L</span><br />             res.addCookie(myCookie);<br />    cookies的获取:<br />              <span style="color: rgb(0,128,0)">//从客L得到所有cookie信息</span><br />             Cookie [] allCookies=req.getCookies();<br />             int i=0;<br />             <span style="color: rgb(0,128,0)">//如果allCookies不ؓI?..</span><br />             if(allCookies!=null){<br />                 <span style="color: rgb(0,128,0)">//从中取出cookie</span><br />                 for(i=0;i<allCookies.length;i++){<br />                     <span style="color: rgb(0,128,0)">//依次取出</span><br />                     Cookie temp=allCookies[i];<br />                 }<br />              }<br />    cookies的删除:<br />              <span style="color: rgb(0,128,0)">//该cookie删除</span><br />              temp.setMaxAge(0);<br /> 3、servletcontext的设|:<br />              <span style="color: rgb(0,128,0)">//得到servletcontext</span><br />              ServletContext sc=this.getServletContext();<br />              <span style="color: rgb(0,128,0)">//d属?</span><br />              sc.setAttribute("myInfo","我是^");<br />    servletcontext的获取:<br />              <span style="color: rgb(0,128,0)">//得到servlet context</span><br />              ServletContext sc=this.getServletContext();<br />              <span style="color: rgb(0,128,0)">//得到属性和它对应的?/span><br />              String info=(String)sc.getAttribute("myInfo");<br /> <img src ="http://www.aygfsteel.com/aczreg/aggbug/306069.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/aczreg/" target="_blank">咖啡企鹅</a> 2009-12-15 21:58 <a href="http://www.aygfsteel.com/aczreg/archive/2009/12/15/306069.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle技?/title><link>http://www.aygfsteel.com/aczreg/archive/2009/12/12/304026.html</link><dc:creator>咖啡企鹅</dc:creator><author>咖啡企鹅</author><pubDate>Sat, 12 Dec 2009 07:50:00 GMT</pubDate><guid>http://www.aygfsteel.com/aczreg/archive/2009/12/12/304026.html</guid><wfw:comment>http://www.aygfsteel.com/aczreg/comments/304026.html</wfw:comment><comments>http://www.aygfsteel.com/aczreg/archive/2009/12/12/304026.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/aczreg/comments/commentRss/304026.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/aczreg/services/trackbacks/304026.html</trackback:ping><description><![CDATA[<p><strong>更改Oracle http端口(8080改ؓ8081Q?br /> </strong>SQL> call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(),<br />   2  '/xdbconfig/sysconfig/protocolconfig/httpconfig/http-port/text()',8081))<br />   3  /<br /> SQL> commit;<br /> Commit complete.<br /> SQL>  exec dbms_xdb.cfg_refresh;<br /> <br /> SQL>  call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(),<br />   2  '/xdbconfig/sysconfig/protocolconfig/ftpconfig/ftp-port/text()',2111))<br />   3  /<br /> Call completed.<br /> SQL> commit;<br /> Commit complete.<br /> SQL>  exec dbms_xdb.cfg_refresh;<br /> <br /> <br /> <span style="font-family: Lucida Console"><strong><br /> 表自复制</strong><br style="font-family: " /> INSERT INTO 表名 Q列,...Q?SELECT * FROM 表名Q?br /> 如:<br /> INSERT INTO students (sid,sname,sage,...) SELECT * FROM studentsQ?br /> </p> </span> <p><span style="font-family: Lucida Console"><br /> <strong>SET命o(常用):</strong> SET pȝ变量 ?br /> <table border="0" cellspacing="2" cellpadding="2"> <tbody> <tr> <td style="width: 178px; height: 34px">ARRAY[SIZE] </td> <td style="font-size: 12pt">{20d|n}</td> <td>SQL*PLUS一ơ从数据库获取的行数,有效gؓ1?000. </td> </tr> <tr> <td style="height: 22px">LIN[ESIZE]</td> <td>{80d|n}</td> <td>SQL*PLUS一行显C的字符L,它还控制对准中心的文本和叛_齐文?</td> </tr> <tr> <td>PAGES[IZE]</td> <td style="width: 135px; height: 26px">{14d|n}</td> <td>从顶部标题至늻束之间的行数.</td> </tr> <tr> <td>SQLN[UMBER]</td> <td>{OFF|ONd}   </td> <td>为SQL命o和PL/SQL块的W二行和后行设|提C?</td> </tr> <tr> <td>TIMI[NG]</td> <td>{OFFd|ON} </td> <td>昄每一个运行的SQL命o或PL/SQL块的旉l计.</td> </tr> </tbody> </table> </span><br /> </p> <span style="font-family: Lucida Console"> <p><strong>ORACLE保留关键?/strong><br /> ACCESS ADD ALL ALTER AND ANY AS ASC AUDIT BETWEEN BY CHAR CHECK CLUSTER COLUMN COMMENT<br /> COMPRESS CONNECT CREATE CURRENT DATE DECIMAL DEFAULT DELETE DESC DISTINCT DROP ELSE EXCLUSIVE<br /> EXISTS FILE FLOAT FOR FROM GRANT GROUP HAVING IDENTIFIED IMMEDIATE IN INCREMENT INDEX INITIAL<br /> INSERT INTEGER INTERSECT INTO IS LEVEL LIKE LOCK LONG MAXEXTENTS MINUS MLSLABEL MODE MODIFY<br /> NOAUDIT NOCOMPRESS NOT NOWAIT NULL NUMBER OF OFFLINE ON ONLINE OPTION OR ORDER PCTFREE PRIOR<br /> PRIVILEGES PUBLIC RAW RENAME RESOURCE REVOKE ROW ROWID ROWNUM ROWS SELECT SESSION SET<br /> SHARE SIZE SMALLINT START SUCCESSFUL SYNONYM SYSDATE TABLE THEN TO TRIGGER UID UNION UNIQUE<br /> UPDATE USER VALIDATE VALUES VARCHAR VARCHAR2 VIEW WHENEVER WHERE WITH</p> <p><strong>TO_DATE与TO_CHAR</strong><br /> 1.在用Oracle的to_date函数来做日期转换Ӟ很多JavaE序员也怼和我一P直觉的采?#8220;yyyy-MM-dd HH:mm:ss”的格式作为格式进行{换,但是在Oracle中会引v错误Q?#8220;ORA 01810 格式代码出现两次”?br /> 如:select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mm:ss') from dual;<br /> 原因是SQL中不区分大小写,MM和mm被认为是相同的格式代码,所以Oracle的SQL采用了mi代替分钟?br /> select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual;<br /> 2.另要?4时的Ş式显C出来要用HH24<br /> select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;//mi是分?br /> select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual;//mm会显C月?/p> <p>     <br /> JDBCq接Oracle<br /> 1.本机q接Q控刉?理工具-数据?(ODBC)d相应的Oracle的DNS服务QDNSnameQ;<br />   加蝲驱动QClass.forName("sun.jdbc.odbc.JdbcOdbcDriver");<br />   建立q接QDriverManager.getConnection("jdbc:odbc:DNSname","username","password");<br /> 2.URLq接Q?br />   加蝲驱动QClass.forName("oracle.jdbc.driver.OracleDriver");<br />          Q此驱动一般在Oracle安装目录内相应server\jdbc\lib目录下能扑ֈQ;<br />   建立q接QDriverManager.getConnection("jdbc:oracle:thin:@url:port:OSname","username","password");<br /> </p> </span> <img src ="http://www.aygfsteel.com/aczreg/aggbug/304026.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/aczreg/" target="_blank">咖啡企鹅</a> 2009-12-12 15:50 <a href="http://www.aygfsteel.com/aczreg/archive/2009/12/12/304026.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PL/SQL基础http://www.aygfsteel.com/aczreg/archive/2009/12/09/305051.html咖啡企鹅咖啡企鹅Wed, 09 Dec 2009 06:13:00 GMThttp://www.aygfsteel.com/aczreg/archive/2009/12/09/305051.htmlhttp://www.aygfsteel.com/aczreg/comments/305051.htmlhttp://www.aygfsteel.com/aczreg/archive/2009/12/09/305051.html#Feedback0http://www.aygfsteel.com/aczreg/comments/commentRss/305051.htmlhttp://www.aygfsteel.com/aczreg/services/trackbacks/305051.html阅读全文

咖啡企鹅 2009-12-09 14:13 发表评论
]]>
Q{QOracle集合q算http://www.aygfsteel.com/aczreg/archive/2009/11/30/304275.html咖啡企鹅咖啡企鹅Mon, 30 Nov 2009 08:29:00 GMThttp://www.aygfsteel.com/aczreg/archive/2009/11/30/304275.htmlhttp://www.aygfsteel.com/aczreg/comments/304275.htmlhttp://www.aygfsteel.com/aczreg/archive/2009/11/30/304275.html#Feedback0http://www.aygfsteel.com/aczreg/comments/commentRss/304275.htmlhttp://www.aygfsteel.com/aczreg/services/trackbacks/304275.htmlDIY部落(http://www.diybl.com/course/7_databases/oracle/oraclexl/20090825/171870.html)

■■集合q算(UNION、UNION ALL、INTERSECT、MINUS)
   集合q算l合两个或多个部分查询的l果C个结果中。包含集合运的查询UCؓ复合查询?br /> Operator  Returns
UNION(联合)  由每个查询选择的所有不同的?无重复?
UNION ALL  由每个查询选择的所有的行,包括所有重复的?br /> INTERSECT(交叉)  ׃个查询选择的所有不同的?br /> MINUS   q一个查询选择的所有不同的?br /> 所有的集合q算与等L优先U相同,如果SQL语句包含多个集合q算q且没有圆括h地指定另一个顺序,Oracle服务器将以从左到右的序计算。你应该使用圆括h明确地指定带另外的集合运INTERSECT (怺) q算查询中的赋值顺序?br />     INTERSECT (怺) 和MINUS (相减) q算不是ANSI SQL-99兼容的,他们是Oracle特定的?/p>


■联?UNION)
UNION(联合)q算
UNIONq算q回所有由M查询选择的行。用UNIONq算从多表返回所有行Q但除去M重复的行?br /> ・原?br /> :: 被选择的列数和列的数据cd必须是与所有用在查询中的SELECT语句一致。列的名字不必相同?br /> :: 联合q算在所有被选择的列上进行?br /> :: 在做重复查的时候不忽略I?NULL)倹{?br /> :: INq算有比UNIONq算高的优先U?br /> :: 在默认情况下Q输ZSELECT子句的第一列的升序排序?/p>


■全联合(UNION ALL)
q算从两个查询返回包括所有重复值的l果
原则
:: 和联合不同,重复的行不被qoQƈ且默认情况下输出不排序?br /> :: 不能使用DISTINCT关键字?br />    注:除了上面的两点,UNION ALL的原则与UNION相同?/p>


■相?INTERSECT)
用相交运返回多个查询中所有的公共行?br /> 原则
:: 在查询中?SELECT 语句选择的列数和数据cd必须与在查询中所使用的所有的 SELTCT 语句中的   一P但列的名字不必一栗?br /> :: 颠倒相交的表的排序不改变结果?br /> :: 怺不忽略空倹{?/p>


■相?MINUS)
用相减运返回由W一个查询返回的行,那些行不出现在第二个查询?(W一个SELECT语句减第二个SELECT语句)?br /> 原则
:: 在查询中被SELECT语句选择的列数和数据cd必须与在查询中所使用的所有的SELTCT语句中的一P但列的名字不必一栗?br /> :: 对于MINUSq算Q在WHERE子句中所有的列都必须在SELECT子句中?br /> ?br /> ※集合运的原则
:: 在两个SELECT列表中的表达式必d数目上和数据cd上相匚w
:: 可以用圆括号改变执行的顺?br /> :: ORDER BY子句Q?br />  –只能出现在语句的最?br />  –从第一个SELECT语句接收列名、别名,或者位|记?br /> :: 集合q算可以用在子查询中?/p>


■Oracle 服务器和集合q算
:: 除了UNION ALLQ重复行自动被清?br /> :: 在结果中的列名是W一个查询中出现的列?br /> :: 除了UNION ALL(无排?Q默认情况下按升序顺序输?br /> 在一个复合查询的各查询组成部分的选择列表中相应的表达式必d数目和类型上匚w。如果查询的l成部分选择字符数据Q返回值的数据cd被如下决定:
 :: 如果查询选择的数据类型的gؓCHARQ那么,q回值的数据cd也ؓCHAR?br />  :: 如果查询选择的两者之一或两者的数据cdgؓVARCHAR2Q那么,q回值的数据cd也是VARCHAR2?/p>


  你可能需要提及,输出以第一个SELECT子句的第一列的升序被排序,然后是第二列Q等{?/p>


■匹配SELECT语句 //凑数
eg:
SELECT department_id, TO_NUMBER(null) location, hire_date
FROM employees
UNION
SELECT department_id, location_id, TO_DATE(null)
FROM departments;


DEPARTMENT_ID   LOCATION HIRE_DATE
------------- ---------- ----------
           80            21-4?-00
           90       1700
           90            17-6?-87
           90            21-9?-89
           90            13-1?-93
          100       1700
          100            16-8?-94
          100            17-8?-94
          100            28-9?-97
          100            30-9?-97
          100            07-3?-98


匚wSELECT语句
    ׃在两个查询的SELECT列表中的表达式必d数量上匹配,你可以用虚拟列和{换函数数据类型来满该规则。在qȝ片中使用了虚拟列Q在W一个查询中的TO_NUMBER函数被用以匹配第二个查询中返回的LOCATION_ID列的数字数据cdQ同样地Q第二个查询中的TO_DATE函数被用于匹?W一个查询返回的日期数据cd?/p>

DIY部落(http://www.diybl.com/course/7_databases/oracle/oraclexl/20090825/171870.html)



咖啡企鹅 2009-11-30 16:29 发表评论
]]>
Oracle用户理 http://www.aygfsteel.com/aczreg/archive/2009/11/30/303962.html咖啡企鹅咖啡企鹅Mon, 30 Nov 2009 07:28:00 GMThttp://www.aygfsteel.com/aczreg/archive/2009/11/30/303962.htmlhttp://www.aygfsteel.com/aczreg/comments/303962.htmlhttp://www.aygfsteel.com/aczreg/archive/2009/11/30/303962.html#Feedback0http://www.aygfsteel.com/aczreg/comments/commentRss/303962.htmlhttp://www.aygfsteel.com/aczreg/services/trackbacks/303962.html

A.用户角色必须要有用户操作权限才可以常见用P例如sys,systemQ?

B.1.创徏一个用PCREATE USER username IDENTIFIED BY passwordQ?br />    2.删除一个用PDROP USER username CASCADEQ?-U联删除此用Lx?br />    3.更改密码QALTER USER username IDENTIFIED BY password;
   4.锁定用户QALTER USER username ACCOUNT LOCK;
   5.解锁用户QALTER USER username ACCOUNT UNLOCK;   

C.1.GRANT privilege... ON object... TO {public|group|user}
       赋予      权利        操作对象     l?nbsp;  |用户
      GRANT roll. TO user
       赋予    角色l?用户    --角色Qconnect|resource|dba...  
    2.REVOKE privilege... ON object... FROM {public|group|user}
      取消          权利        操作对象       ?nbsp;      |用户
      REVOKE roll. FROM user
      撤销      角色    ?nbsp;    用户

D.1.登陆配置文g创徏(错误三次锁定两天)
       CREATE PROFILE pname LIMIT FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 2;
    2.l予用户此约?br />       ALTER USER user PROFILE pname;


E 1.登陆、切换用户CONN[ECT]
        用法: CONN[ECT] [logon] [AS {SYSDBA|SYSOPER}]
        其中 <logon>  ::= <username>[/<password>][@<connect_identifier>] 
        如:CONN scott\tiger
 
F 1.查询Oracle共有多少中角Ԍ
      SELECT * FROM DBA_ROLESQ?br />    2.查询一个用户具有何U角Ԍ
      SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE='SCOTT';
   3.a.查询一个角色具有何U系l权限:
      SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE='RESOURCE';
      b.查询一个角色具有何U对象权限:
      SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE='RESOURCE';

 

咖啡企鹅 2009-11-30 15:28 发表评论
]]>
Q{QOracle函数大全http://www.aygfsteel.com/aczreg/archive/2009/11/30/304255.html咖啡企鹅咖啡企鹅Mon, 30 Nov 2009 06:28:00 GMThttp://www.aygfsteel.com/aczreg/archive/2009/11/30/304255.htmlhttp://www.aygfsteel.com/aczreg/comments/304255.htmlhttp://www.aygfsteel.com/aczreg/archive/2009/11/30/304255.html#Feedback0http://www.aygfsteel.com/aczreg/comments/commentRss/304255.htmlhttp://www.aygfsteel.com/aczreg/services/trackbacks/304255.html 1.ASCII
q回与指定的字符对应的十q制?
SQL> select ascii(’A’) A,ascii(’a’) a,ascii(’0’) zero,ascii(’ ’) space from dual;
A A ZERO SPACE
--------- --------- --------- ---------
65 97 48 32

2.CHR
l出整数,q回对应的字W?
SQL> select chr(54740) zhao,chr(65) chr65 from dual;
ZH C
-- -
?A
3.CONCAT
q接两个字符?
SQL> select concat(’010-’,’88888888’)||’?3’ 高乾竞电(sh)?from dual;
高乾竞电(sh)?
----------------
010-88888888?3
4.INITCAP
q回字符串ƈ字W串的第一个字母变为大?
SQL> select initcap(’smith’) upp from dual;
UPP
-----
Smith

5.INSTR(C1,C2,I,J)
在一个字W串中搜索指定的字符,q回发现指定的字W的位置;
C1 被搜索的字符?
C2 希望搜烦的字W串
I 搜烦的开始位|?默认?
J 出现的位|?默认?
SQL> select instr(’oracle traning’,’ra’,1,2) instring from dual;
INSTRING
---------
9

6.LENGTH
q回字符串的长度;
SQL> select name,length(name),addr,length(addr),sal,length(to_char(sal)) from gao.nchar_tst;
NAME LENGTH(NAME) ADDR LENGTH(ADDR) SAL LENGTH(TO_CHAR(SAL))
------ ------------ ---------------- ------------ --------- --------------------
高乾?3 北京市v锭区 6 9999.99 7

7.LOWER
q回字符?q将所有的字符写
SQL> select lower(’AaBbCcDd’)AaBbCcDd from dual;
AABBCCDD
--------
aabbccdd

8.UPPER
q回字符?q将所有的字符大写
SQL> select upper(’AaBbCcDd’) upper from dual;
UPPER
--------
AABBCCDD

9.RPAD和LPAD(_脓(chung)字符)
RPAD 在列的右边粘贴字W?
LPAD 在列的左边粘贴字W?
SQL> select lpad(rpad(’gao’,10,’*’),17,’*’)from dual;
LPAD(RPAD(’GAO’,1
-----------------
*******gao*******
不够字符则用*来填?/p>

10.LTRIM和RTRIM
LTRIM 删除左边出现的字W串
RTRIM 删除双出现的字W串
SQL> select ltrim(rtrim(’ gao qian jing ’,’ ’),’ ’) from dual;
LTRIM(RTRIM(’
-------------
gao qian jing

11.SUBSTR(string,start,count)
取子字符?从start开?取count?
SQL> select substr(’13088888888’,3,8) from dual;
SUBSTR(’
--------
08888888

12.REPLACE(’string’,’s1’,’s2’)
string 希望被替换的字符或变?
s1 被替换的字符?
s2 要替换的字符?
SQL> select replace(’he love you’,’he’,’i’) from dual;
REPLACE(’H
----------
i love you

13.SOUNDEX
q回一个与l定的字W串读音相同的字W串
SQL> create table table1(xm varchar(8));
SQL> insert into table1 values(’weather’);
SQL> insert into table1 values(’wether’);
SQL> insert into table1 values(’gao’);
SQL> select xm from table1 where soundex(xm)=soundex(’weather’);
XM
--------
weather
wether

14.TRIM(’s’ from ’string’)
LEADING 剪掉前面的字W?
TRAILING 剪掉后面的字W?
如果不指?默认为空格符
15.ABS
q回指定值的l对?
SQL> select abs(100),abs(-100) from dual;
ABS(100) ABS(-100)
--------- ---------
100 100

16.ACOS
l出反余弦的?
SQL> select acos(-1) from dual;
ACOS(-1)
---------
3.1415927

17.ASIN
l出反正弦的?
SQL> select asin(0.5) from dual;
ASIN(0.5)
---------
.52359878

18.ATAN
q回一个数字的反正切?
SQL> select atan(1) from dual;
ATAN(1)
---------
.78539816

19.CEIL
q回大于或等于给出数字的最整?
SQL> select ceil(3.1415927) from dual;
CEIL(3.1415927)
---------------
4

20.COS
q回一个给定数字的余u
SQL> select cos(-3.1415927) from dual;
COS(-3.1415927)
---------------
-1
21.COSH
q回一个数字反余u?
SQL> select cosh(20) from dual;
COSH(20)
---------
242582598

22.EXP
q回一个数字e的nơ方?
SQL> select exp(2),exp(1) from dual;
EXP(2) EXP(1)
--------- ---------
7.3890561 2.7182818

23.FLOOR
对给定的数字取整?
SQL> select floor(2345.67) from dual;
FLOOR(2345.67)
--------------
2345

24.LN
q回一个数字的Ҏ(gu)?
SQL> select ln(1),ln(2),ln(2.7182818) from dual;
LN(1) LN(2) LN(2.7182818)
--------- --------- -------------
0 .69314718 .99999999

25.LOG(n1,n2)
q回一个以n1为底n2的对?
SQL> select log(2,1),log(2,4) from dual;
LOG(2,1) LOG(2,4)
--------- ---------
0 2

26.MOD(n1,n2)
q回一个n1除以n2的余?
SQL> select mod(10,3),mod(3,3),mod(2,3) from dual;
MOD(10,3) MOD(3,3) MOD(2,3)
--------- -------- ---------
1 0 2

27.POWER
q回n1的n2ơ方?
SQL> select power(2,10),power(3,3) from dual;
POWER(2,10) POWER(3,3)
----------- ----------
1024 27

28.ROUND和TRUNC
按照指定的精度进行舍?
SQL> select round(55.5),round(-55.4),trunc(55.5),trunc(-55.5) from dual;
ROUND(55.5) ROUND(-55.4) TRUNC(55.5) TRUNC(-55.5)
----------- ------------ ----------- ------------
56 -55 55 -55

29.SIGN
取数字n的符?大于0q回1,于0q回-1,{于0q回0
SQL> select sign(123),sign(-100),sign(0) from dual;
SIGN(123) SIGN(-100) SIGN(0)
--------- ---------- ---------
1 -1 0

30.SIN
q回一个数字的正u?
SQL> select sin(1.57079) from dual;
SIN(1.57079)
------------
1

31.SIGH
q回双曲正u的?
SQL> select sin(20),sinh(20) from dual;
SIN(20) SINH(20)
--------- ---------
.91294525 242582598

32.SQRT
q回数字n的根
SQL> select sqrt(64),sqrt(10) from dual;
SQRT(64) SQRT(10)
--------- ---------
8 3.1622777

33.TAN
q回数字的正切?
SQL> select tan(20),tan(10) from dual;
TAN(20) TAN(10)
--------- ---------
2.2371609 .64836083

34.TANH
q回数字n的双曲正切?
SQL> select tanh(20),tan(20) from dual;
TANH(20) TAN(20)
--------- ---------
1 2.2371609

35.TRUNC
按照指定的精度截取一个数
SQL> select trunc(124.1666,-2) trunc1,trunc(124.16666,2) from dual;
TRUNC1 TRUNC(124.16666,2)
--------- ------------------
100 124.16

36.ADD_MONTHS
增加或减L?
SQL> select to_char(add_months(to_date(’199912’,’yyyymm’),2),’yyyymm’) from dual;
TO_CHA
------
200002
SQL> select to_char(add_months(to_date(’199912’,’yyyymm’),-2),’yyyymm’) from dual;
TO_CHA
------
199910

37.LAST_DAY
q回日期的最后一?
SQL> select to_char(sysdate,’yyyy.mm.dd’),to_char((sysdate)+1,’yyyy.mm.dd’) from dual;
TO_CHAR(SY TO_CHAR((S
---------- ----------
2004.05.09 2004.05.10
SQL> select last_day(sysdate) from dual;
LAST_DAY(S
----------
31-5?-04

38.MONTHS_BETWEEN(date2,date1)
l出date2-date1的月?
SQL> select months_between(’19-12?1999’,’19-3?1999’) mon_between from dual;
MON_BETWEEN
-----------
9
SQL>selectmonths_between(to_date(’2000.05.20’,’yyyy.mm.dd’),to_date(’2005.05.20’,’yyyy.mm.dd’)) mon_betw from dual;
MON_BETW
---------
-60

39.NEW_TIME(date,’this’,’that’)
l出在this时区=other时区的日期和旉
SQL> select to_char(sysdate,’yyyy.mm.dd hh24:mi:ss’) bj_time,to_char(new_time
2 (sysdate,’PDT’,’GMT’),’yyyy.mm.dd hh24:mi:ss’) los_angles from dual;
BJ_TIME LOS_ANGLES
------------------- -------------------
2004.05.09 11:05:32 2004.05.09 18:05:32

40.NEXT_DAY(date,’day’)
l出日期date和星期x之后计算下一个星期的日期
SQL> select next_day(’18-5?2001’,’星期?#8217;) next_day from dual;
NEXT_DAY
----------
25-5?-01
41.SYSDATE
用来得到pȝ的当前日?
SQL> select to_char(sysdate,’dd-mm-yyyy day’) from dual;
TO_CHAR(SYSDATE,’
-----------------
09-05-2004 星期?
trunc(date,fmt)按照l出的要求将日期截断,如果fmt=’mi’表示保留?截断U?
SQL> select to_char(trunc(sysdate,’hh’),’yyyy.mm.dd hh24:mi:ss’) hh,
2 to_char(trunc(sysdate,’mi’),’yyyy.mm.dd hh24:mi:ss’) hhmm from dual;
HH HHMM
------------------- -------------------
2004.05.09 11:00:00 2004.05.09 11:17:00

42.CHARTOROWID
字W数据类型{换ؓROWIDcd
SQL> select rowid,rowidtochar(rowid),ename from scott.emp;
ROWID ROWIDTOCHAR(ROWID) ENAME
------------------ ------------------ ----------
AAAAfKAACAAAAEqAAA AAAAfKAACAAAAEqAAA SMITH
AAAAfKAACAAAAEqAAB AAAAfKAACAAAAEqAAB ALLEN
AAAAfKAACAAAAEqAAC AAAAfKAACAAAAEqAAC WARD
AAAAfKAACAAAAEqAAD AAAAfKAACAAAAEqAAD JONES

43.CONVERT(c,dset,sset)
源字符?sset从一个语a字符集{换到另一个目的dset字符?
SQL> select convert(’strutz’,’we8hp’,’f7dec’) "conversion" from dual;
conver
------
strutz

44.HEXTORAW
一个十六进制构成的字符串{换ؓ二进?/p>

45.RAWTOHEXT
一个二q制构成的字W串转换为十六进?/p>

46.ROWIDTOCHAR
ROWID数据cd转换为字W类?/p>

47.TO_CHAR(date,’format’)
SQL> select to_char(sysdate,’yyyy/mm/dd hh24:mi:ss’) from dual;
TO_CHAR(SYSDATE,’YY
-------------------
2004/05/09 21:14:41

48.TO_DATE(string,’format’)
字W串转化为ORACLE中的一个日?/p>

49.TO_MULTI_BYTE
字W串中的单字节字W{化ؓ多字节字W?
SQL> select to_multi_byte(’?#8217;) from dual;
TO
--
?/p>

50.TO_NUMBER
给出的字符转换为数?
SQL> select to_number(’1999’) year from dual;
YEAR
---------
1999

51.BFILENAME(dir,file)
指定一个外部二q制文g
SQL>insert into file_tb1 values(bfilename(’lob_dir1’,’image1.gif’));

52.CONVERT(’x’,’desc’,’source’)
x字段或变量的源source转换为desc
SQL> select sid,serial#,username,decode(command,
2 0,’none’,
3 2,’insert’,
4 3,
5 ’select’,
6 6,’update’,
7 7,’delete’,
8 8,’drop’,
9 ’other’) cmd from v$session where type!=’background’;
SID SERIAL# USERNAME CMD
--------- --------- ------------------------------ ------
1 1 none
2 1 none
3 1 none
4 1 none
5 1 none
6 1 none
7 1275 none
8 1275 none
9 20 GAO select
10 40 GAO none

53.DUMP(s,fmt,start,length)
DUMP函数以fmt指定的内部数字格式返回一个VARCHAR2cd的?
SQL> col global_name for a30
SQL> col dump_string for a50
SQL> set lin 200
SQL> select global_name,dump(global_name,1017,8,5) dump_string from global_name;
GLOBAL_NAME DUMP_STRING
------------------------------ --------------------------------------------------
ORACLE.WORLD Typ=1 Len=12 CharacterSet=ZHS16GBK: W,O,R,L,D

54.EMPTY_BLOB()和EMPTY_CLOB()
q两个函数都是用来对大数据类型字D进行初始化操作的函?/p>

55.GREATEST
q回一l表辑ּ中的最大?x较字W的~码大小.
SQL> select greatest(’AA’,’AB’,’AC’) from dual;
GR
--
AC
SQL> select greatest(’?#8217;,’?#8217;,’?#8217;) from dual;
GR
--
?/p>

56.LEAST
q回一l表辑ּ中的最?
SQL> select least(’?#8217;,’?#8217;,’?#8217;) from dual;
LE
--
?/p>

57.UID
q回标识当前用户的唯一整数
SQL> show user
USER ?GAO"
SQL> select username,user_id from dba_users where user_id=uid;
USERNAME USER_ID
------------------------------ ---------
GAO 25

58.USER
q回当前用户的名?
SQL> select user from dual;
USER
------------------------------
GAO

59.USEREVN
q回当前用户环境的信?opt可以?
ENTRYID,SESSIONID,TERMINAL,ISDBA,LABLE,LANGUAGE,CLIENT_INFO,LANG,VSIZE
ISDBA 查看当前用户是否是DBA如果是则q回true
SQL> select userenv(’isdba’) from dual;
USEREN
------
FALSE
SQL> select userenv(’isdba’) from dual;
USEREN
------
TRUE
SESSION
q回会话标志
SQL> select userenv(’sessionid’) from dual;
USERENV(’SESSIONID’)
--------------------
152
ENTRYID
q回会话人口标志
SQL> select userenv(’entryid’) from dual;
USERENV(’ENTRYID’)
------------------
0
INSTANCE
q回当前INSTANCE的标?
SQL> select userenv(’instance’) from dual;
USERENV(’INSTANCE’)
-------------------
1
LANGUAGE
q回当前环境变量
SQL> select userenv(’language’) from dual;
USERENV(’LANGUAGE’)
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
LANG
q回当前环境的语a的羃?
SQL> select userenv(’lang’) from dual;
USERENV(’LANG’)
----------------------------------------------------
ZHS
TERMINAL
q回用户的终端或机器的标?
SQL> select userenv(’terminal’) from dual;
USERENV(’TERMINA
----------------
GAO
VSIZE(X)
q回X的大?字节)?
SQL> select vsize(user),user from dual;
VSIZE(USER) USER
----------- ------------------------------
6 SYSTEM


60.AVG(DISTINCT|ALL)
all表示Ҏ(gu)有的值求q_?distinct只对不同的值求q_?
SQLWKS> create table table3(xm varchar(8),sal number(7,2));
语句已处理?
SQLWKS> insert into table3 values(’gao’,1111.11);
SQLWKS> insert into table3 values(’gao’,1111.11);
SQLWKS> insert into table3 values(’zhu’,5555.55);
SQLWKS> commit;
SQL> select avg(distinct sal) from gao.table3;
AVG(DISTINCTSAL)
----------------
3333.33
SQL> select avg(all sal) from gao.table3;
AVG(ALLSAL)
-----------
2592.59

61.MAX(DISTINCT|ALL)
求最大?ALL表示Ҏ(gu)有的值求最大?DISTINCT表示对不同的值求最大?相同的只取一?
SQL> select max(distinct sal) from scott.emp;
MAX(DISTINCTSAL)
----------------
5000

62.MIN(DISTINCT|ALL)
求最?ALL表示Ҏ(gu)有的值求最?DISTINCT表示对不同的值求最?相同的只取一?
SQL> select min(all sal) from gao.table3;
MIN(ALLSAL)
-----------
1111.11

63.STDDEV(distinct|all)
求标准差,ALL表示Ҏ(gu)有的值求标准?DISTINCT表示只对不同的值求标准?
SQL> select stddev(sal) from scott.emp;
STDDEV(SAL)
-----------
1182.5032
SQL> select stddev(distinct sal) from scott.emp;
STDDEV(DISTINCTSAL)
-------------------
1229.951

64.VARIANCE(DISTINCT|ALL)
求协方差
SQL> select variance(sal) from scott.emp;
VARIANCE(SAL)
-------------
1398313.9

65.GROUP BY
主要用来对一l数q行l计
SQL> select deptno,count(*),sum(sal) from scott.emp group by deptno;
DEPTNO COUNT(*) SUM(SAL)
--------- --------- ---------
10 3 8750
20 5 10875
30 6 9400

66.HAVING
对分l统计再加限制条?
SQL> select deptno,count(*),sum(sal) from scott.emp group by deptno having count(*)>=5;
DEPTNO COUNT(*) SUM(SAL)
--------- --------- ---------
20 5 10875
30 6 9400
SQL> select deptno,count(*),sum(sal) from scott.emp having count(*)>=5 group by deptno ;
DEPTNO COUNT(*) SUM(SAL)
--------- --------- ---------
20 5 10875
30 6 9400

67.ORDER BY
用于Ҏ(gu)询到的结果进行排序输?
SQL> select deptno,ename,sal from scott.emp order by deptno,sal desc;
DEPTNO ENAME SAL
--------- ---------- ---------
10 KING 5000
10 CLARK 2450
10 MILLER 1300
20 SCOTT 3000
20 FORD 3000
20 JONES 2975
20 ADAMS 1100
20 SMITH 800
30 BLAKE 2850
30 ALLEN 1600
30 TURNER 1500
30 WARD 1250
30 MARTIN 1250
30 JAMES 950



咖啡企鹅 2009-11-30 14:28 发表评论
]]>
Oracle表查?2)http://www.aygfsteel.com/aczreg/archive/2009/11/30/304239.html咖啡企鹅咖啡企鹅Mon, 30 Nov 2009 04:16:00 GMThttp://www.aygfsteel.com/aczreg/archive/2009/11/30/304239.htmlhttp://www.aygfsteel.com/aczreg/comments/304239.htmlhttp://www.aygfsteel.com/aczreg/archive/2009/11/30/304239.html#Feedback0http://www.aygfsteel.com/aczreg/comments/commentRss/304239.htmlhttp://www.aygfsteel.com/aczreg/services/trackbacks/304239.html多表查询一般表辑ּQ?br /> SELECT ...tx.cu,...FROM table1 t1Qtable2 t2,...tablen tn WHERE conditions;...--(conditions.count>=n-1)
首先定要查询的字段以及要求条g字段会出现在那些表中Q从而甄选出table1到tablen共n张表Q?br /> 起个别名Q非必须Q,表名.字段 方式限定查询字段Q?br /> 分析归纳出限定条Ӟ重点隄Q,不会于n-1个;
最后,有其他要求,如排序,酌情d?br />
自连接查询:
例表QSQL> desc emp;
Name     Type         Nullable Default Comments
-------- ------------ -------- ------- --------
EMPNO    NUMBER(4)    --职员~号                         
ENAME    VARCHAR2(10) Y                        
JOB      VARCHAR2(9)  Y                        
MGR      NUMBER(4)    Y         --上~号               
HIREDATE DATE         Y                        
SAL      NUMBER(7,2)  Y                        
COMM     NUMBER(7,2)  Y                        
DEPTNO   NUMBER(2)     
问题Q查询职员姓名,职员~号Q职员上U姓名,职员上~号Q?/p> W办法:利用SELECT造出另一张表
SELECT emp.ename,emp.empno,empx.ename,empx.empno FROM emp,(SELECT empno,ename FROM emp) empx WHERE emp.mgr = empx.empno;
好办法:利用别名造出另一张表
SELECT cl.ename,cl.empno,ld.ename,ld.empno FROM emp cl,emp ld WHERE cl.mgr=ld.empno;

分页查询
1.利用ROWID
SELECT * FROM table WHERE ROWID IN (SELECT B.rid FROM (SELECT ROWNUM rn,A.rid FROM (SELECT ROWID rid FROM table ORDER BY tdid) A WHERE ROWNUM<=16380) B WHERE B.rn>=16351) ORDER BY tdid;
a-先按照tdid排序从table中选取ROWID表,另命名ؓA表;
b-从A表补偿增加ROWNUM列,qA表ROWID列徏立新表,q加分页行上限值限刉取最高行敎ͼ另命名ؓB表;
c-从B表选择ROWIDQƈ加分行下限值选取最低行敎ͼ获得分页行的ROWID表;
d-比较c步骤的ROWID表,从table选出相应行,排序Q分c?br /> 2.利用ROWNUM
SELECT * FROM (SELECT table.*,ROWNUM rn FROM table ORDER BY tdid DESC) A WHERE A.rn BETWEEN 16351 AND 16380;
a-选取table所有列Q按照tdid排序Qƈ在最后补偿ROWNUM列徏立新表,另命名ؓA表;
b-从A表选取rn在所取行数范围内的行Q分c?br /> 一?/strong>Q利用ROWID效率比利用ROWNUM高?br />

咖啡企鹅 2009-11-30 12:16 发表评论
]]>
Q{QOracle函数列表速查http://www.aygfsteel.com/aczreg/archive/2009/11/30/304217.html咖啡企鹅咖啡企鹅Mon, 30 Nov 2009 02:19:00 GMThttp://www.aygfsteel.com/aczreg/archive/2009/11/30/304217.htmlhttp://www.aygfsteel.com/aczreg/comments/304217.htmlhttp://www.aygfsteel.com/aczreg/archive/2009/11/30/304217.html#Feedback0http://www.aygfsteel.com/aczreg/comments/commentRss/304217.htmlhttp://www.aygfsteel.com/aczreg/services/trackbacks/304217.htmlPL/SQL单行函数和组函数详解
 函数是一U有零个或多个参数ƈ且有一个返回值的E序。在SQL中Oracle内徏了一pd函数Q这些函数都可被UCؓSQL或PL/SQL语句Q函C要分Z大类Q?

 


   单行函数


   l函?


  本文讨论如何利用单行函C及用规则?/span>


  SQL中的单行函数


  SQL和PL/SQL中自带很多类型的函数Q有字符、数字、日期、{换、和混合型等多种函数用于处理单行数据Q因此这些都可被l称为单行函数。这些函数均可用于SELECT,WHERE、ORDER BY{子句中Q例如下面的例子中就包含了TO_CHAR,UPPER,SOUNDEX{单行函数?br /> SELECT ename,TO_CHAR(hiredate,''day,DD-Mon-YYYY'')FROM empWhere UPPER(ename) Like ''AL%''ORDER BY SOUNDEX(ename)


  单行函数也可以在其他语句中用,如update的SET子句QINSERT的VALUES子句QDELET的WHERE子句,认证考试特别注意在SELECT语句中用这些函敎ͼ所以我们的注意力也集中在SELECT语句中?/span>


  NULL和单行函?/span>


  在如何理解NULL上开始是很困隄Q就是一个很有经验的Z然对此感到困惑。NULLDCZ个未知数据或者一个空|术操作W的M一个操作数为NULL|l果均ؓ提个NULL?q个规则也适合很多函数Q只有CONCAT,DECODE,DUMP,NVL,REPLACE在调用了NULL参数时能够返回非NULL倹{在q些中NVL函数时最重要的,因ؓ他能直接处理NULL|NVL有两个参敎ͼNVL(x1,x2),x1和x2都式表达式,当x1为null时返回X2,否则q回x1?/span>


  下面我们看看emp数据表它包含了薪水、奖金两,需要计ȝ补偿
column name emp_id salary bonuskey type pk nulls/unique nn,u nnfk table datatype number number numberlength 11.2 11.2


  不是单的薪水和奖金加v来就可以了,如果某一行是null值那么结果就是nullQ比如下面的例子Q?br /> update empset salary=(salary+bonus)*1.1


  q个语句中,雇员的工资和奖金都将更新Z个新的|但是如果没有奖金Q即 salary + null,那么׃得出错误的结论,q个时候就要用nvl函数来排除null值的影响?br /> 所以正的语句是:
update empset salary=(salary+nvl(bonus,0)*1.1
单行字符串函?/span>


  单行字符串函数用于操作字W串数据Q他们大多数有一个或多个参数Q其中绝大多数返回字W串


  ASCII()
  c1是一字符Ԍq回c1W一个字母的ASCII码,他的逆函数是CHR()
SELECT ASCII(''A'') BIG_A,ASCII(''z'') BIG_z FROM empBIG_A BIG_z65 122


  CHR(QiQ?[NCHAR_CS]
  i是一个数字,函数q回十进制表C的字符
select CHR(65),CHR(122),CHR(223) FROM empCHR65 CHR122 CHR223A z B


  CONCAT(,)
  c1,c2均ؓ字符Ԍ函数c2q接到c1的后面,如果c1为null,返回c2.如果c2为null,则返回c1Q如果c1、c2都ؓnullQ则q回null。他和操作符||q回的结果相?br /> select concat(''slobo '',''Svoboda'') username from dualusernameslobo Syoboda


  INITCAP()
  c1Z字符丌Ӏ函数将每个单词的第一个字母大写其它字母小写返回。单词由I格Q控制字W,标点W号限制?br /> select INITCAP(''veni,vedi,vici'') Ceasar from dualCeasarVeni,Vedi,Vici


  INSTR(,[,QiQ[,]])
  c1,c2均ؓ字符Ԍi,j为整数。函数返回c2在c1中第jơ出现的位置Q搜索从c1的第i个字W开始。当没有发现需要的字符时返?,如果i敎ͼ那么搜烦从叛_左进行,但是位置的计还是从左到叻Ii和j的缺省gؓ1.
select INSTR(''Mississippi'',''i'',3,3) from dualINSTR(''MISSISSIPPI'',''I'',3,3)11select INSTR(''Mississippi'',''i'',-2,3) from dualINSTR(''MISSISSIPPI'',''I'',3,3)2


  INSTRB(,[,i[,j])
  与INSTRQ)函数一P只是他返回的是字节,对于单字节INSTRB(){于INSTR()


  LENGTH()
  c1为字W串Q返回c1的长度,如果c1为nullQ那么将q回null倹{?br /> select LENGTH(''Ipso Facto'') ergo from dualergo10


  LENGTHb()
  与LENGTH()一Pq回字节.


  lower()
  q回c的小写字W,l常出现在where子串?br /> select LOWER(colorname) from itemdetail WHERE LOWER(colorname) LIKE ''%white%''COLORNAMEWinterwhite


  LPAD(,QiQ[,])
  c1,c2均ؓ字符Ԍi为整数。在c1的左侧用c2字符串补长度i,可多ơ重复,如果i于c1的长度,那么只返回i那么长的c1字符Q其他的被截去。c2的缺省gؓ单空|参见RPAD?br /> select LPAD(answer,7,'''') padded,answer unpadded from question;PADDED UNPADDED Yes YesNO NOMaybe maybe


  LTRIM(,)
  把c1中最左边的字W去掉,使其W一个字W不在c2中,如果没有c2Q那么c1׃会改变?br /> select LTRIM(''Mississippi'',''Mis'') from dualLTRppi


  RPAD(,QiQ[,])
  在c1的右侧用c2字符串补长度i,可多ơ重复,如果i于c1的长度,那么只返回i那么长的c1字符Q其他的被截去。c2的缺省gؓ单空?其他与LPAD怼


  RTRIM(,)
  把c1中最双的字W去掉,使其W后一个字W不在c2中,如果没有c2Q那么c1׃会改变?/span>


  REPLACE(,[,])
  c1,c2,c3都是字符Ԍ函数用c3代替出现在c1中的c2后返回?br /> select REPLACE(''uptown'',''up'',''down'') from dualREPLACEdowntown


  STBSTR(,QiQ[,])
  c1Z字符Ԍi,j为整敎ͼ从c1的第i位开始返回长度ؓj的子字符Ԍ如果j为空Q则直到串的N?br /> select SUBSTR(''Message'',1,4) from dualSUBSMess


  SUBSTRB(,QiQ[,])
  与SUBSTR大致相同Q只是I,J是以字节计算?/span>


  SOUNDEX()
  q回与c1发音怼的词
select SOUNDEX(''dawes'') Dawes SOUNDEX(''daws'') Daws, SOUNDEX(''dawson'') from dualDawes Daws DawsonD200 D200 D250


  TRANSLATE(,,)
  c1中与c2相同的字W以c3代替
select TRANSLATE(''fumble'',''uf'',''ar'') test from dualTEXTramble


  TRIM([[]] from c3)
  c3串中的第一个,最后一个,或者都删除?br /> select TRIM('' space padded '') trim from dual TRIMspace padded


  UPPER()
  q回c1的大写,常出现where子串?br /> select name from dual where UPPER(name) LIKE ''KI%''NAMEKING
单行数字函数


  单行数字函数操作数字数据Q执行数学和术q算。所有函数都有数字参数ƈq回数字倹{所有三角函数的操作数和值都是弧度而不是角度,oracle没有提供内徏的弧度和角度的{换函数?/span>


  ABS()
  q回n的绝对?/span>


  ACOS()
  反余玄函敎ͼq回-1?之间的数。n表示弧度
select ACOS(-1) pi,ACOS(1) ZERO FROM dualPI ZERO3.14159265 0


  ASIN()
  反正玄函敎ͼq回-1?Qn表示弧度


  ATAN()
  反正切函敎ͼq回n的反正切|n表示弧度?/span>


  CEIL()
  q回大于或等于n的最整数?/span>


  COS()
  q回n的余玄|n为弧?/span>


  COSH()
  q回n的双曲余玄|n 为数字?br /> select COSH(<1.4>) FROM dualCOSH(1.4)2.15089847


  EXP()
  q回e的nơ幂Qe=2.71828183.


  FLOOR()
  q回于{于N的最大整数?/span>


  LN()
  q回N的自然对敎ͼN必须大于0


  LOG(,)
  q回以n1为底n2的对?/span>


  MOD()
  q回n1除以n2的余敎ͼ


  POWER(,)
  q回n1的n2ơ方


  ROUND(,)
  q回舍入数点右边n2位的n1的|n2的缺省gؓ0Q这回将数Ҏ(gu)接近的整敎ͼ如果n2数就舍入到小数点左边相应的位上,n2必须是整数?br /> select ROUND(12345,-2),ROUND(12345.54321,2) FROM dualROUND(12345,-2) ROUND(12345.54321,2)12300 12345.54


  SIGN()
  如果n敎ͼq回-1,如果n为正敎ͼq回1Q如果n=0q回0.


  SINQ?
  q回n的正玄?n为弧度?/span>


  SINH()
  q回n的双曲正玄?n为弧度?/span>


  SQRT()
  q回n的^Ҏ(gu),n为弧?/span>


  TANQ?
  q回n的正切?n为弧?/span>


  TANH()
  q回n的双曲正切?n为弧?/span>


  TRUNC(,)
  q回截尾到n2位小数的n1的|n2~省讄?Q当n2为缺省设|时会将n1截尾为整敎ͼ如果n2|截֜数点左边相应的位上?/span>




单行日期函数

 


  单行日期函数操作DATA数据cdQ绝大多数都有DATA数据cd的参敎ͼl大多数q回的也是DATA数据cd的倹{?/span>


  ADD_MONTHS(,QiQ?
  q回日期d加上i个月后的l果。i可以使Q意整数。如果i是一个小敎ͼ那么数据库将隐式的他转换成整敎ͼ会截去数点后面的部分?/span>


  LAST_DAY()
  函数q回包含日期d的月份的最后一?


  MONTHS_BETWEEN(,)
  q回d1和d2之间月的数目,如果d1和d2的日的日期都相同Q或者都使该月的最后一天,那么返回一个整敎ͼ否则会返回的l果包含一个分数?/span>


  NEW_TIME(,,)
  d1是一个日期数据类型,当时区tz1中的日期和时间是dӞq回时区tz2中的日期和时间。tz1和tz2时字W串?/span>


  NEXT_DAY(,)
  q回日期d后由dowl出的条件的W一天,dow使用当前会话中给出的语言指定了一周中的某一天,q回的时间分量与d的时间分量相同?br /> select NEXT_DAY(''01-Jan-2000'',''Monday'') "1st Monday",NEXT_DAY(''01-Nov-2004'',''Tuesday'')+7 "2nd Tuesday") from dual;1st Monday 2nd Tuesday03-Jan-2000 09-Nov-2004


  ROUND([,])
  日期d按照fmt指定的格式舍入,fmt为字W串?/span>


  SYADATE
  函数没有参数Q返回当前日期和旉?/span>


  TRUNC([,])
  q回由fmt指定的单位的日期d.
单行转换函数


  单行转换函数用于操作多数据类型,在数据类型之间进行{换?/span>


  CHARTORWID()
  c 使一个字W串Q函数将c转换为RWID数据cd?br /> SELECT test_id from test_case where rowid=CHARTORWID(''AAAA0SAACAAAALiAAA'')


  CONVERT(,[,])
  c֭W串Qdset、sset是两个字W集Q函数将字符串c由sset字符集{换ؓdset字符集,sset的缺省设|ؓ数据库的字符集?/span>


  HEXTORAW()
  x?6q制的字W串Q函数将16q制的x转换为RAW数据cd?/span>


  RAWTOHEX()
  x是RAW数据cd字符Ԍ函数RAW数据c{换ؓ16q制的数据类型?/span>


  ROWIDTOCHAR()
  函数ROWID数据cd转换为CHAR数据cd?/span>


  TO_CHAR([[,)
  x是一个data或number数据cdQ函数将x转换成fmt指定格式的char数据cdQ如果x为日期nlsparm=NLS_DATE_LANGUAGE 控制q回的月份和日䆾所使用的语a。如果x为数字nlsparm=NLS_NUMERIC_CHARACTERS 用来指定数位和千分位的分隔W,以及货币W号?br /> NLS_NUMERIC_CHARACTERS ="dg", NLS_CURRENCY="string"


  TO_DATE([,[,Q?br />   c表示字符Ԍfmt表示一U特D格式的字符丌Ӏ返回按照fmt格式昄的c,nlsparm表示使用的语a。函数将字符串c转换成date数据cd?/span>


  TO_MULTI_BYTE()
  c表示一个字W串Q函数将c的担子截字符转换成多字节字符?/span>


  TO_NUMBER([,[,)
  c表示字符Ԍfmt表示一个特D格式的字符Ԍ函数q回值按照fmt指定的格式显C。nlsparm表示语言Q函数将q回c代表的数字?/span>


  TO_SINGLE_BYTE()
  字W串c中得多字节字W{化成{h(hun)的单字节字符。该函数仅当数据库字W集同时包含单字节和多字节字W时才?/span>


  其它单行函数


  BFILENAME(
,)
  dir是一个directorycd的对象,fileZ文g名。函数返回一个空的BFILE位置值指C符Q函数用于初始化BFILE变量或者是BFILE列?/span>


  DECODE(,,[,,,[])
  x是一个表辑ּQm1是一个匹配表辑ּQx与m1比较Q如果m1{于xQ那么返回r1,否则,x与m2比较Q依ơ类推m3,m4,m5....直到有返回结果?/span>


  DUMP(,[,[,[,]]])
  x是一个表辑ּ或字W,fmt表示8q制?0q制?6q制、或则单字符。函数返回包含了有关x的内部表CZ息的VARCHAR2cd的倹{如果指定了n1,n2那么从n1开始的长度为n2的字节将被返回?/span>


  EMPTY_BLOB()
  该函数没有参敎ͼ函数q回 一个空的BLOB位置指示W。函数用于初始化一个BLOB变量或BLOB列?/span>


  EMPTY_CLOB()
  该函数没有参敎ͼ函数q回 一个空的CLOB位置指示W。函数用于初始化一个CLOB变量或CLOB列?/span>


  GREATEST()
  exp_list是一列表辑ּQ返回其中最大的表达式,每个表达式都被隐含的转换W一个表辑ּ的数据类型,如果W一个表辑ּ是字W串数据cd中的M一个,那么q回的结果是varchar2数据cdQ同时用的比较是非填充I格cd的比较?/span>


  LEAST()
  exp_list是一列表辑ּQ返回其中最的表达式,每个表达式都被隐含的转换W一个表辑ּ的数据类型,如果W一个表辑ּ是字W串数据cd中的M一个,返回的l果是varchar2数据cdQ同时用的比较是非填充I格cd的比较?/span>


  UID
  该函数没有参敎ͼq回唯一标示当前数据库用L整数?/span>


  USER
  q回当前用户的用户名


  USERENV()
  Zoptq回包含当前会话信息。opt的可选gؓQ?/span>


  ISDBA    会话中SYSDBA脚色响应Q返回TRUE
  SESSIONID  q回审计会话标示W?br />   ENTRYID   q回可用的审计项标示W?
  INSTANCE  在会话连接后Q返回实例标C符。该值只用于q行Parallel 服务器ƈ且有 多个实例的情况下使用?br />   LANGUAGE  q回语言、地域、数据库讄的字W集?br />   LANG    q回语言名称的ISO~写?br />   TERMINAL  为当前会话用的l端或计机q回操作pȝ的标C符?/span>


  VSIZE()
  x是一个表辑ּ。返回x内部表示的字节数?br />

SQL中的l函?/span>


  l函C叫集合函敎ͼq回Z多个行的单一l果Q行的准数量无法确定,除非查询被执行ƈ且所有的l果都被包含在内。与单行函数不同的是Q在解析时所有的行都是已知的。由于这U差别ɾl函C单行函数有在要求和行Z有微的差异.


  l(多行Q函?/span>


  与单行函数相比,oracle提供了丰富的Zl的Q多行的函数。这些函数可以在select或select的having子句中用,当用于select子串时常帔R和GROUP BY一起用?/span>


  AVG([{DISYINCT|ALL}])
  q回数值的q_倹{缺省设|ؓALL.
SELECT AVG(sal),AVG(ALL sal),AVG(DISTINCT sal) FROM scott.empAVG(SAL) AVG(ALL SAL) AVG(DISTINCT SAL)1877.94118 1877.94118 1916.071413


  COUNT({*|DISTINCT|ALL} )
  q回查询中行的数目,~省讄是ALL,*表示q回所有的行?/span>


  MAX([{DISTINCT|ALL}])
  q回选择列表目的最大|如果x是字W串数据cdQ他q回一个VARCHAR2数据cdQ如果X是一个DATA数据cdQ返回一个日期,如果X是numeric数据cdQ返回一个数字。注意distinct和all不v作用Q应为最大gq两U设|是相同的?/span>


  MIN([{DISTINCT|ALL}])
  q回选择列表目的最倹{?/span>


  STDDEV([{DISTINCT|ALL}])
  q回选者的列表目的标准差Q所谓标准差是方差的qx栏V?/span>


  SUM([{DISTINCT|ALL}])
  q回选择列表目的数值的d?/span>


  VARIANCE([{DISTINCT|ALL}])
  q回选择列表目的统计方差?/span>


  用GROUP BYl数据分l?/span>


  正如题目暗示的那L函数是操作那些已经分好l的数据Q我们告诉数据库用GROUP BY怎样l数据分l或者分c,当我们在SELECT语句的SELECT子句中用组函数Ӟ我们必须把ؓ分组或非常数列放|在GROUP BY子句中,如果没有用group byq行专门处理Q那么缺省的分类是将整个l果设ؓ一cR?br /> select stat,counter(*) zip_count from zip_codes GROUP BY state;ST ZIP_COUNT-- ---------AK 360AL 1212AR 1309AZ 768CA 3982


  在这个例子中Q我们用state字段分类Q如果我们要结果按照zip_codes排序,可以用ORDER BY语句QORDER BY子句可以使用列或l函数?br /> select stat,counter(*) zip_count from zip_codes GROUP BY state ORDER BY COUNT(*) DESC;ST COUNT(*)-- --------NY 4312PA 4297TX 4123CA 3982


  用HAVING子句限制分组数据


  现在你已l知道了在查询的SELECT语句和ORDER BY子句中用主函数Q组函数只能用于两个子串中,l函C能用于WHERE子串中,例如下面的查询是错误的:
错误SELECT sales_clerk,SUN(sale_amount) FROM gross_sales WHERE sales_dept=''OUTSIDE'' AND SUM(sale_amount)>10000 GROUP BY sales_clerk


  q个语句中数据库不知道SUM()是什么,当我们需要指C数据库对行分组Q然后限制分l后的行的输出时Q正的Ҏ(gu)是用HAVING语句Q?br /> SELECT sales_clerk,SUN(sale_amount) FROM gross_sales WHERE sales_dept=''OUTSIDE'' GROUP BY sales_clerkHAVING SUM(sale_amount)>10000;


  嵌套函数


  函数可以嵌套。一个函数的输出可以是另一个函数的输入。操作数有一个可l承的执行过E。但函数的优先权只是Z位置Q函数遵循由内到外,由左到右的原则。嵌套技术一般用于象DECODEq样的能被用于逻辑判断语句IF....THEN...ELSE的函数?/span>


  嵌套函数可以包括在组函数中嵌套单行函敎ͼ或者组函数嵌套入单行函数或l函C。比如下面的例子Q?br /> SELECT deptno, GREATEST(COUNT(DISTINCT job),COUNT(DISTINCT mgr) cnt,COUNT(DISTINCT job) jobs,COUNT(DISTINCT mgr) mgrsFROM empGROUP BY deptno;DEPTNO CNT JOBS MGRS------ --- ---- ----10 4 4 220 4 3 430 3 3 2



咖啡企鹅 2009-11-30 10:19 发表评论
]]>
Oracle表查?/title><link>http://www.aygfsteel.com/aczreg/archive/2009/11/28/304029.html</link><dc:creator>咖啡企鹅</dc:creator><author>咖啡企鹅</author><pubDate>Sat, 28 Nov 2009 08:59:00 GMT</pubDate><guid>http://www.aygfsteel.com/aczreg/archive/2009/11/28/304029.html</guid><wfw:comment>http://www.aygfsteel.com/aczreg/comments/304029.html</wfw:comment><comments>http://www.aygfsteel.com/aczreg/archive/2009/11/28/304029.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/aczreg/comments/commentRss/304029.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/aczreg/services/trackbacks/304029.html</trackback:ping><description><![CDATA[<p><strong>查询时过滤重复行DISTINCT关键?br /> </strong>如:<br /> SELECT DISTINCT deptno,job FROM emp;<br /> <br /> <strong>NULLq算处理Q?/strong><br /> NVL判断<br /> 如:<br /> SELECT ename,(sal+comm)*12 "annsal" FROM emp;--当comm为null时整个算式ؓI?br /> SELECT ename,(sal+NVL(comm,0))*12 "annsal" FROM emp;--当comm为null时替换ؓ0<br /> <br /> <strong>LIKE匚wQ?/strong><br /> %L个数字符Q?单个字符<br /> 如:<br /> SELECT * FROM emp WHERE ename LIKE 'S%';<br /> SELECT * FROM emp WHERE ename LIKE 'S__T_';<br /> <br /> <strong>排序ORDER BY ?ASC ?DESC</strong><br /> ASC与升序,可省~;DESC降序<br /> 如:<br /> SELECT * FROM emp ORDER BY sal <span style="color: #ffcc00">ASC</span>;<br /> SELECT * FROM emp ORDER BY sal <span style="color: #ff0000">DESC</span>;<br /> --C先按照deptno升序Q同deptno里按sal降序<br /> SELECT * FROM emp ORDER BY deptno ASC,sal DESC;<br /> <br /> <strong>排序GROUP BY ?HAVING<br /> </strong>GROUP BY分组排列Q与ORDER BY一P其后跟字D|序,也就是分l优先次序; <br /> SELECT AVG(sal),MAX(sal),deptno,job FROM emp GROUP BY deptno,job;<br /> HAVING与GROUP BY联合使用QHAVING 后跟条gQ下面两句效果是{同的:<br /> SELECT * FROM (SELECT AVG(sal) asal,deptno FROM emp GROUP BY deptno) A WHERE A.asal>2000;<br /> SELECT AVG(sal),DEPTNO FROM emp GROUP BY deptno HAVING AVG(sal)>2000;<br /> <br /> <strong>注:</strong>l函数只能出现在选择列表、HAVING、ORDER BY子句中;<br /> SELECT语句中出C下三者,其出现顺序限定ؓGROUP BY、HAVING、ORDER BYQ?br /> <br /> </p> <img src ="http://www.aygfsteel.com/aczreg/aggbug/304029.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/aczreg/" target="_blank">咖啡企鹅</a> 2009-11-28 16:59 <a href="http://www.aygfsteel.com/aczreg/archive/2009/11/28/304029.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle表操?/title><link>http://www.aygfsteel.com/aczreg/archive/2009/11/27/303961.html</link><dc:creator>咖啡企鹅</dc:creator><author>咖啡企鹅</author><pubDate>Fri, 27 Nov 2009 10:34:00 GMT</pubDate><guid>http://www.aygfsteel.com/aczreg/archive/2009/11/27/303961.html</guid><wfw:comment>http://www.aygfsteel.com/aczreg/comments/303961.html</wfw:comment><comments>http://www.aygfsteel.com/aczreg/archive/2009/11/27/303961.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/aczreg/comments/commentRss/303961.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/aczreg/services/trackbacks/303961.html</trackback:ping><description><![CDATA[<div id="wmqeeuq" class="postbody"> <p><font color="#ff0000"><span style="color: #000000"><span style="font-family: Lucida Console"><strong>增加一个列Q?/strong><br /> ALTER TABLE 表名 ADD(列名 数据cd);<br /> 如:<br /> ALTER TABLE emp ADD(weight NUMBER(5,0));</span></span></font></p> <font color="#000000"> <p><font color="#ff0000"><span style="color: #000000"><span style="font-family: Lucida Console"><strong>修改一个列的数据类?一般限于修攚w度,修改Z个不同类型时有诸多限?:<br /> </strong>ALTER TABLE 表名 MODIFY(列名 数据cd);<br /> 如:<br /> ALTER TABLE emp MODIFY(weight NUMBER(3,0) NOT NULL);<br /> </span></span></font></p> <p><font color="#ff0000"><span style="color: #000000"><strong><br /> <span style="font-family: Lucida Console">l列改名Q?/span></strong><br /> <span style="font-family: Lucida Console">ALTER TABLE 表名 RENAME COLUMN 当前列名 TO 新列?<br /> 如:<br /> ALTER TABLE emp RENAME COLUMN weight TO weight_new;</span></span></font></p> <p><font color="#ff0000"><span style="color: #000000"><span style="font-family: Lucida Console"><strong>删除一个列Q?/strong><br /> ALTER TABLE 表名 DROP COLUMN 列名;<br /> 如:<br /> ALTER TABLE emp DROP COLUMN weight_new;</span></span></font></p> <p><font color="#ff0000"><span style="color: #000000"><span style="font-family: Lucida Console"><strong>一个表改名Q?br /> </strong>ALTER TABLE 当前表名 RENAME TO 新表?<br /> 如:<br /> ALTER TABLE emp RENAME TO emp_new;<br /> <br /> <strong>删除一个表Q?/strong><br /> DROP TABLE 表名Q?br /> 如:<br /> DROP TABLE emp;<br /> <br /> <strong>删除一个表的数据:</strong><br /> DELETE TABLE 表名Q?br /> 如:<br /> DELETE TABLE emp;<br /> </span></span></font></p> <br /> <span style="font-family: Lucida Console"><strong>格式化日期在一个SESSIONN?br /> </strong>ORACLE默认日期格式?'23-10<span style="color: #ff0000">?/span>-2008'(??q?<br /> ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';<br /> <strong><br /> 查询I值NULL<br /> </strong>SELECT * FROM 表名 WHERE 列名 <span style="color: #ff0000">IS</span> NULL;<br /> 如:<br /> SELECT * FROM emp WHERE weight <span style="color: #ff0000">IS</span> NULL;<br /> <br /> <strong>更新列?改字D)<br /> </strong>UPDATE 表名 SET 列名=?WHERE 条gQ?br /> 如:<br /> UPDATE emp SET salary=salary+100 WHERE weight <= 80;<br /> </span><br /> <strong>一个SESSION中的SAVEPOINT与ROLLBACK;<br /> </strong>创徏SAVEPOINT点:SAVEPOINT 名;<br /> 如:<br /> SAVEPOINT a;<br /> <span style="color: #ffcc00">中间q行无COMMIT(提交)动作操作……<br /> </span>回滚到SAVEPOINT: ROLLBACK  TO ?<br /> 如:<br /> ROLLBACK TO a;<br /> <br /> </font></div> <img src ="http://www.aygfsteel.com/aczreg/aggbug/303961.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/aczreg/" target="_blank">咖啡企鹅</a> 2009-11-27 18:34 <a href="http://www.aygfsteel.com/aczreg/archive/2009/11/27/303961.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ζ</a>| <a href="http://" target="_blank">˳</a>| <a href="http://" target="_blank">ʯʨ</a>| <a href="http://" target="_blank">ʲ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̷</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">̫</a>| <a href="http://" target="_blank">̶</a>| <a href="http://" target="_blank">ֱ</a>| <a href="http://" target="_blank">ϻ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">J</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">۳</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ӽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˰</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɫ</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ԫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">罭</a>| <a href="http://" target="_blank">ٹ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>