讓你提前認識軟體開發(35):如何修改SQL指令碼以完成需求?,軟體開發sql

來源:互聯網
上載者:User

讓你提前認識軟體開發(35):如何修改SQL指令碼以完成需求?,軟體開發sql

第2部分 資料庫SQL語言

如何修改SQL指令碼以完成需求?

 

         SQL指令碼的修改和C語言代碼的修改流程是一樣的,都要遵循以下步驟:

        第一步,閱讀需求,弄清楚自己要完成什麼功能。

        第二步,對照需求閱讀原代碼,找到本次要修改的內容的一般位置。

        第三步,對代碼進行修改(包括:添加、刪除和修改等),將本次的功能添加上去。

        第四步,對修改後的代碼進行測試,驗證新增功能是否滿足需求。

 

       本文以一個實際的需求完成過程為例,詳細說明如何對SQL指令碼進行修改。

        1. 需求描述

        在某軟體版本中,需要完成如下需求:

        (1) 在原有媒體類型的基礎上新增一種媒體類型4,其功能屬性編號為4。

        (2) 要查詢信箱中儲存的新增媒體類型的使用者總數,並判斷是否達到最大儲存限額。

        (3) 如果最大儲存限額為1000,則表明不限制信箱所儲存的新增的媒體類型的使用者總數,即不用判斷信箱是否滿。

        (4) 如果最大儲存限額為0,則表明信箱不允許接收新增的媒體類型的郵件。

 

        2. 尋找SQL指令碼的修改位置

        通過對需求的理解和原指令碼的閱讀,發現需要在以下代碼位置處進行修改(指令碼是基於Sybase資料庫實現):

……

……

if (@mailtype=1)

begin

    select @functionid = 1

end

else if (@mailtype=2)

begin

    select @functionid = 1

end

else if(@mailtype=3)

begin

    select @functionid = 3

end

 

select @tmpstr = funvalue from tb_cosprofile where cosinid = @mboxserver and functionid = @functionid

 

if (@mailcnt < @maxcnt)

begin

    select @isfull = 0

end

else

begin

    select @isfull = 1

end

……

……

 

         3. 一步一步完成需求

        找到了代碼的修改位置之後,下面就要來實現需求了。

        第一步:在原有媒體類型的基礎上新增一種媒體類型4,其功能屬性編號為4。

        修改之後的代碼如下所示:

……

……

if (@mailtype=1)

begin

    select @functionid = 1

end

else if (@mailtype=2)

begin

    select @functionid = 1

end

else if(@mailtype=3)

begin

    select @functionid = 3

end

-- zzx add 20140709 begin

else if(@mailtype=4)

begin

    select @functionid = 4

end

-- zzx add 20140709 end

……

……

 

        第二步:要查詢信箱中儲存的新增媒體類型的使用者總數,並判斷是否達到最大儲存限額。

        對照原代碼,該需求可採用之前的實現,本次不做修改。

 

        第三步:如果最大儲存限額為1000,則表明不限制信箱所儲存的新增的媒體類型的使用者總數,即不用判斷信箱是否滿。如果最大儲存限額為0,則表明信箱不允許接收新增的媒體類型的郵件。

        在修改代碼的時候,我們有一個原則,那就是盡量不要改變之前的流程。因此,為了完成該需求,考慮採用“if…else”語句,對本次新增的媒體類型進行單獨處理。

       修改之後的代碼如下所示:

……

……

-- zzx add 20140709 begin

if (@functionid = 4)

begin

    if (@maxcnt = 0)

    begin

        select @isfull = 2        -- 對於這種情況,要返回一個特殊的值

    end

    else if (@maxcnt = 1000)

    begin

        select @isfull = 0

    end

    else

    begin

         if (@mailcnt < @maxcnt)

         begin

             select @isfull = 0

         end

         else

         begin

             select @isfull = 1

         end

    end

end

-- zzx add 20140709 end

else

begin

    if (@mailcnt < @maxcnt)

    begin

        select @isfull = 0

    end

    else

    begin

        select @isfull = 1

    end

end

……

……

 

        經過以上三步的修改之後,最後的指令碼如下所示:

……

……

if (@mailtype=1)

begin

    select @functionid = 1

end

else if (@mailtype=2)

begin

    select @functionid = 1

end

else if(@mailtype=3)

begin

    select @functionid = 3

end

-- zzx add 20140709 begin

else if(@mailtype=4)

begin

    select @functionid = 4

end

-- zzx add 20140709 end

 

select @tmpstr = funvalue from tb_cosprofile where cosinid = @mboxserver and functionid = @functionid

 

-- zzx add 20140709 begin

if (@functionid = 4)

begin

    if (@maxcnt = 0)

    begin

        select @isfull = 2        -- 對於這種情況,要返回一個特殊的值

    end

    else if (@maxcnt = 1000)

    begin

        select @isfull = 0

   end

   else

   begin

         if (@mailcnt < @maxcnt)

        begin

            select @isfull = 0

       end

       else

       begin

           select @isfull = 1

       end

   end

end

-- zzx add 20140709 end

else

begin

    if (@mailcnt < @maxcnt)

    begin

        select @isfull = 0

    end

    else

    begin

    select @isfull = 1

    end

end

……

……

 

        4. 對修改之後的代碼進行測試

       代碼修改完後,我們還要進行充分的自測之後才能提交版本。

       對於SQL指令碼的測試,需要構造一些資料,待指令碼執行完之後,查看是否按照需求要求執行了特定的流程。

 

       總的說來,在修改SQL指令碼的過程中,我們要注意以下事項:

       (1) 在動手修改代碼之前,一定要將需求理解到位,弄清楚要實現的功能到底是什麼。

       (2) 在修改代碼的過程中,要嚴格參照編程規範執行。對於改動的代碼,一定要添加註釋。

       (3) 代碼的修改要遵循最小改動原則,即我們在盡量不改變原程式流程的前提下來實現新的功能。

       (4) 在代碼修改完之後,一定要進行充分的自測。這個與C語言程式的測試是一樣的道理。

 

      “實踐出真知”,只有通過不斷的實踐,我們才能夠提高自己的編程能力,才能夠掌握需求實現的正確而快速的方法。

 

 

 

(本人微博:http://weibo.com/zhouzxi?topnav=1&wvr=5,號:245924426,歡迎關注!)


怎更改sql指令碼?

這個網站的程式如果不是你寫的,那就不是你的錯,也不需要你去修改指令碼,你也改不了指令碼。
 
這樣怎更改資料庫

沒有主鍵?那也起碼有一個欄位是唯一值的吧,否則你修改的那條資料,怎麼知道是對應資料庫裡面的那條呢?
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.