Chinaunix首页 | 论坛 | 博客
  • 博客访问: 632638
  • 博文数量: 825
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 4980
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-27 14:19
文章分类

全部博文(825)

文章存档

2011年(1)

2008年(824)

我的朋友

分类:

2008-10-27 14:27:37

  所有的MIS系统都存在一个同样的需求,就是对于特定的数据,在一次批量操作过程中,如果数据已经存在,则对存在的数据按照现有情况进行更新,如果不存在,则需要加入数据库。这时,我们就可以考虑采用  MERGE 函数,其具体用法如下:

MERGE INTO [your table-name] [rename your table here]

    USING

        (

            [write your query here]

        )[rename your query-sql and using just like a table]

    ON

        ([conditional expression here] AND [...]...)

    WHEN

        MATHED

    THEN

        [here you can execute some update sql or something else ]

    WHEN

        NOT MATHED

    THEN

        [execute something else here ! ]

 

下面我再进行详细的说明:

   上述代码格式中的加粗字体表示为 关键字,[]以及其中的文字均是说明,在实际使用中不应有 [ words ] 出现。要注意()[圆括号]也是程序的组成部分。

   为了能够使问题与实际问题更加贴切,不妨假设我们现在要给计算机系某个班的学生批量录入学生成绩。但是,录入时,如果学生的成绩已经存在时,老师只想对成绩进行修改,而如果成绩不存在则直接添加到库中。我们就老师的这些需求来构造一个执行语句。

 

DEFINE TABLE :

    SCORE :  using for save the students' score informations

    STUDENTS : the base information of students

DEFINE COLUMNS :

    STUNO : the students' ID in the University

    STUNAME : students' name

    COURSENAME : course name

    COURSESCORE : the study-results of the reference course

    CLASSNAME : where the students study in

    STUGRADE : the students grade

    TERMNAME : the term which the reference course studied

NOW BEAGIN TO WRITE DOWN THE STATEMENT HERE BLOW THIS LINE !

 

MERGE INTO SCORE S

    USING

        (

            SELECT A.*,B.*,? MYSCORE FROM SCORE A,STUDENT B

            WHERE

                A.CLASSNO=? AND A.GRADE=?

                AND A.TERMNAME=? AND A.COURSENAME=?

                A.STUNO=B.STUNO(+)

        )X

    ON

        (S.STUNO=X.STUNO)

    WHEN

        MATHED

    THEN

        UPDATE SET COURSESCORE=X.MYSCORE

    WHEN

        NOT MATHED

    THEN

        INSERT

            (

                STUNO,STUNAME,COURSENAME,COURSESCORE,

                CLASSNAME,STUGRADE,TERMNAME

            )

        VALUES

            (

                X.STUNO,X.STUNAME,X.COURSENAME,X.MYSCORE,

                X.CLASSNAME,X.STUGRADE,X.TERMNAME

            );

 

注意到 MERGE 语句在最后的“;”(分号),这仅仅带到 MERGE 为一条完整的 SQL 语句。

 

 

[1]  

【责编:Peng】

--------------------next---------------------

阅读(371) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~